UCL - Wbudowany - Wybierz i umieść: 4 kroki
UCL - Wbudowany - Wybierz i umieść: 4 kroki
Anonim
UCL - Osadzony - Wybierz i umieść
UCL - Osadzony - Wybierz i umieść

Ta instrukcja dotyczy tego, jak powstaje jednostka 2D pick and place i jak ją zakodować.

Krok 1: Komputery

Komputery
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

Budowa
Budowa
Budowa
Budowa
Budowa
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

Kod
Kod
Kod
Kod
Kod
Kod

Programowanie jest dość proste i składa się z 5 części

  1. Włączenie bibliotek i konfiguracja zmiennych do użytku wewnętrznego i we/wy
  2. Załaduj wejścia do pamięci RAM
  3. Sekvens, wybierając żądany ruch.
  4. Sterowanie położeniem krokowym/serwomechanizmu
  5. 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