Cuprins:

Braț robotizat controlat Arduino cu 6 grade de libertate: 5 pași (cu imagini)
Braț robotizat controlat Arduino cu 6 grade de libertate: 5 pași (cu imagini)

Video: Braț robotizat controlat Arduino cu 6 grade de libertate: 5 pași (cu imagini)

Video: Braț robotizat controlat Arduino cu 6 grade de libertate: 5 pași (cu imagini)
Video: Dual control of a robotic arm – GUI & a Xbox controller 2024, Iulie
Anonim
Braț robotizat controlat Arduino cu 6 grade de libertate
Braț robotizat controlat Arduino cu 6 grade de libertate
Braț robotizat controlat Arduino cu 6 grade de libertate
Braț robotizat controlat Arduino cu 6 grade de libertate
Braț robotizat controlat Arduino cu 6 grade de libertate
Braț robotizat controlat Arduino cu 6 grade de libertate

Sunt membru al unui grup de robotică și în fiecare an grupul nostru participă la un Mini-Maker Faire anual. Începând din 2014, am decis să construiesc un nou proiect pentru evenimentul de fiecare an. La acea vreme, aveam aproximativ o lună înainte de eveniment pentru a pune laolaltă ceva și habar n-aveam ce vreau să fac.

Un coleg membru a postat un link către „o construcție interesantă de brațe robotizate open source” care a atins interesul meu. Planurile erau doar un braț fără comenzi sau un controler. Având în vedere constrângerile mele de timp, mi s-a părut un punct de plecare foarte bun. Singura problemă a fost că nu aveam cu adevărat instrumente pentru a începe.

Cu ajutorul unora dintre membrii grupului, am reușit să fac părțile acrilice tăiate și trimise la mine, precum și cele două părți imprimate 3D prezentate mai jos. Combinat cu câteva comenzi hardware peste noapte și câteva excursii la magazinul local de hardware, am finalizat un proiect de lucru cu o seară înainte de eveniment!

Așa cum se întâmplă de obicei, există mai multe în poveste și mai multe încarnări în construcție care a fost condensată la ceea ce vedeți mai jos. Dacă sunteți interesat de povestea din spate, puteți găsi mai multe aici:

Pasul 1: De ce aveți nevoie - Hardware și electronice

De ce aveți nevoie - Hardware și electronice
De ce aveți nevoie - Hardware și electronice
De ce aveți nevoie - Hardware și electronice
De ce aveți nevoie - Hardware și electronice

Proiectantul original a trăit în Europa și ulterior a folosit măsurători metrice și materiale obișnuite acolo. De exemplu, placa de presare pe care a folosit-o pentru caroserie avea o grosime standard de 5 mm. Material similar în SUA are 1/8 , care are o grosime de aproximativ 3,7 mm. Acest lucru a lăsat un spațiu în deschiderile care au fost inițial concepute pentru a fi montate prin presare. În loc să corectez desenele, am folosit pur și simplu Gorilla Glue pentru a fixa aceste îmbinări.

De asemenea, a folosit piulițe și șuruburi filetate M3 care nu sunt standard la magazinul dvs. local de hardware din SUA. În loc să le convertesc în opțiuni disponibile la nivel local, pur și simplu am comandat hardware-ul online așa cum se arată în lista mea de piese de mai jos.

  • 22 - Distanțe M3 x 0,5 x 23mm
  • 15 - Distanțieri M3 x 15mm
  • 40 - Șuruburi M3
  • M3 Hex Nuts
  • Șuruburi M3 25mm
  • 1 - Primăvara
  • Bandă de montare cu față dublă de 3/4"
  • 5 - SG 5010 TowerPro Servo
  • 1 - mini servo SG92R TowerPro
  • 1 - mini servo SG90 TowerPro
  • Antet cu pin dreptunghiular de 2,54 mm
  • 1 - Placă de pâine de jumătate
  • 1 - fire jumper „extensie” feminin / masculin - 40 x 6"
  • 1 - 12 "x 24" Foaie acrilică albastră sau piesele tăiate cu laser de la furnizorul dvs. de servicii preferat
  • 2 - 3mm x 20mm + 4mm x 5mm distanțiere pentru rulmenți articulați imprimați 3D (vezi mai jos)
  • 1 - Panou de control * Vezi Notă în secțiunea de cablare
  • 1 - LED RGB difuz (tricolor) de 10 mm
  • 1 - Arduino Uno
  • 1 - LCD standard 16x2 + extras - alb pe albastru
  • 1 - rucsac LCD cu caracter i2c / SPI
  • 1 - Adafruit 16-Channel 12-bit PWM / Servo Driver
  • 1 - MCP3008 - ADC pe 8 canale pe 10 biți cu interfață SPI
  • 3 - Senzorul modulului JoyStick Breakout * Vezi Nota În secțiunea de cablare
  • DC Barrel Jack
  • Adaptor CA la CC
  • Cabluri de extensie servo - lungimi asortate

Aproape toate piesele acestui braț au fost tăiate din acrilic de 1/8 inch. Cu toate acestea, cele două distanțieri ale rulmenților articulați trebuie imprimate. De asemenea, proiectul original a cerut ca cele două baze ale distanțierului articulației să fie înalte de 7 mm față de arborele lagărului. Când am început asamblarea brațului superior, a devenit rapid clar că acestea erau prea înalte datorită înălțimii servoselor TowerPro. A trebuit să am rulmenți noi cu o bază de numai 3 mm înălțime, care, apropo, era încă prea înaltă, dar ușor de manevrat. Veți dori să luați notă de înălțimea relativă a servourilor dvs. și să țineți cont de distanța dintre cele două brațe inferioare:

Înălțimea servo + claxonul servo + rulmentul articulațiilor + banda dublă = 47mm +/- 3mm.

Pasul 2: Asamblarea brațului

Ansamblu braț
Ansamblu braț
Ansamblu braț
Ansamblu braț
Ansamblu braț
Ansamblu braț
Ansamblu braț
Ansamblu braț

Înainte de a începe, asigurați-vă că ați centrat toate serviciile! Dacă în orice moment din timpul construcției, dacă mutați manual poziția servo, va trebui să o actualizați înainte de a o fixa pe cadru. Acest lucru este deosebit de important cu servomotoarele care trebuie întotdeauna să se deplaseze la unison.

  1. Atașați servo-ul de bază la placa de bază superioară folosind șuruburile M3 de 25 mm și piulițele hexagonale. Nu strângeți excesiv! NOTĂ: Poate doriți să aplicați etanșarea firelor pentru a minimiza slăbirea piulițelor în timpul utilizării.

  2. Dacă utilizați lista de piese pe care o am mai sus, veți dori mai apoi să asamblați cele 5 distanțieri de bază prin filetarea a câte 2 dintre distanțierele M3 x 0,5 x 23mm și apoi atașarea acestora la placa de bază superioară cu piulițe hexagonale.
  3. Atașați placa de bază inferioară la standuri cu 5 șuruburi M3.
  4. Atașați placa de umăr la cele două plăci de montare servo folosind un adeziv acrilic sigur. Am folosit Gorilla Glue aici. NOTĂ: Fiecare dintre cele două servo-plăci au o gaură în spate care permite introducerea unui distanțier de armare care le conectează. Asigurați-vă că găurile se aliniază! * În timp ce aveți adezivul la îndemână, mergeți mai departe și uniți placa de montare a încheieturii mâinii cu placa principală de prindere. * Opțional, puteți lipi și placa servo a încheieturii mâinii pe cele două plăci de îmbinare a încheieturii mâinii. În schimb, nu am făcut această alegere pentru a le înșuruba împreună cu distanțele descrise mai jos.
  5. Atașați ansamblul umărului acum vindecat la servomotorul de bază. Am folosit cel mai larg claxon inclus cu servo, care era claxonul de montare cu șase tije.
  6. Adăugarea cadrului brațului inferior la servomotoarele poate fi dificilă. Vă sugerez să fixați coarnele pe ramele inferioare ale brațului înainte de a continua. NOTĂ: Asigurați-vă că ați centrat servomotoarele pentru ansamblul umărului ÎNAINTE să le atașați la cadru. Aceste două servo-uri trebuie să se deplaseze la unison și, dacă sunt aliniate greșit, vor provoca cel puțin un jitter servo și, dacă sunt suficient aliniate, ar putea deteriora cadrul sau servo-urile. * Fiecare dintre servomotoarele sunt montate cu suporturile lor pe partea din spate a plăcilor de montare în loc să treacă servomotoarele prin plăci - acest lucru vă va permite să împingeți claxonul pe arborele servo într-un unghi și să fixați șurubul. Nu fixați încă servo pe placa de montare. * Apoi, adăugați servo interior și montați brațul

  7. Asamblați cadrul și brațele superioare ale brațului împingând servourile prin spațiile din brațe și apoi introducând distanțierele între ambele plăci superioare ale brațului și fixați-le cu șuruburi M3.
  8. Adăugați bandă adezivă pe două fețe în partea din spate a distanțierului articulației cotului și tăiați excesul.
  9. Atașați distanțierul la partea inferioară a servo-ului care va acționa ca actuator de cot.
  10. Glisați ansamblul brațului superior în cadrul ansamblului brațului inferior și fixați șuruburile servo-claxon.
  11. Adăugați distanțe de armare între două plăci inferioare ale brațului. Am folosit două în loc de toate patru pentru a reduce greutatea.
  12. Adăugați bandă adezivă dublă pe partea din spate a distanțierului superior al articulației încheieturii mâinii și tăiați excesul.
  13. Atașați distanțierul la partea inferioară a servo-ului care va acționa ca actuator pentru încheietura mâinii.
  14. Atașați placa exterioară a încheieturii mâinii la claxonul servo al încheieturii mâinii și fixați-o cu un șurub de corn.
  15. Asamblați placa servo a încheieturii mâinii cu cele două plăci de îmbinare a încheieturii mâinii și distanțele.
  16. Fixați servo de încheietura mâinii pe placa servo cu placa servo servo.
  17. Va trebui să fixați claxonul încheieturii mâinii la servo înainte de a atașa ansamblul de prindere la claxonul respectiv datorită deschiderii pentru șurubul claxonului blocat.
  18. Asamblați ușor piesele de prindere pentru a le potrivi înainte de a atașa claxonul servo de prindere la servo. Acest lucru vă va permite spațiu pentru a înșuruba claxonul în pasul anterior.
  19. Atașați claxonul de prindere la servo și strângeți în continuare șuruburile care țin articulațiile de prindere. NOTĂ: nu strângeți complet aceste piulițe și șuruburi, deoarece acestea trebuie să fie slăbite pentru a permite deplasarea mânerului.

Pasul 3: Cablare și panou de control

Cablare și panou de control
Cablare și panou de control
Cablare și panou de control
Cablare și panou de control
Cablare și panou de control
Cablare și panou de control

Am construit acest proiect ca o platformă de dezvoltare pentru unele idei pe care le am pentru un proiect educațional ulterior. Deci, majoritatea conexiunilor mele sunt conectori dupont simpli. Singura lipire pe care am făcut-o a fost pentru MCP3008. Dacă puteți găsi o placă de separare pentru această componentă, atunci ar trebui să puteți construi acest braț fără lipire.

Există 3 grupe de componente:

  1. Intrări - Aceste elemente preiau informații de la utilizator și sunt compuse din joystick-uri și mcp3008 ADC.
  2. Ieșiri - Aceste elemente transmit date lumii fie arătând starea utilizatorului, fie actualizând servomotoarele cu date de poziție. Aceste elemente sunt ecranul LCD, rucsacul LCD, LED-ul RGB, placa driverului Servo și, în cele din urmă, servo-urile.
  3. Prelucrare - Arduino încheie ultimul grup care preia datele de la intrări și împinge datele către ieșiri conform instrucțiunilor de cod.

Schema Fritzing de mai sus detaliază conexiunile pin pentru toate componentele.

Intrări

Vom începe cu intrările. Joystick-urile sunt dispozitive analogice - ceea ce înseamnă că prezintă o tensiune variabilă ca intrare la Arduino. Fiecare dintre cele trei joystick-uri au două ieșiri analogice pentru X și Y (sus, jos, stânga dreapta) realizând un total de 6 intrări în Arduino. În timp ce Arduino Uno are 6 intrări analogice disponibile, trebuie să folosim doi dintre acești pini pentru comunicarea I2C către ecran și servo controler.

Din această cauză, am încorporat convertorul analog-digital MCP3008 (ADC). Acest cip preia până la 8 intrări analogice și le convertește într-un semnal digital peste pinii de comunicație SPI ai Arduino după cum urmează:

  • Pinii MCP 1-6> Ieșiri variabile ale joystick-urilor
  • Pinii MCP 7 și 8> Fără conexiune
  • MCP Pin 9 (DGND)> Masă
  • 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)> Masă
  • MCP Pin 15 & 16> + 5V

Conexiunile joystick-ului din schemă sunt prezentate doar ca exemplu. În funcție de care joystick-uri cumpără și de modul în care sunt montate, conexiunile dvs. pot diferi de ale mele. Diferite mărci ale joystick-ului pot avea un pinout diferit și, de asemenea, pot orienta X și Y diferit. Ceea ce este important este să înțelegem ce reprezintă fiecare intrare pe ADC. Fiecare pin reprezintă următoarele relații din codul meu:

  • Pinul 1 - baza - datele analogice de pe acest pin vor roti cel mai mic servo de pe robot
  • Pinul 2 - Umărul - Datele analogice de pe acest pin vor roti cele două servome deasupra servo-ului de bază
  • Pinul 3 - cotul - datele analogice de pe acest pin vor roti următorul servo în sus de la servomotoarele
  • Pinul 4 - UP / DN încheietura mâinii - Datele analogice de pe acest pin vor roti servo-ul încheieturii, ridicând și coborând ansamblul gripper
  • Pinul 5 - Gripper - Datele analogice de pe acest pin vor deschide și închide gripperul
  • Pinul 6 - Rotire încheietura mâinii - Datele analogice de pe acest pin vor roti mânerul

NOTĂ: Când cumpărați și montați joystick-urile degetului mare la care se face referire în lista de piese, rețineți că orientarea modulelor poate diferi de a mea, astfel încât să testați ieșirile x și y pentru o conexiune corectă la ADC. De asemenea, dacă utilizați panoul meu de control imprimat 3D, orificiile de montare pot fi compensate de ale mele.

Ieșiri

Adafruit PWM / Servo Controller face acest proiect foarte simplu. Doar conectați Servo-urile la antetele servo și toate conexiunile de alimentare și semnal sunt gestionate. Cu excepția cazului în care găsiți servo cu cabluri foarte lungi, veți dori să obțineți un set de extensii de cabluri servo în diferite lungimi, astfel încât toate cablurile servo să ajungă la placa controlerului.

Servo-urile sunt conectate după cum urmează:

  • Poziția 0 - Servo de bază
  • Poziția 1 - servo umăr (cablu Y servo)
  • Poziția 2 - Serv cot
  • Poziția 3 - Servo încheietura mâinii 1
  • Poziția 4 - Servo Gripper
  • Poziția 5 - Servo încheietura mâinii 2

În plus, VCC și V + sunt conectate la +5 volți, iar GND este conectat la masă.

NOTĂ 1: O mare notă aici: Tensiunea de alimentare pentru întregul proiect intră prin blocul de terminale de alimentare de pe placa de comandă servo. Pinul V + de pe Servo Controller furnizează de fapt energie din blocul de borne către restul circuitului. Dacă trebuie să vă programați Uno, vă recomandăm să deconectați pinul V + înainte de a conecta Uno la computer, deoarece extragerea curentă de pe servere ar putea deteriora portul USB.

NOTĂ 2: Folosesc un adaptor de perete de 6V AC la DC pentru alimentarea proiectului. Recomand un adaptor care poate furniza cel puțin 4A de curent, astfel încât, atunci când unul sau mai multe dintre servo-uri se leagă, creșterea bruscă a curentului să nu-ți întunece sistemul și să-ți reseteze Arduino.

Ecranul LCD 16X2 este conectat la Rucsacul LCD Adafruit pentru a profita de interfața I2C care este deja utilizată de Servo Controller. SCL de pe servo-controler și CLK de pe rucsac se conectează la pinul A5 de pe Uno. La fel, SDA de pe Servo Controller și DAT de pe rucsac se conectează la pinul A4 de pe Uno. În plus, 5V este conectat la +5 volți, iar GND este conectat la masă. LAT pe Rucsac nu este conectat la nimic.

În cele din urmă, LED-ul RGB este conectat la pinii 7 (ROȘU), 6 (Verde) și 5 (Albastru) de pe Uno. Piciorul de masă al LED-ului este conectat la masă printr-un rezistor de 330Ohm.

Prelucrare

Nu în ultimul rând, restul conexiunilor Arduino nemenționate mai sus sunt după cum urmează: Pinul 5V este conectat la +5 volți și GND este conectat la masă.

În configurarea mea, am folosit șinele laterale ale panoului pentru a lega toate liniile de alimentare și de masă, precum și pinii I2C pentru toate dispozitivele.

Pasul 4: Cod

Cod
Cod

După cum sa menționat anterior, inițial construiesc acest proiect ca o demonstrație pentru Maker Faire. Am intenționat să fie ceva pentru care copiii și adulții se pot juca în standul nostru. După cum se dovedește, a fost mult mai popular decât mi-am imaginat - atât de mult, încât copiii se luptau pentru asta. Deci, când a sosit timpul pentru o re-scriere, am încorporat un „Mod Demo” care implementează o limită de timp.

Brațul stă acolo și așteaptă ca cineva să miște un joystick și atunci când o face, începe un cronometru de 60 de secunde. La sfârșitul celor 60 de secunde, acesta încetează să mai primească date de la utilizator și „Se oprește” timp de 15 secunde. Perioada scurtă de atenție fiind ceea ce sunt, această perioadă de odihnă a redus foarte mult disputa pentru timpul de lipire.

Operatie de baza

Codul listat în secțiunea de referință de mai jos este destul de simplu. O matrice ține evidența celor 6 articulații cu extensii min, max, o poziție de origine și poziția curentă. Când brațul este pornit, funcția de pornire definește bibliotecile necesare pentru a vorbi cu MCP3008, rucsacul LCD (și ulterior ecranul) și definește pinii LED. De acolo face o verificare de bază a sistemelor și trece la braț. Funcția de pornire începe cu dispozitivul de prindere și merge până la bază, astfel încât să reducă la minimum șansele de legare în condiții normale. Dacă brațul este complet extins, atunci ar putea fi cel mai bine să acționați manual brațul înainte de al alimenta. Deoarece serviciile generice nu oferă feedback despre poziția sa, trebuie să le plasăm pe fiecare într-un punct predefinit și să urmărim cât de departe au fost mutate.

Bucla principală începe mai întâi într-un mod de așteptare - căutând joystick-urile pentru a se îndepărta de poziția lor centrală. Odată ce acest lucru se întâmplă, bucla principală schimbă stările în starea de numărătoare inversă. Pe măsură ce utilizatorul deplasează fiecare joystick, poziția relativă a joystick-ului din centru se va adăuga sau va scădea din poziția curentă cunoscută și va actualiza servo-ul corespunzător. Odată ce un servo a atins limita definită într-o direcție, joystick-ul se oprește. Utilizatorul va trebui să deplaseze joystick-ul în cealaltă direcție pentru al deplasa din nou. Aceasta este o limită de software impusă pentru servere, indiferent de opririle lor hardware. Această caracteristică vă permite să păstrați mișcările brațului într-o zonă operațională specificată, dacă este necesar. Dacă joystick-ul este eliberat spre centru, mișcarea se va opri.

Acest cod este doar un punct de plecare general. Puteți adăuga propriile moduri după cum doriți. Un exemplu poate fi un mod de funcționare continuă fără temporizator sau poate adăuga butoanele joystick ca intrări și scrie un mod de înregistrare / redare.

Pasul 5: Linkuri și resurse

Referințe pentru brațe

  • Postare care a inspirat acest proiect
  • Postări pe blogul proiectanților originali Propriul meu braț robot Mini mini servere de prindere și brațul robot completat Înmulțiți brațul robot și electronica
  • Brațul Thingiverse
  • Thingiverse Mini Servo Gripper

Software Libries

  • Resurse Adafruit PWM / Servo Controller
  • Biblioteca MCP3008
  • MCP3008 Foaie de date

Panou de control și cod

  • Desenul Tinkercad al Panoului pe care l-am făcut
  • Depozitul de coduri curent

Recomandat: