Table of Contents

Costel-Cosmin IONIȚĂ (66948) - Robotic Arm

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Acest proiect presupune crearea unui braț robotic format din două segmente care culisează și un cap (gripper) ce poate apuca diverse obiecte.

Cu ajutorul acestui braț robotic, utilizatorul poate muta diverse obiecte dintr-un loc în altul (eventual, obiecte dintr-un mediu toxic, care nu trebuiesc atinse de către utilizator).

Ideea proiectului are la bază conceptul de Internet Of Things. Am văzut numeroase aplicabilități ale acestor tipuri de proiecte, în special către zona de IoT (transfer de date în cloud, montare de diverși senzori care să măsoare anumiți parametrii, s.a.m.d), lucru care m-a determinat să încerc implementarea unui astfel de proiect.

Brațul robotic va fi controlat prin bluetooth, utilizand un terminal bluetooth (aplicatie de Android care trimite diverse comenzi modulului de bluetooth).

Descriere generală

Schema bloc a proiectului (într-o primă fază) este următoarea:

Hardware Design

Lista de piese necesare:

1. Piese placa de bază

2. 4 servomotoare identice (am ales TowerPro SG - 90 întrucât nu am vrut să proiectez ceva de putere mare)

3. Șasiu (plexiglass, traforaj sau metal)

4. Piese de prindere (șuruburi, piulițe, etc.)

5. Modul bluetooth HC - 05

Schema Electrica:

Software Design

În ceea ce privește partea de software, lucrurile au mers destul de bine în final, însă această parte a luat cel mai mult timp.

Practic, servomotoarele se controlează prin PWM. Semnalul de PWM trebuie să aibă o frecvență fixă de 50 Hz sau 20 ms. Mișcarea motoarelor se realizează prin variația factorului de umplere (duty cycle) între 1 ms și 2 ms, deci între 5% și 10%. Este un interval foarte scurt, însă poate fi mapat cu ușurință pe un range de valori întregi, în funcție de prescaler.

Procesorul ATMega 324 are 3 timere, timer0 și timer2 pe 8 biți și timerul 1 pe 16 biți, fiecare cu câte două canale. Deci practic se poate pot configura 6 pini de ieșire pentru semnal de PWM.

Timerul 1 poate număra până la 65535 și în funcție de prescaler putem obține o frecvență de 50 Hz dacă îl trecem în modul FastPWM. Modul FastPWM pune pinul asociat canalului pe 1 la începutul perioadei și îl trece pe 0 când face compararea cu OCR1A. Variind astfel OCR1A-ul, putem modifica duty cycle-ul foarte ușor.

Concret, cu un prescaler de 64, perioada de 50 Hz se atinge când timer-ul ajunge la valoarea 4999 iar OCR1A-ul poate fi variat între 180 și 550 pentru a obține rotația motorului la 180 de grade.

Astfel, cu cele două canale ale timer-ului 1 pot controla două motoare. Ca atare, celelalte două motoare trebuie să le pot controla utilizând un timer pe 8 biți (timer 0 sau timer 1).

Soluția pe care am abordat-o (și care funcționează foarte bine) este următoarea: trec timer-ul 0 în modul CTC (Clear Timer on Compare) și pun OCR0A-ul pe 1. Asta înseamnă că timerul va genera o întrerupere la fiecare ciclu de ceas. Astfel, eu pot număra cu un counter câte înteruperi au fost generate și deci pot pune un pin pe 1 / 0 atunci când văd că acel counter a atins o anumită valoare (4999 în cazul de mai sus).

Astfel, cu o singură rutină de întrerupere pot controla două servomotoare (deci cu un singur timer de 8 biți). Cred că le pot controla pe toate 4 cu aceeași rutină de întrerupere, chiar. Nu am încercat acest lucru dar cred că este posibil.

În ceea ce privește comunicația cu modulul de bluetooth (HC-05), lucrurile au fost foarte simple: pur și simplu am conectat modulul la plăcuță (am pus doar pinul de TX de pe modul la pinul de RX de pe plăcuță, pentru că nu am avut nevoie să trimit date către modul, de la plăcuță).

Atunci când se conectează modulul și se apasă pe acel buton mic de pe el, modulul intră în modul de date, cu o configurație prestabilită (precizată în datasheet). Am configurat USART-ul de pe plăcuță cu aceleași configurații și cam asta a fost. Totul a mers perfect.

În modul curent de execuție, trimit un singur caracter de pe telefon către plăcuță iar în funcție de ce caracter trimit, iau o anumită decizie (schimb duty cycle-ul unui anumit motor).

Rezultate Obţinute

În final, eu sunt foarte mulțumit de produsul final, întrucât este exact ceea ce am planificat inițial: un braț robotic ce poate apuca diverse obiecte (de dimensiuni mici), ce poate fi controlat de la distanță (prin bluetooth, în acest caz).

Concluzii

Overall, proiectul a fost cu adevărat o provocare întrucât multe lucruri nu știam cum să le fac să meargă (de exemplu timerele - a trebuit să petrec ceva timp până când am reușit să configurez frecvențele așa cum trebuie).

De asemenea, construcția șasiului a luat extrem de mult timp (undeva la două zile full time), pentru că scopul inițial a fost să găsesc două brațe rezistente și ușoare în același timp (așa am ajuns la concluzia că ar fi adecvat să folosesc o parte dintr-o galerie veche din plastic). Am avut noroc oarecum pentru că acest material pe care l-am găsit poate fi modelat ușor atunci când este încălzit. De asemenea, este foarte rezistent (nu se îndoaie).

Construcția în sine a șasiului a necesitat unelte precum bormașină, pânză de bomfaier, șurubelnițe, bandă dublu adezivă (este foarte important să fie o bandă de calitate, altfel componentele nu se lipesc).

Mici “probleme” pe care le-am întâmpinat:

1. Capul de prindere trebuie proiectat cu mare atenție, altfel nu poate prinde bine obiectele.

2. Trebuie calculat load-ul șasiului, pentru a ști ce tip de motoare trebuie cumpărate (eu nu am făcut asta, de exemplu). De regulă, servomotoarele cu un cuplu mai mare de 2 kgf / cm sunt destul de scumpe. De exemplu unul din motoarele de la baza brațului nu poate ridica propria masă dacă se află la un anumit unghi. De aceea am limitat range-ul de mișcare al acelui motor.

Download

Aici am atasat arhiva care contine codul si fisierul Makefile.

roboticarm.zip

Jurnal

14 - 18 Mai - Am studiat diverse șasiuri pe youtube și stabilit un șasiu realizabil

19 Mai (20:00 - 24:00) - Am început să mă joc cu timerele de pe procesor (pentru a vedea cum funcționează)

20 Mai (09:00 - 16:00) - Calculat frecvențe, stabilit duty cycle-uri

21 Mai (01:00 - 03:00) - Am mișcat primul motor utilizând timerul 1

21 Mai (10:00 - 19:30) - Am proiectat și implementat părțile șasiului

22 Mai (16:00 - 22:00) - Am mișcat primul motor utilizând timerul 0 (cel pe 8 biți)

23 Mai (10:00 - 22:00) - Am terminat de implementat șasiul și am realizat comunicația cu modulul bluetooth

23 Mai (23:00 - 02:00) - Styling & Fine tuning.

Bibliografie/Resurse

1. Datasheet HC-05: http://cdn.makezine.com/uploads/2014/03/hc_hc-05-user-instructions-bluetooth.pdf

2. Datasheet ATMega324: http://cs.curs.pub.ro/wiki/pm/_media/doc8272.pdf

3. Articol interesant: https://www.pololu.com/docs/0J57/8.a

4. Videoclip din care m-am inspirat pentru crearea șasiului: https://www.youtube.com/watch?v=D_x6r8lFoCE