Spisu treści:

Ramię robota kontrolowane przez Arduino i komputer: 10 kroków
Ramię robota kontrolowane przez Arduino i komputer: 10 kroków

Wideo: Ramię robota kontrolowane przez Arduino i komputer: 10 kroków

Wideo: Ramię robota kontrolowane przez Arduino i komputer: 10 kroków
Wideo: Jak zacząć budować roboty w 2023? 2024, Lipiec
Anonim
Image
Image
Teoria za projektem
Teoria za projektem

Ramiona robotów znajdują szerokie zastosowanie w przemyśle. Niezależnie od tego, czy chodzi o operacje montażowe, spawanie lub nawet jeden służy do dokowania na ISS (Międzynarodowej Stacji Kosmicznej), pomagają ludziom w pracy lub całkowicie zastępują człowieka. Ramię, które zbudowałem, jest mniejszą reprezentacją ramienia robota, które ma służyć do przemieszczania obiektów. Jest kontrolowany przez arduino pro mini, który ma już wbudowaną bibliotekę do sterowania serwami. Serwa są sterowane przez PWM (Pulse Width Modulation), co nie jest trudne do zaprogramowania, ale ta biblioteka ułatwia. Użytkownik może sterować tymi serwomechanizmami za pomocą potencjometrów, które mają działać jako dzielniki napięcia lub z programu na PC, który wykorzystuje 4 suwaki do sterowania serwomotorami.

Do tego projektu musiałem zaprojektować własną płytkę drukowaną i wykonać ją, stworzyć modele 3D ramienia i napisać kod, który to wszystko kontroluje. Ponadto zakodowałem dodatkowy program w pythonie, który wysyła sygnały do arduino, który potrafi zdekodować ten sygnał i przesunąć serwa do pozycji ustawionej przez użytkownika.

Krok 1: Teoria za projektem

Teoria za projektem
Teoria za projektem

Arduino jest świetny pod tym względem, że oferuje darmową bibliotekę do pracy. Do tego projektu wykorzystałem bibliotekę Servo.h, która znacznie ułatwia sterowanie serwami.

Silnik servo jest sterowany przez PWM -Pulse Width Modulation - co oznacza, że aby sterować serwomechanizmem należy wykonać krótkie impulsy napięciowe. Serwo może dekodować długość tego sygnału i obracać się do zadanej pozycji. I tu właśnie wykorzystałem wspomnianą bibliotekę. Nie musiałem samodzielnie obliczać długości sygnału, ale skorzystałem z funkcji biblioteki, do której po prostu przekazuję parametr w stopniach i daje sygnał.

Do sterowania serwami wykorzystałem potencjometry pełniące rolę dzielników napięcia. Płyty Arduino mają kilka przetworników analogowo-cyfrowych, których użyłem w projekcie. Zasadniczo arduino monitoruje napięcie na środkowym pinie potencjometru i jeśli obraca się w jedną stronę, napięcie na nim wynosi 0 V (wartość = 0), a po drugiej stronie 5 V (wartość = 1023). Wartość ta jest następnie skalowana z zakresu 0-1023 do 0-180, a następnie przekazywana do wspomnianej już funkcji.

Kolejnym tematem jest komunikacja szeregowa z arduino, którą pokrótce omówię. Zasadniczo program napisany na PC wysyła wybraną przez użytkownika wartość, arduino może ją zdekodować i przesunąć serwo w daną pozycję

Krok 2: Projektowanie PCB

Projektowanie PCB
Projektowanie PCB
Projektowanie PCB
Projektowanie PCB
Projektowanie PCB
Projektowanie PCB

Zaprojektowałem 2 płytki - jedną do sterowania głównego, gdzie jest arduino i piny do serw, a na drugiej potencjometry. Powodem dla 2 płytek jest to, że chciałem sterować ramieniem robota z bezpiecznej odległości. Obydwa obwody połączone są kablem o podanej długości - w moim przypadku 80 cm.

Jako źródło zasilania wybrałem zewnętrzny adapter, ponieważ serwa, których użyłem, zużywają znacznie więcej energii niż może dostarczyć arduino. Jak widać są kondensatory, o których jeszcze nie wspomniałem. Są to kondensatory służące do filtracji. Jak już wiesz, serwomotor sterowany jest krótkimi impulsami. Impulsy te mogą sprawić, że napięcie zasilania spadnie, a potencjometry, które wcześniej miały zakres 0-5 woltów, mają teraz mniejszy zasięg. Oznacza to, że napięcie na środkowym pinie zmienia się, a arduino otrzymuje tę wartość i zmienia pozycję, w której znajduje się serwomotor. Może to trwać w nieskończoność i powoduje niepożądane oscylacje, które mogą być wyeliminowane przez niektóre kondensatory równolegle do zasilania.

Krok 3: Tworzenie PCB

Dokonywanie PCB
Dokonywanie PCB
Dokonywanie PCB
Dokonywanie PCB
Dokonywanie PCB
Dokonywanie PCB

Do robienia PCB sugeruję przeczytanie tego.

Użyłem metody Iron on Glossy paper i wyszło to świetnie.

Następnie przylutowałem części na płytce drukowanej. Widać, że użyłem gniazda arduino na wypadek, gdybym go potrzebował w przyszłości.

Krok 4: Projektowanie ramienia

Projektowanie ramienia
Projektowanie ramienia
Projektowanie ramienia
Projektowanie ramienia
Projektowanie ramienia
Projektowanie ramienia

W żadnym wypadku nie była to najtrudniejsza część tworzenia tego projektu.

Całość składa się z 8 części, z których 4 nie są ruchomymi - skrzynka na potencjometry i podstawa, na której znajduje się arduino - a pozostałe cztery to samo ramię. Nie będę się zagłębiał w szczegóły, z wyjątkiem tego, że projekt jest dość intuicyjny i w pewien sposób prosty. Został zaprojektowany tak, aby pasował do mojej niestandardowej płytki drukowanej i serw, które dołączę do listy części.

Krok 5: Drukowanie części

Drukowanie części
Drukowanie części
Drukowanie części
Drukowanie części
Drukowanie części
Drukowanie części

Części zostały wydrukowane na drukarce Prusa. Niektóre powierzchnie trzeba było trochę oszlifować i wywiercić otwory. Trzeba było również usunąć filary nośne.

Krok 6: Złóż wszystko razem

Kładąc wszystko razem
Kładąc wszystko razem
Kładąc wszystko razem
Kładąc wszystko razem
Kładąc wszystko razem
Kładąc wszystko razem
Kładąc wszystko razem
Kładąc wszystko razem

W tym kroku, jak mówi tytuł, złożyłem to wszystko razem.

Najpierw przylutowałem przewody na potencjometrach, a potem te przewody na płytce drukowanej. Potencjometry ładnie wpasowują się w otwory i przykleiłem płytkę na gorąco na słupkach, które zostały wydrukowane na spodzie pudełka. Otwory można wywiercić w desce i w pudełku, ale okazało się, że sklejenie wystarczy. Następnie zamknąłem obie części pudełka i zabezpieczyłem je 4 śrubami, które pasują do zaprojektowanych przeze mnie otworów.

W kolejnym kroku wykonałem płaski kabel taśmowy do połączenia obu płyt.

W skrzynce głównej przylutowałem przewody od pinu VCC złącza do przełącznika, a następnie do Vcc płytki i od GND płytki do GND złącza. Następnie przykleiłem na gorąco złącze i płytę na słupkach. Złącze pasuje do otworu, więc nie jest potrzebny gorący klej.

Następnie za pomocą śrub przymocowałem dolne serwo do dolnej części pudełka.

Następnie górną część puszki nałożyłem na dolną i tak samo jak puszkę potencjometru przykręciłem 4 śrubami.

Następna część była trochę trudna, ale udało mi się połączyć resztę ramienia z różnymi nakrętkami i podkładkami i nie było tak ciasno, jak się spodziewałem, ponieważ zaprojektowałem pewne tolerancje między częściami, więc łatwiej z nimi pracować.

A jako ostatni krok nałożyłem taśmę na spód pudełek, bo inaczej by się ślizgały.

Krok 7: Programowanie Arduino

Programowanie Arduino
Programowanie Arduino
Programowanie Arduino
Programowanie Arduino
Programowanie Arduino
Programowanie Arduino

Wspomniałem już, jak program działa w teorii stojącej za projektem, ale zamierzam to jeszcze bardziej podzielić.

Więc na początku musimy zdefiniować kilka zmiennych. W większości jest to kopiowane 4 razy, ponieważ mamy 4 serwa i moim zdaniem nie ma potrzeby robienia bardziej skomplikowanej logiki tylko po to, aby program był trochę krótszy.

Następna jest konfiguracja void, w której zdefiniowane są piny serw.

Następnie jest void loop - część programu, która zapętla się w nieskończoność. W tej części program pobiera wartość z potencjometru skaluje ją i wprowadza na wyjście. Ale jest jeden problem, że wartość z potencjometru dość mocno przeskakuje, więc musiałem dodać filtr, który uśrednia ostatnie 5 wartości, a następnie wprowadza na wyjście. Zapobiega to niepożądanemu kołysaniu.

Ostatnia część programu odczytuje dane z portu szeregowego i na podstawie przesłanych danych decyduje co zrobić.

Aby w pełni zrozumieć kod, proponuję odwiedzić oficjalne strony arduino.

Krok 8: Programowanie w Pythonie

Programowanie w Pythonie
Programowanie w Pythonie
Programowanie w Pythonie
Programowanie w Pythonie
Programowanie w Pythonie
Programowanie w Pythonie

Ta część tego projektu nie jest potrzebna, ale myślę, że to tylko zwiększa wartość tego projektu.

Python oferuje mnóstwo bibliotek, z których można korzystać za darmo, ale w tym projekcie używam tylko tkinter i serial. Tkinter jest używany do GUI (Graphical User Interface), a serial, jak sama nazwa wskazuje, służy do komunikacji szeregowej.

Ten kod tworzy GUI z 4 suwakami, które mają minimalną wartość 0 i maksymalnie 180. Może to być wskazówka dla Ciebie, że jest w stopniach, a każdy suwak jest zaprogramowany do sterowania jednym serwomechanizmem. Ten program jest dość prosty - pobiera wartość i wysyła ją do arduino. Ale sposób, w jaki wysyła, jest interesujący. Jeśli zdecydujesz się zmienić wartość pierwszego serwa na 123 stopnie, do arduino zostanie wysłana wartość 1123. Pierwsza liczba każdego wysłanego numeru mówi, który serwo ma być kontrolowany. Arduino ma kod, który może to zdekodować i przesunąć odpowiednie serwo.

Krok 9: Lista części

Lista części
Lista części
  • Arduino Pro Mini 1 sztuka
  • Serwo FS5106B 1 sztuka
  • Serwo Futaba S3003 2 sztuki
  • Nagłówek pinów 2x5 1 sztuka
  • Nagłówek pinów 1x3 6 sztuk
  • Kondensator 220uF 3 sztuki
  • Micro Servo FS90 1 sztuka
  • Złącze AWP-10 2 sztuki
  • Złącze FC681492 1 sztuka
  • Przełącznik P-B100G1 1 sztuka
  • Gniazdo 2x14 1 sztuka
  • TTL-232R-5v - konwerter 1 szt.
  • Potencjometr B200K 4 sztuki
  • i wiele innych śrub, podkładek i nakrętek

Krok 10: Końcowe myśli

Dziękuję za przeczytanie tego i mam nadzieję, że przynajmniej Cię zmotywowałem. To mój pierwszy większy projekt, który wykonałem sam bez kopiowania rzeczy z internetu i pierwszego postu z instrukcjami. Wiem, że ramię można by ulepszyć, ale na razie jestem z tego zadowolony. Wszystkie części i kody źródłowe są bezpłatne, możesz z nich korzystać i zmieniać je w dowolny sposób. Jeśli masz jakieś pytania, możesz je zadać w sekcji komentarzy. Możesz również obejrzeć filmy, nie są w świetnej jakości, ale pokazują funkcjonalność projektu.

Zalecana: