Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Ta instrukcja dotyczy tego, jak powstaje jednostka 2D pick and place i jak ją zakodować.
Krok 1: Komputery
1x Adrio Mega
2x silniki krokowe (użyliśmy silnika krokowego JLB, model 17H1352-P4130)
2x Moduł płyty kontrolera napędu silnika krokowego L298N Dual H Bridge DC dla Arduino
1x serwomotor (nie mamy plamki na tym)
Rezystory 3x 10 kΩ
2x nylonowe bąbelki
Zasilanie 1x12 v
Trochę drewna na ramę
Przewody
Krok 2: Budowa
Pierwszą rzeczą podczas budowy twarzy było określenie rozmiaru i kształtu maszyny pick and place
Najpierw budujemy drewno o podstawowym kształcie. Zbudowaliśmy naszą ramę typu pick and place o wymiarach 50 cm na 25 cm na 30 cm. Wszystko oprócz ramy, mostka i ramienia podnoszącego zostało wyprodukowane za pomocą wycinarki laserowej.
Oto link do wszystkich plików
Potem chcieliśmy system bloczków. Tutaj poszliśmy z dwoma pierścieniami 50 mm i jednym pierścieniem 20 mm. Następnie kładziemy paracord obok 20mm z odrobiną kleju. Następnie ścisnęliśmy dwa pierścienie 50 mm po obu stronach pierścienia 20 mm.
20mm
50mm
Następnie musimy zaprojektować prowadnicę ślizgową do ramienia. Tutaj wykonaliśmy dwie strony i jedną tylną płytę.
Który następnie został sklejony w formie U. Następnie połączyliśmy to z mostem.
Płyta boczna
Tylna rejestracja
Teraz, gdy części do poruszania ramieniem w górę iw dół są gotowe. Musimy przesuwać go tam iz powrotem.
Przy projektowaniu tego zadbaliśmy o to, aby zęby były ze sobą wyrównane. Tak więc oba elementy powstały w tym samym miejscu projektu.
Krok 3: Kod
Programowanie jest dość proste i składa się z 5 części
- Włączenie bibliotek i konfiguracja zmiennych do użytku wewnętrznego i we/wy
- Załaduj wejścia do pamięci RAM
- Sekvens, wybierając żądany ruch.
- Sterowanie położeniem krokowym/serwomechanizmu
- Wyjście na świat
Wyjaśnimy każdą część szerokim łukiem, ale pamiętaj, że to tylko jedno z wielu rozwiązań.
1: Przed ustawieniem void dodaliśmy 2 biblioteki, których potrzebujemy do tego projektu. Krokowy i serwo. Korzystanie z dołączonych bibliotek pozwala uniknąć poznawania każdego szczegółu na temat silników krokowych i serwomotorów.
#włączać
#włączać
const int stepsPerRevolution = 200; // zmień to, aby dopasować liczbę kroków na obrót dla twojego silnika
// zainicjuj bibliotekę krokową na pinach od 8 do 11:
Stepper XSStepper(kroki na obrót, 22, 23, 24, 25); Stepper YStepper (kroki na obrót, 28, 29, 30, 31); chwytak serwo; // utwórz obiekt servo do sterowania serwo
chwytak musi zostać przymocowany w konfiguracji pustki
void setup() { // zainicjuj port szeregowy: Serial.begin(9600); Chwytak.attach(9); // dołącza serwo na pin 9 do obiektu serwo
Pozostała część tej sekcji to tylko konfiguracja zmiennych i stałych.
2: Pierwszą rzeczą w Pętli Pustki jest załadowanie wszystkich użytych danych wejściowych do zmiennej. Dzieje się tak z dwóch powodów. Pierwszym powodem jest ograniczenie obciążających procesor zadań odczytu danych wejściowych. Drugi powód, który jest najważniejszy, to upewnienie się, że jeśli dane wejściowe zostaną użyte więcej niż jeden raz, będą miały tę samą wartość przez cały skan. To znacznie ułatwia pisanie spójnego kodu. Jest to bardzo powszechna praktyka w programowaniu PLC, ale dotyczy również programowania wbudowanego.
//--------------------------Wprowadzanie do pamięci RAM-------------------- Xend = digitalRead (34); Yend = digitalRead (35); Ena = odczyt cyfrowy(36);
3: W części kodu sekvens właśnie stworzyliśmy sekvens z poleceniami Switch i case. Część sekvens po prostu przekazuje sygnały do części kodu dotyczącej kontroli pozycji. Ta część może być łatwo dostosowana do aplikacji lub używana bez zmian.
4: Pozycja serwa jest kontrolowana przez serwo liberi, a stwierdzenie „jeśli” dotyczy otwartego i zamkniętego chwytaka.
Sterowanie krokowe jest nieco bardziej skomplikowane. Funkcja porównuje Nastawę (Pozycję, do której ramię ma się udać) i Aktualną pozycję. Jeśli aktualna pozycja jest niższa, funkcja dodaje się do pozycji i prosi funkcję Stepper liberi o wykonanie pozytywnego kroku. Odwrotna sytuacja ma miejsce w przypadku zbyt wysokiej pozycji. jeśli pozycja jest taka sama jak wartość zadana, bit XinPos jest ustawiony wysoko, a stepper zatrzymuje się.
// SP kontrola X
if (XstepCountXsp i nie Home){
Xlicz.kroków=Xlicz.kroków-1; Xkrok=-1; XwPozycji = 0; } if (XstepCount==Xsp){ Xstep=0; XwPoz = 1; }
5: Dodaj koniec kodu, w którym silniki są sterowane za pomocą funkcji liberi.
//--------------------Wyjście---------------------- // krok jeden krok: Xkrok.krok(Xkrok); // krok jeden krok: YStepper.step(Ystep);
Griper.write(GripSp);
Krok 4: Wykonane przez
Casp6099 - Casper Hartung Christensen
rasm616d - Rasmus Hansen