Spisu treści:

Kontrolowane przez Arduino ramię robota z 6 stopniami swobody: 5 kroków (ze zdjęciami)
Kontrolowane przez Arduino ramię robota z 6 stopniami swobody: 5 kroków (ze zdjęciami)

Wideo: Kontrolowane przez Arduino ramię robota z 6 stopniami swobody: 5 kroków (ze zdjęciami)

Wideo: Kontrolowane przez Arduino ramię robota z 6 stopniami swobody: 5 kroków (ze zdjęciami)
Wideo: Robotyczne ramię sterowane przez Wi-Fi 2024, Lipiec
Anonim
Kontrolowane przez Arduino ramię robota z 6 stopniami swobody
Kontrolowane przez Arduino ramię robota z 6 stopniami swobody
Kontrolowane przez Arduino ramię robota z 6 stopniami swobody
Kontrolowane przez Arduino ramię robota z 6 stopniami swobody
Kontrolowane przez Arduino ramię robota z 6 stopniami swobody
Kontrolowane przez Arduino ramię robota z 6 stopniami swobody

Jestem członkiem grupy robotyki i każdego roku nasza grupa bierze udział w corocznych targach Mini-Maker. Począwszy od 2014 roku postanowiłem budować nowy projekt na coroczne wydarzenie. Miałem wtedy około miesiąca przed wydarzeniem, żeby coś poskładać i nie miałem pojęcia, co chcę robić.

Członek zespołu opublikował link do „ciekawej konstrukcji ramienia robota o otwartym kodzie źródłowym”, który wzbudził moje zainteresowanie. Plany były tylko ramieniem bez elementów sterujących lub kontrolera. Biorąc pod uwagę moje ograniczenia czasowe, wydawało mi się to naprawdę dobrym punktem wyjścia. Jedynym problemem było to, że tak naprawdę nie miałem narzędzi, aby zacząć.

Z pomocą niektórych członków grupy udało mi się wyciąć i wysłać do mnie części akrylowe, a także dwie części wydrukowane w 3D pokazane poniżej. W połączeniu z kilkoma nocnymi zamówieniami na sprzęt i kilkoma wycieczkami do lokalnego sklepu z narzędziami, ukończyłem roboczy projekt na noc przed wydarzeniem!

Jak to zwykle bywa, jest więcej historii i kilka wcieleń w kompilacji, które zostały skondensowane do tego, co widzisz poniżej. Jeśli interesuje Cię historia z przeszłości, więcej można znaleźć tutaj:

Krok 1: Czego potrzebujesz - sprzęt i elektronika

Czego potrzebujesz - sprzęt i elektronika
Czego potrzebujesz - sprzęt i elektronika
Czego potrzebujesz - sprzęt i elektronika
Czego potrzebujesz - sprzęt i elektronika

Pierwotny projektant mieszkał w Europie, a następnie używał powszechnie stosowanych tam pomiarów metrycznych i materiałów. Na przykład presostat, którego użył do wykonania karoserii, miał standardową grubość 5 mm. Podobny materiał tutaj w USA ma 1/8 cala i ma grubość około 3,7 mm. Pozostawiło to lukę w otworach, które pierwotnie zostały zaprojektowane do dopasowania na wcisk. Zamiast poprawiać rysunki, po prostu użyłem kleju Gorilla Glue do zabezpieczenia tych połączeń.

Użył również gwintowanych nakrętek i śrub M3, które nie są standardowe w lokalnym sklepie z narzędziami w USA. Zamiast konwertować je na opcje dostępne lokalnie, po prostu zamówiłem sprzęt online, jak pokazano na poniższej liście części.

  • 22 - Wsporniki M3 x 0,5 x 23 mm
  • 15 - Przekładki M3 x 15mm
  • 40 - Śruby M3
  • Nakrętki sześciokątne M3
  • Śruby M3 25mm
  • 1 - Wiosna
  • Dwustronna taśma montażowa 3/4"
  • 5 - Serwomechanizm SG 5010 TowerPro
  • 1 - mini serwo SG92R TowerPro
  • 1 - mini serwo SG90 TowerPro
  • Jednorzędowa prosta głowica kołkowa 2,54 mm
  • 1 - Półwymiarowa deska do krojenia chleba
  • 1 - Przewody połączeniowe żeńskie/męskie „przedłużające” - 40 x 6"
  • 1 - 12 "x 24" niebieski arkusz akrylowy lub wycięte laserowo kawałki od ulubionego usługodawcy
  • 2 - 3mm x 20mm + 4mm x 5mm przekładki łożysk przegubowych Druk 3D (patrz poniżej)
  • 1 - Panel sterowania *Patrz uwaga w sekcji okablowania
  • 1 - Rozproszona dioda LED RGB (trójkolorowa) 10mm
  • 1 - Arduino Uno
  • 1 - Standard LCD 16x2 + dodatki - biały na niebieskim
  • 1 - plecak z wyświetlaczem LCD i2c / SPI
  • 1 - Adafruit 16-kanałowy 12-bitowy sterownik PWM/serwosterownika
  • 1 - MCP3008 - 8-kanałowy 10-bitowy ADC z interfejsem SPI
  • 3 - Czujnik modułu JoyStick Breakout *Patrz uwaga w sekcji okablowania
  • Gniazdo baryłkowe DC
  • Zasilacz AC na DC
  • Przedłużacze serwomechanizmu - różne długości

Prawie wszystkie części tego ramienia zostały wycięte z akrylu o grubości 1/8 cala. Dwie przekładki łożyska przegubu muszą być jednak wydrukowane. Oryginał wymagał również, aby dwie podstawy dystansowe przegubów miały 7 mm wysokości do wału łożyska. Kiedy zacząłem montować ramię, szybko stało się jasne, że są one zbyt wysokie ze względu na wysokość serw TowerPro. Musiałem mieć nowe łożyska przegubowe z podstawą o wysokości zaledwie 3 mm, która, nawiasem mówiąc, wciąż była trochę za wysoka, ale łatwa do opanowania. Zwróć uwagę na względną wysokość serw i uwzględnij odległość między dwoma dolnymi ramionami:

Wysokość serw + serwomechanizm + łożysko przegubu + taśma dwustronna = 47mm +/- 3mm.

Krok 2: Montaż ramienia

Zespół ramienia
Zespół ramienia
Zespół ramienia
Zespół ramienia
Zespół ramienia
Zespół ramienia
Zespół ramienia
Zespół ramienia

Zanim zaczniesz, wycentruj wszystkie serwa! Jeśli w dowolnym momencie podczas budowy ręcznie przesuniesz pozycję serwomechanizmu, będziesz musiał wyśrodkować go przed przymocowaniem go do ramy. Jest to szczególnie ważne w przypadku serwomechanizmów naramiennych, które zawsze muszą poruszać się zgodnie.

  1. Przymocuj serwo podstawowe do górnej płyty podstawy za pomocą śrub M3 25 mm i nakrętek sześciokątnych. Nie dokręcaj zbyt mocno! UWAGA: Możesz chcieć dokręcić mocno gwinty, aby zminimalizować luzowanie się nakrętek podczas użytkowania.

  2. Jeśli korzystasz z listy części, którą mam powyżej, będziesz chciał następnie zmontować 5 podkładek dystansowych podstawy, skręcając ze sobą 2 wsporniki M3 x 0,5 x 23 mm, a następnie mocując je do górnej płyty podstawy za pomocą nakrętek sześciokątnych.
  3. Przymocuj dolną płytę podstawy do wsporników za pomocą 5 śrub M3.
  4. Przymocuj płytkę naramienną do dwóch płyt montażowych serwomechanizmu za pomocą bezpiecznego kleju akrylowego. Użyłem tutaj kleju Gorilla Glue. UWAGA: Każda z dwóch płyt serwa ma z tyłu otwór, który umożliwia włożenie podkładki wzmacniającej łączącej je. Upewnij się, że otwory są wyrównane!* Mając pod ręką klej, połącz płytkę montażową nadgarstka z płytą główną chwytaka.* Opcjonalnie możesz również przykleić płytkę serwa nadgarstka do dwóch płyt łączących nadgarstki. Nie zrobiłem tego, wybierając zamiast tego połączyć je razem z dystansami, jak opisano poniżej.
  5. Przymocuj teraz utwardzony zespół ramienia do serwa podstawowego. Użyłem najszerszego klaksonu dołączonego do serwomechanizmu, którym był sześciocylindrowy róg montażowy.

  6. Dodanie ramy przedramienia do serw ramion może być trudne. Przed kontynuowaniem sugeruję zamocowanie klaksonu do ramek dolnego ramienia. UWAGA: Pamiętaj, aby wycentrować serwa dla zespołu ramion PRZED przymocowaniem ich do ramy. Te dwa serwa muszą poruszać się zgodnie, a jeśli są niewłaściwie wyrównane, spowodują co najmniej drgania serw, a jeśli będą wystarczająco źle wyrównane, mogą uszkodzić ramę lub serwa. * Każde z serwomechanizmów naramiennych jest montowane za pomocą wsporników z tyłu płyt montażowych zamiast przepuszczania serw przez płyty - pozwoli to wepchnąć klakson na wał serw pod kątem i dokręcić śrubę. Nie mocuj jeszcze serwomechanizmu do płyty montażowej. * Następnie dodaj wewnętrzne serwo i zamontuj ramię
  7. Zamontuj ramę górnego ramienia i serwa, wpychając serwa przez przestrzenie w ramionach, a następnie wkładając przekładki między obie płyty górnego ramienia i przymocuj śrubami M3.
  8. Dodaj dwustronną taśmę samoprzylepną z tyłu rozpórki stawu łokciowego i przytnij nadmiar.
  9. Przymocuj element dystansowy do dolnej części serwomechanizmu, który będzie działał jako siłownik kolankowy.
  10. Wsuń zespół ramienia górnego do ramy zespołu ramienia dolnego i przykręć śruby serwomechanizmu.
  11. Dodaj odstępy wzmacniające między dwiema płytami dolnego ramienia. Użyłem dwóch zamiast wszystkich czterech, aby obniżyć wagę.
  12. Przyklej dwustronną taśmę samoprzylepną z tyłu górnej podkładki dystansowej przegubu nadgarstka i przytnij nadmiar.
  13. Przymocuj element dystansowy do dolnej części serwomechanizmu, który będzie działał jako siłownik nadgarstka.
  14. Przymocuj zewnętrzną płytkę nadgarstka do serwomechanizmu nadgarstka i zabezpiecz śrubą klaksonu.
  15. Zamontuj płytkę serwomechanizmu nadgarstka z dwiema płytkami przegubu nadgarstka i wspornikami.
  16. Zamocuj serwomechanizm nadgarstka na płycie serwa za pomocą płyty zaciskowej serwa.
  17. Będziesz musiał przymocować klakson nadgarstka do serwomechanizmu przed przymocowaniem zespołu chwytaka do tego klaksonu, ponieważ otwór na śrubę klaksonu jest zablokowany.
  18. Luźno zmontuj części chwytaka w celu dopasowania przed przymocowaniem tuby serwomechanizmu chwytaka do serwomechanizmu. Pozwoli to na przykręcenie klaksonu w poprzednim kroku.
  19. Przymocuj róg chwytaka do jego serwa i dokręć śruby mocujące złącza chwytaka. UWAGA: nie dokręcaj całkowicie tych nakrętek i śrub, ponieważ muszą być poluzowane, aby umożliwić ruch chwytaka.

Krok 3: Okablowanie i panel sterowania

Okablowanie i panel sterowania
Okablowanie i panel sterowania
Okablowanie i panel sterowania
Okablowanie i panel sterowania
Okablowanie i panel sterowania
Okablowanie i panel sterowania

Zbudowałem ten projekt jako platformę programistyczną dla niektórych pomysłów, które mam na późniejszy projekt edukacyjny. Tak więc większość moich połączeń to proste złącza dupontowe. Jedyne lutowanie, jakie wykonałem, dotyczyło MCP3008. Jeśli możesz znaleźć tabliczkę zaciskową dla tego komponentu, powinieneś być w stanie skonstruować to ramię bez lutowania.

Istnieją 3 grupy komponentów:

  1. Wejścia - te elementy pobierają informacje od użytkownika i składają się z joysticków i mcp3008 ADC.
  2. Dane wyjściowe - te elementy przekazują dane światu, pokazując użytkownikowi status lub aktualizując serwomechanizmy o dane pozycji. Te elementy to ekran LCD, plecak LCD, dioda LED RGB, płyta sterownika Servo i wreszcie serwa.
  3. Przetwarzanie - Arduino zamyka ostatnią grupę, która pobiera dane z wejść i wysyła dane na wyjścia zgodnie z instrukcjami kodu.

Powyższy schemat Fritzing wyszczególnia połączenia pinów dla wszystkich komponentów.

Wejścia

Zaczniemy od danych wejściowych. Joysticki są urządzeniami analogowymi - co oznacza, że prezentują zmienne napięcie jako wejście do Arduino. Każdy z trzech joysticków ma dwa wyjścia analogowe dla X i Y (góra, dół, lewo prawo), co daje w sumie 6 wejść do Arduino. Chociaż Arduino Uno ma dostępnych 6 wejść analogowych, musimy użyć dwóch z tych pinów do komunikacji I2C z ekranem i kontrolerem serwomechanizmu.

Z tego powodu włączyłem przetwornik analogowo-cyfrowy (ADC) MCP3008. Ten układ przyjmuje do 8 wejść analogowych i konwertuje je na sygnał cyfrowy przez piny komunikacyjne Arduino SPI w następujący sposób:

  • MCP Piny 1-6 > Zmienne wyjścia joysticków kciukowych
  • Piny 7 i 8 MCP > Brak połączenia
  • MCP Pin 9 (DGND) > Uziemienie
  • MCP Pin 10 (CS/SHDN) > Uno Pin 12
  • MCP Pin 11 (DIN) > Uno Pin 11
  • MCP Pin 12 (DOUT) > Uno Pin 10
  • MCP Pin 13 (CLK) > Uno Pin 9
  • MCP Pin 14 (AGND) > Uziemienie
  • Pin 15 i 16 MCP > +5V

Połączenia joysticka na schemacie są pokazane jako przykład. W zależności od tego, które joysticki kupisz i jak są zamontowane, twoje połączenia mogą różnić się od moich. Różne marki joysticków mogą mieć różne pinouty, a także mogą inaczej orientować X i Y. Ważne jest zrozumienie, co reprezentuje każde wejście w ADC. Każdy pin reprezentuje następujące relacje w moim kodzie:

  • Pin 1 - The Base - Dane analogowe na tym pinie będą obracać najniższym serwomechanizmem robota
  • Pin 2 - The Shoulder - Dane analogowe na tym pinie obrócą dwa serwa nad serwomechanizmem podstawowym
  • Pin 3 - The Elbow - Dane analogowe na tym pinie obrócą następny serwo w górę od serw naramiennych
  • Pin 4 - UP/DN Wrist - Dane analogowe na tym styku będą obracać serwomechanizm nadgarstka, podnosząc i opuszczając zespół chwytaka
  • Pin 5 - Chwytak - Dane analogowe na tym kołku otworzą i zamkną chwytak
  • Pin 6 - Obróć nadgarstek - dane analogowe na tym bolcu obrócą chwytak

UWAGA: Kupując i montując joysticki kciukowe wymienione na liście części, należy pamiętać, że orientacja modułów może różnić się od mojej, dlatego należy przetestować wyjścia x i y pod kątem prawidłowego połączenia z ADC. Ponadto, jeśli używasz mojego panelu sterowania wydrukowanego w 3D, otwory montażowe mogą być odsunięte od moich.

Wyjścia

Adafruit PWM/Servo Controller sprawia, że ten projekt jest bardzo prosty. Wystarczy podłączyć serwomechanizmy do nagłówków serwomechanizmu, a wszystkie połączenia zasilania i sygnału są obsługiwane. O ile nie znajdziesz serw z bardzo długimi przewodami, będziesz chciał uzyskać zestaw przedłużaczy kabli serwo o różnych długościach, aby wszystkie kable serwo dotarły do płyty kontrolera.

Serwa są połączone w następujący sposób:

  • Pozycja 0 - Serwo podstawowe
  • Pozycja 1 - Serwo barkowe (kabel Servo Y)
  • Pozycja 2 - Serwo łokciowe
  • Pozycja 3 - Serwo nadgarstka 1
  • Pozycja 4 - serwomechanizm chwytaka
  • Pozycja 5 - Serwomechanizm nadgarstka 2

Dodatkowo, VCC i V+ są podłączone do +5 V, a GND jest podłączone do uziemienia.

UWAGA 1: Jedna DUŻA uwaga tutaj: Napięcie zasilania dla całego projektu przechodzi przez blok zacisków zasilania na płycie sterowania serwomechanizmu. Pin V+ na kontrolerze serwo w rzeczywistości dostarcza energię z listwy zaciskowej do reszty obwodu. Jeśli potrzebujesz zaprogramować Uno, zdecydowanie polecam odłączenie pinu V+ przed podłączeniem Uno do komputera, ponieważ prąd pobierany z serw może uszkodzić twój port USB.

UWAGA 2: Do zasilania projektu używam zasilacza ściennego 6 V AC na DC. Polecam adapter, który może dostarczać co najmniej 4A prądu, aby gdy jeden lub więcej serw się związało, nagły skok prądu nie zgasi systemu i nie zresetuje Arduino.

Ekran LCD 16X2 jest podłączony do plecaka Adafruit LCD Backpack, aby wykorzystać interfejs I2C, który jest już używany przez Servo Controller. SCL na kontrolerze serwomechanizmu i CLK na plecaku łączą się z pinem A5 na Uno. Podobnie, SDA na kontrolerze serwomechanizmu i DAT na plecaku łączą się z pinem A4 na Uno. Dodatkowo 5 V jest podłączone do +5 V, a GND jest podłączone do uziemienia. LAT na plecaku nie jest z niczym połączony.

Wreszcie dioda LED RGB jest podłączona do pinów 7 (CZERWONY), 6 (zielony) i 5 (niebieski) w Uno. Noga uziemienia diody LED jest połączona z uziemieniem przez rezystor 330 omów.

Przetwarzanie

Wreszcie, pozostałe połączenia Arduino niewymienione powyżej są następujące: pin 5V jest podłączony do +5 woltów, a GND jest podłączony do masy.

W mojej konfiguracji użyłem bocznych szyn płytki stykowej, aby związać ze sobą wszystkie linie zasilania i uziemienia, a także piny I2C dla wszystkich urządzeń.

Krok 4: Kod

Kod
Kod

Jak wspomniano wcześniej, pierwotnie zbudowałem ten projekt jako demonstrację dla mojego lokalnego Maker Faire. Chciałem, żeby było to coś dla dzieci i dorosłych do zabawy na naszym stoisku. Jak się okazuje, był o wiele bardziej popularny, niż sobie wyobrażałem – tak bardzo, że dzieciaki się o to kłóciły. Tak więc, kiedy nadszedł czas na przepisanie, włączyłem „tryb demonstracyjny”, który wprowadza limit czasowy.

Ramię siedzi tam, czekając, aż ktoś przesunie joystick, a kiedy to zrobi, rozpoczyna się 60-sekundowy timer. Pod koniec 60 sekund przestaje pobierać dane wejściowe od użytkownika i „odpoczywa” przez 15 sekund. Krótkie okresy koncentracji uwagi są takie, jakie są, ten okres odpoczynku znacznie zmniejszył rywalizację o czas drążka.

Podstawowa operacja

Kod wymieniony w poniższej sekcji referencyjnej jest dość prosty. Tablica śledzi 6 połączeń z minimalnym, maksymalnym zasięgiem, pozycją wyjściową i bieżącą pozycją. Gdy ramię jest włączone, funkcja uruchamiania definiuje biblioteki wymagane do komunikacji z MCP3008, plecakiem LCD (a następnie ekranem) i definiuje piny LED. Stamtąd sprawdza podstawowe systemy i przechodzi do położenia ramienia. Funkcja domu zaczyna się od chwytaka i schodzi do podstawy, aby zminimalizować ryzyko wiązania w normalnych warunkach. Jeśli ramię jest całkowicie wysunięte, najlepiej ręcznie ustawić ramię przed jego włączeniem. Ponieważ standardowe serwa nie dostarczają informacji zwrotnej o swojej pozycji, musimy umieścić każdy z nich w predefiniowanym punkcie i śledzić, jak daleko się poruszają.

Pętla główna zaczyna się najpierw w trybie oczekiwania - szukania joysticków, aby oddaliły się od ich pozycji środkowej. Gdy tak się stanie, główna pętla zmienia stan na stan odliczania. Gdy użytkownik porusza każdym joystickiem, względne położenie joysticka od środka będzie dodawane lub odejmowane od aktualnej znanej pozycji i aktualizuje odpowiednie serwo. Gdy serwo osiągnie określony limit w jednym kierunku, joystick zatrzymuje się. Użytkownik będzie musiał przesunąć joystick w innym kierunku, aby ponownie go przesunąć. Jest to limit oprogramowania nałożony na serwonapędy niezależnie od ich zatrzymań sprzętowych. Ta funkcja pozwala w razie potrzeby utrzymać ruchy ramienia w określonym obszarze operacyjnym. Jeśli joystick zostanie zwolniony do środka, ruch zostanie zatrzymany.

Ten kod to tylko ogólny punkt wyjścia. Możesz dodawać własne tryby, jak chcesz. Jednym z przykładów może być tryb pracy ciągłej bez timera lub może dodać przyciski joysticka jako wejścia i zapisać tryb nagrywania/odtwarzania.

Krok 5: Linki i zasoby

Referencje ramienia

  • Post, który zainspirował ten projekt
  • Oryginalne wpisy na blogu projektantówMoje własne ramię robotaMoje mini chwytaki serwo i gotowe ramię robota Pomnóż ramię robota i elektronikę
  • Ramię Thingiverse
  • Thingiverse Mini Chwytak Servo

Biblioteki oprogramowania

  • Zasoby Adafruit PWM/Servo Controller
  • Biblioteka MCP3008
  • Arkusz danych MCP3008

Panel sterowania i kod

  • Rysunek Tinkercad Panelu, który wykonałem
  • Aktualne repozytorium kodu

Zalecana: