Sunteți pe pagina 1din 28

CUPRINS

Capitolul 1. Introducere 2
Capitolul 2. Proiectarea 3
2.1 Sistemul mecanic de susţinere şi al articulaţiilor 5
2.1.1 Software pentru proiectarea sistemului mecanic a 5
brațului robotic
2.2 Schita proiectului 5
2.2.1 Baza fixă a robotului 8
2.2.2 Baza mobilă sau axa 1 de rotatie 9
2.2.3 Segmentul 1 – Axa 2 de rotatie 9
2.2.4 Segmentul 2 – Axa 3 10
2.2.5 Segmentul 3 – Axa 4 11
2.2.6 Efectorul final al brațului robotic 12
2.3 Sistemul de transmisie 13
2.4 Sistemul senzorilor şi al traductoarelor 14
2.5 Sistemul decizional 14
2.6 Scheme electrice 15
Capitolul 3. Programarea 18
Capitolul 4. Funcționarea 27
Capitolul 5. Concluzii 27

1 din 28
Capitolul 1. Introducere
Un robot este un mecanism automat care se poate substitui omului pentru a efectua unele
operatii, fiind capabil să-şi modifice singur ciclul de execuţie (prin detecţie fotoelectrica,
servomotoare, etc).
Un robot este un sistem automat alcătuit din cinci subsisteme de bază:
- sistemul mecanic;
- sistemul de acţionare;
- sistemul de transmisie;
- sistemul senzorilor şi al traductoarelor;
- sistemul de conducere.
Sistemul mecanic stabilește înfățișarea robotului și mișcările posibile pe timp de
funcționare. Sistemul de transmisie are trei funcţii principale:
– produce mişcările robotului;
– transformă mişcările de rotaţie în mişcări de translaţie şi invers;
– reduce mişcările şi amplifică cuplurile.
Sistemul senzorilor și al traductoarelor îi permite “să vadă” mediul care-l înconjoară.
Sistemul de conducere prelucrează informaţia senzorială şi generează comenzi în
conformitate cu sarcina particulară care trebuie îndeplinită.
Conform specialiştilor japonezi robotul este dispozitiv versatil şi flexibil care posedă
funcţii de deplasare similare celor ale membrelor umane sau ale caror funcţii de deplasare sunt
comandate de senzori şi de mijloacele proprii de recunoaştere.
Institutul Francez de Standardizare defineşte robotul ca fiind un manipulator automat
reprogramabil și polivalent, capabil să realizeze poziţionarea şi reorientarea pieselor printr-o
mişcare variabilă și programabilă a braţelor terminale, prin intermediul unor dispozitive;
Institutul American de Robotică consideră robotul ca fiind un operator reprogramabil și
multifuncţional pentru deplasarea obiectelor pe traiectorii stabilite anterior în realizarea unor
sarcini concrete;
În literatura românească de specialitate robotul este definit ca fiind un echipament
automat, adaptabil prin reprogramare la condiţiile de mediu în care acţionează.

In capitolul urmator, de proiectare se va tine cont de principalele aspect ale arhitecturii


unui robot.
2 din 28
Capitolul 2. Proiectarea
Scopul echipei a fost realizarea unui brat robotic cu performante in precizie si
repetabilitate cat mai ridicate la un cost de productie cat mai mic, folosind componente usor de
achizitionat, motoare, senzori suruburi etc si parti fizice realizate la imprimanta 3D cu un
consum redus de filament. Proiectarea bratului robotic a fost făcută cu respectarea principiilor
enunțate anterior.
Precizia (Acurateţea) este abilitatea robotului de a se poziţiona într-o anumită poziţie.
Este imposibil de a poziţiona robotul exact, acurateţea este deci definită ca fiind abilitatea
robotului de putea fi poziţionat cu o eroare minimă.
Repetabilitatea reprezintă abilitatea robotului de a-şi repeta poziţionarea atunc când i se
impun mişcări repetitive.

Echipa noastra a decis ca brațul robotic manipulator sa fie versiunea îmbunătățită a


prototipului realizat în anul III la disciplina “Robotica” * pentru a profita și a-și perfecționa
cunoștințele dobândite în urma realizării primei variante a robotului. De asemenea echipa a decis
transformarea brațului robotic dintr-un robot din generația 1 care nu avea informaţii despre
mediul exterior iar flexibilitatea programării varia în limite foarte largi într-un robot de generația
2 capabili să lucreze în condiţii de mediu parţial cunoscute. Robotul va avea sistem de acţionare
electromecanic cu servomecanisme folosind metoda comparării poziţiei atinse cu cea
programată (prescrisă) şi executarea mişcării până când diferenţa dintre cele două poziţii este
minimă.
3 din 28
Robotul va avea 5 grade de libertate, si este echipată cu un dispozitiv end-effector pentru
a îndeplini sarcinile prescrise.

* Imagini cu brațul robotic manipulator realizat în anul III Sem 2 – Disciplina Robotica

4 din 28
2.1 Sistemul mecanic de susţinere şi al articulaţiilor
2.1.1 Software pentru proiectarea sistemului mecanic a brațului robotic
Sistemul mecanic de susţinere şi al articulaţiilor (cuplelor de rotaţie şi de translaţie) a fost
proiectat pornind de la formatul propus de catre proiectul open source “ How to Mecatronics “.
Proiectarea si desenarea sistemului mechanic a fost facuta cu ajutorul pachetului CAD –
Autodesk Fusion 360 folosind o licenta gratuita de student și introdus în imprimanta 3D Creality
ENDER 3 Pro cu ajutorul programului ULTIMAKER Cura.
Autodesk Fusion 360 permite lucrul în echipă, ceilalți participanți la proiect fiind înscriși
în același grup de lucru puteau vizualiza în timp real modificările și actualizările. În acest scop
am creat un proiect nou pe care l-am denumit “ proiect scr”.

Partea de proiectare și desenare 3D a revenit studentului Nicolescu Cristian ceilalti


membri ai echipei au supervizat, aprobat sau sugerat modificări.
Licența gratuită de Student poate fi obținută de pe site-ul oficial al software-ului Fusion
360 prin completarea formularului și trimiterea unei fotografii scanate cu carnetul de student.

2.2 Schita proiectului


Echipa de lucru a decis ca brațul robotic să aibă un numar total de 6 motoare necesare
pentru mișcarea celor 5 grade de libertate precum și a “gripper-ului” .
Pentru alegerea motoarelor s-a folosit aplicatia disponibilaă pe site-urile:
https://www.robotshop.com/community/tutorials/show/robot-arm-torque-calculator

5 din 28
https://www.orientalmotor.com/motor-sizing/index.html?hsCtaTracking=f24cd0b7-792e-4246-
a809-1f6331235405%7C1a2e428f-08bc-423f-9cb5-36f09902df29

În urma unor simulări, calcule și încercări eșuate de folosire a diferitelor tipuri de


motoare (servomotoare, pas cu pas) s-a luat decizia de a folosi 2 tipuri de servomotoare:
- Servomotor MG995;
- Servomotor SG90.

Având în vedere greutatea motoarelor de 55g, respectiv 13.4g s-a decis ca ele să fie
folosite gradual, pe axele inferioare motoarele MG995 iar pe cele superioare cât și pe gripper
motoare SG90.

6 din 28
Servomotor MG995

SPECIFICATII TEHNICE:
Greutate: 55 g
Tensiune de operare: 4.8 - 7.2 V DC
Forta in blocare: 8.5 kgf·cm (4.8 V ), 10 kgf·cm (6 V)
Viteza de operare: 0.2 s/60º (4.8 V), 0.16 s/60º (6 V)
Unghi de rotatie: 120 grade
Roti dintate din metal (aliaj cupru)
Temperatura de functionare: 0 ºC – 55 ºC

Servomotor SG90
Greutate: 13.4g
Tensiune de operare: 4.8V - 6V
Viteza de operare: 0.1 s / 60 grade (la 4.8 V), 0.08 s / 60 grade (la 6V)
Dimensiuni: 22.5 x 12 x 35.5 mm aprox.

Servomotoarele sunt alcătuite dintr-un motor de curent continuu, un potențiometru


acționat de axul motorului ce măsoară unghiul la care acesta se rotește, un circuit ce compară
semnalul provenit de la potențiometru cu comanda primită de la utilizator și un mecanism cu roți
dințate ce reduce turația motorului, dar crește cuplul acestuia.
7 din 28
Dacă servomotorul este comandat să se poziționeze la un anumit unghi, dar din cauza
inerției se va roti puțin mai mult decât s-a dorit, circuitul de comandă din interiorul
servomotorului va sesiza această problemă prin intermediul potențiometrului ce măsoară poziția
acestuia și va corecta rapid eroarea. De asemenea, dacă vom încerca să schimbăm forțat
(mecanic) poziția la care servomotorul a fost setat, acesta va opune rezistență. Aceste calități fac
servomotoarele ideale pentru aplicații în care este nevoie de control precis, precum brațe
robotice.
2.2.1 Baza fixă a robotului

Baza fixa a roborului trebuie sa ofere sustinere pentru motorul care v-a roti baza mobile a
sa, impreuna cu celelalte elemente constructive ale bratului robotic.

8 din 28
2.2.2 Baza mobilă sau axa 1 de rotatie

Baza mobilă are același diametru exterior cu cel al bazei fixe și este fixată cu 2 suruburi
de elementul mobil (ax) al motorului montat în baza fixă.

În partea superioară a bazei mobile este montat următorul servomotor care va roti
segmentul 1 al robotului conform schemei din figura 3.

2.2.3 Segmentul 1 – Axa 2 de rotatie

Segmentul 1 al bratului robotic este segment de legătură între baza mobilă și segmentul 2,
nu are atasat direct niciun servomotor, acesta fiind atasat motoarelor de pe baza mobilă respectiv
9 din 28
segmentul 2. La proiectarea acestuia s-a avut in vedere realizarea unui traseu interior prin care
urmeaza a fi pozate cablurile de legatura catre motoarele din partea superioara (axa 3, 4 si
gripper).

2.2.4 Segmentul 2 – Axa 3

10 din 28
In figura 4.1 putem observa schița brațului cu motorul afferent axei 3 model MG995.
Deasemenea în partea stangă a schiței în interiorul segmentului urmeaza a fi montat un
servomotor SG90 care va actiona axa 4.

2.2.5 Segmentul 3 – Axa 4

Segmentul 3 al brațului robotic este cel mai redus în dimensiuni și greutate acesta oferind
un grad de libertate care ajută la poziționarea cât mai precisă a efectorului final cu ajutorul unui
servomotor din gama SG90.

11 din 28
2.2.6 Efectorul final al brațului robotic

Efectorul final (gripperul) reprezinta unealta efectiva de lucru cu care robotul poate apuca
obiectele in functie de sarcina stabilita, are funcţia de a solidariza obiectul manipulat de un
element al dispozitivului de ghidare. Gripper-ul brațului robotic proiectat de echipă este alcatuit
din două roți dințate actionate de un servomotor SG90 și 4 elemente simetrice cîte 2 care asigură
prinderea obiectului de mutat.

Asamblarea bratului robotic a fost executată de studentul Gogu Irinel folosind


următoarele de unelte si accesorii:

12 din 28
- șurubelnița cruce tip PZ1;
- aparat de lipit ;
- patent;
- clește pentru desertizat cabluri electrice;
- șuruburi M3x0.4 pentru fiecare servomotor;
- șuruburi M3x0.6 pentru sustinerea servomotoarelor, filet plastic;
- cabluri electrice;
Detaliile referitoare la asamblarea brațului robotic urmeaza a fi prezentate in capitolul de
asamblare.

Fig. 7 – Brat robotic manipulator – Asamblat

2.3 Sistemul de transmisie


Articulaţiile brațului sunt cuplate la motoare prin intermediul sistemului de transmisie care are
următoarele funcții principale:
– produce mişcările robotului;
13 din 28
– transformă mişcările de rotaţie în mişcări de translaţie şi invers;
– reduce mişcările şi amplifică cuplurile.

2.4 Sistemul senzorilor şi al traductoarelor

Funcţiile sistemului senzorilor și al traductoarelor sunt de a prelua informațiile din mediul


în care lucrează și de a le pune la dispoziție sistemului decizional in vederea creării de comenzi.
Sistemul sensorial al brațului robotic proiectat este alcatuit din doua tipuri de senzori:
• Senzori de lucru – care ajută brațul robotic în pozitionarea sa
Acesti senzori sunt:
- senzorii interni ai servomotoarelor (potentiometre);
- senzori infraroșu care detectează prezența unei sarcini ce urmează a fi manipulate și de
asemenea detectează dacă sarcina a fost realizată cu success și obiectul de manipulat a fost
poziționat corect în poziția de destinație.
S-au folosit doi sonzori optici:

Primul sensor are rolul de a “vedea” daca pe locul prestabilit se afla un obiect ce se
doreste a fi manipulat iar cel de-al doilea pentru a detecta daca obiectul a fost plasat in locul
prestabilit, microcontrolerul urmand a afisa utilizatorului un mesaj in acest sens.

• Senzori de securitate – au fost utilizati pentru sesizarea pericolelor (ciocniri, creşterea


temperaturii etc. ). Sistemul senzorial de securitate are rolul de a preveni coliziunile cu alte
entități la apariția unor regimuri de funcţionare necorespunzătoare sau a unor obstacole
neprevăzute.
În acest scop au fost folositi senzori ultrasonici care detectează persoane sau obiecte
aflate în raza de acțiune a brațului robotic aflat în funcțiune. Microcontrolerul avertizează printr-
un mesaj acustic dacă distanța de siguranță a fost încâlcată și comandă oprirea servomotoarelor.

2.5 Sistemul decizional

14 din 28
Pentru a fi considerat inteligent (sau autonom), un robot are nevoie de un microcontroler
care să proceseze informațiile preluate de senzori să proceseze datele și să ia decizii pe care să le
trimită sub formă de comenzi către elementele de execuție. Partea de programare a regulatorului
a revenit studentului Andrei Lucuță. Microcontrolerul ales pentru acest proiect, după mai multe
dezbateri și discuții în grupul de lucru este Arduino Uno R3.

Initial grupul a ales un microcontroler de tip Arduino Mega 2560, dar pentru a respecta
principiul de costuri scăzute și pentru că numarul de pini PWM pe care Uno R3 îi are este
suficient, decizia a fost schimbată în consecință.

2.6 Scheme electrice:

În continuare vă prezentăm schemele electrice folosite pentru conexiunile între elementele


sistemului electric al robotului atît pentru partea de alimentare de la sursa de curent, de
transmitere a comenzilor de la microcontroler către motoare precum și conexiunile pentru
mișcarea motoarelor.

15 din 28
16 din 28
17 din 28
Capitolul 3. Programarea

Mediul de programare ARDUINO

Arduino este un mediu de dezvoltare open source ce oferă mijloace foarte


rapide de a scrie codul sursă și încărca cu ușurință programul pe placăa Arduino. Acesta este
compatibil cu Windows dar și cu alte sisteme de operare. Mediul de dezvoltare este scris în Java
si are la bază processing, avr-gcc, și alte programe open source.
Arduino IDE conține librării. Acestea furnizează funcționalitate extinsă pentru a fi
folosită în schițe. Pentru a folosi librarii în schițe, le puteți selecta din meniul Sketch->Import
Library. Această operațiune va insera încă o librărie #include în partea de sus a programului, iar
librăria va fi compilată odată cu schița.
Pentru aplicația Brațului Robot Manipulator, au fost incluse urmatoarele librarii:
- Servo.h – librarie pentru controlul servomotoarelor
- NewPing.h – librarie pentru lucrul cu senzori ultrasonici
• Codul sursa cu explicatii

/*
Proiect S.C.R. - Braț Robot Manipulator
A.I.A. - F.R. grupa 10181
Studenți: Andrei Lucuță
Cristian Nicolescu
Irinel Gogu
*/

#include <Servo.h>
// Alocarea pinilor pentru cele 6 servomotoare
int servopin1=9;
int servopin2=10;
int servopin3=6;
int servopin4=5;
int servopin5=3;
int servopin6=11;
// Alocarea pinului pentru buzzer
int buzzer=4; //4

18 din 28
// Obiectele cu care vom lucra
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;

// Variabile pentru pozițiile de start 1


int pozitie1=80;
int pozitie2=70;
int pozitie3=90;
int pozitie4=100;
int pozitie5=160;
int pozitie6=140; // griper desfăcut

// Variabile pentru poziția de pick-up 2


int pozitie12=125;
int pozitie22=30;
int pozitie32=150;
int pozitie42=99;
int pozitie52=90;
int pozitie62=60; // gripper închis
int pozitie221=25; // axa 2 merge 1 cm în jos

// Variabile pentru poziția intermediară - 3


int pozitie13=70;
int pozitie23=70;
int pozitie33=120;
int pozitie43=10;
int pozitie53=70;
int pozitie63=60;

// Variabile pentru poziția de "place" - 4


int pozitie14=20;
int pozitie24=30;
int pozitie34=150;
int pozitie44=100;
int pozitie54=80;
int pozitie64=140;

int intarziere=500; // Milisecunde de pauză între operații

int v=20; // Viteza de operare a brațului - milisecunde între gradele de rotație

// Funcție pentru inițializarea brațului într-o anumită poziție


19 din 28
void initializare(){
servo1.write(pozitie1); //
servo2.write(pozitie2); //
servo3.write(pozitie3); //
servo4.write(pozitie4); //
servo5.write(pozitie5); //
servo6.write(pozitie6); //
Serial.println("Bratul se afla in pozitia de start");
}
// Funcție pentru buzzer - imită un utilaj în lucru
void sunet_lucru(){
tone(buzzer, 450);
delay(500);
noTone(buzzer);
delay(500);
}

// Funcție pentru buzzer atunci când o persoană intră în raza de acțiune


void sunet_pericol() {
tone(buzzer, 400);
delay(5);
noTone(buzzer);
Serial.println("Persoane detectate in raza de actiune!!!");
}
void setup() {
pinMode(7,INPUT);
Serial.begin(9600);
servo1.attach(servopin1);
servo2.attach(servopin2);
servo3.attach(servopin3);
servo4.attach(servopin4);
servo5.attach(servopin5);
servo6.attach(servopin6);
// Pozitia initiala

initializare();
}

// Funcția pentru mișcarea efectivă a brațului către poziția 1 cu scopul de a îndeplini sarcina
void pozitia1catre2(){
sunet_lucru();
Serial.println("Sarcina detectata, manipulator in miscare! ");
delay(800);
Serial.println(" ... in drum spre pozitia de destinatie 2, pozitia de pick! ");

Serial.print("In mascare: Axa 2 de la " );


20 din 28
Serial.print (pozitie2);
Serial.print( " grade catre ");
Serial.print(pozitie22);
Serial.println(" grade");
for (int i=pozitie2; i>pozitie22; i--) { servo2.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In miscare: Axa 1 de la " );
Serial.print (pozitie1);
Serial.print( " grade catre ");
Serial.print(pozitie12);
Serial.println(" grade");
for (int i=pozitie1; i<pozitie12; i++) { servo1.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In miscare: Axa 3 de la " );
Serial.print (pozitie3);
Serial.print( " grade catre ");
Serial.print(pozitie32);
Serial.println(" grade");
delay(intarziere);
for (int i=pozitie3; i<pozitie32; i++) { servo3.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In mascare: Axa 4 de la " );
Serial.print (pozitie4);
Serial.print( " grade catre ");
Serial.print(pozitie42);
Serial.println(" grade");
for (int i=pozitie4; i>pozitie42; i--) { servo4.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In mascare: Axa 5 de la " );
Serial.print (pozitie5);
Serial.print( " grade catre ");
Serial.print(pozitie52);
Serial.println(" grade");
for (int i=pozitie5; i>pozitie52; i--) { servo5.write(i);
delay(v);
}
sunet_lucru();
// Axa 2 sa mai coboare 1 cm
21 din 28
Serial.print("In mascare: Axa 2 de la " );
Serial.print (pozitie22);
Serial.print( " grade catre ");
Serial.print(pozitie221);
Serial.println(" grade");
for (int i=pozitie22; i>pozitie221; i--) { servo2.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In mascare: Axa6 de la " );
Serial.print (pozitie6);
Serial.print( " grade catre ");
Serial.print(pozitie62);
Serial.println(" grade");
for (int i=pozitie6; i>pozitie62; i--) { servo6.write(i);
delay(v);
}
delay(2000);
}

// Funcția de mișcare a brațului către poziția 2


void pozitia2catre3(){
sunet_lucru();
Serial.println("Sarcina detectata, manipulator in miscare! ");
delay(800);
Serial.println("... in drum spre pozitia de destinatie 3, pozitia intermediara! ");
Serial.print("In miscare: Axa 2 de la " );
Serial.print (pozitie221); // 1 cm
Serial.print( " grade catre ");
Serial.print(pozitie23);
Serial.println(" grade");
for (int i=pozitie221; i<pozitie23; i++) { servo2.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In miscare: Axa 1 de la " );
Serial.print (pozitie12);
Serial.print( " grade catre ");
Serial.print(pozitie13);
Serial.println(" grade");
for (int i=pozitie12; i>pozitie13; i--) { servo1.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In miscare: Axa 3 de la " );
Serial.print (pozitie32);
22 din 28
Serial.print( " grade catre ");
Serial.print(pozitie33);
Serial.println(" grade");
for (int i=pozitie32; i>pozitie33; i--) { servo3.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In miscare: Axa 4 de la " );
Serial.print (pozitie42);
Serial.print( " grade catre ");
Serial.print(pozitie43);
Serial.println(" grade");
for (int i=pozitie42; i>pozitie43; i--) { servo4.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In miscare: Axa 5 de la " );
Serial.print (pozitie52);
Serial.print( " grade catre ");
Serial.print(pozitie53);
Serial.println(" grade");
for (int i=pozitie52; i>pozitie53; i--) { servo5.write(i);
delay(v);
}
/*Serial.print("In miscare: Axa 6 de la " );
Serial.print (pozitie62);
Serial.print( " grade catre ");
Serial.print(pozitie63);
Serial.println(" grade");sunet_lucru();
for (int i=pozitie62; i<pozitie63; i++) { servo6.write(i);
delay(v);
}*/
delay(2000);
}

// Functia de miscare a bratului catre pozitia "Place" 3

void pozitia3catre4(){
sunet_lucru();
Serial.println("Sarcina detectata, manipulator in miscare! ");
delay(800);
Serial.println(" ... in drum spre pozitia de destinatie 3, pozitia de place! ");
Serial.print("In mascare: Axa 1 de la " );
Serial.print (pozitie13);
Serial.print( " grade catre ");
Serial.print(pozitie14);
23 din 28
Serial.println(" grade");
for (int i=pozitie13; i>pozitie14; i--) { servo1.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In mascare: Axa 2 de la " );
Serial.print (pozitie23);
Serial.print( " grade catre ");
Serial.print(pozitie24);
Serial.println(" grade");
for (int i=pozitie23; i>pozitie24; i--) { servo2.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In mascare: Axa 3 de la " );
Serial.print (pozitie33);
Serial.print( " grade catre ");
Serial.print(pozitie34);
Serial.println(" grade");
for (int i=pozitie33; i<pozitie34; i++) { servo3.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In mascare: Axa 4 de la " );
Serial.print (pozitie43);
Serial.print( " grade catre ");
Serial.print(pozitie44);
Serial.println(" grade");
for (int i=pozitie43; i<pozitie44; i++) { servo4.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In mascare: Axa 5 de la " );
Serial.print (pozitie53);
Serial.print( " grade catre ");
Serial.print(pozitie54);
Serial.println(" grade");
for (int i=pozitie53; i<pozitie54; i++) { servo5.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In mascare: Axa 6 de la " );
Serial.print (pozitie63);
Serial.print( " grade catre ");
Serial.print(pozitie64);
Serial.println(" grade");
24 din 28
for (int i=pozitie62; i<pozitie64; i++) { servo6.write(i);
delay(v);
}
delay(2000);
}

// Functia de miscare inapoi care pozitia 1, cea initiala


void pozitia4catre1(){
sunet_lucru();
Serial.println("Robotul a descarcat sarcina, va intra in repaus ");
delay(800);
Serial.println(" ... in drum spre pozitia de initializare, pozitia de repaus! ");
Serial.print("In mascare: Axa 2 de la " );
Serial.print (pozitie24);
Serial.print( " grade catre ");
Serial.print(pozitie2);
Serial.println(" grade");
for (int i=pozitie24; i<pozitie2; i++) { servo2.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In mascare: Axa 1 de la " );
Serial.print (pozitie14);
Serial.print( " grade catre ");
Serial.print(pozitie1);
Serial.println(" grade");
for (int i=pozitie14; i<pozitie1; i++) { servo1.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In mascare: Axa 3 de la " );
Serial.print (pozitie34);
Serial.print( " grade catre ");
Serial.print(pozitie3);
Serial.println(" grade");
for (int i=pozitie34; i>pozitie3; i--) { servo3.write(i);
delay(v);
}
sunet_lucru();
Serial.print("In mascare: Axa 4 de la " );
Serial.print (pozitie44);
Serial.print( " grade catre ");
Serial.print(pozitie4);
Serial.println(" grade");
for (int i=pozitie44; i<pozitie4; i++) { servo4.write(i);
delay(v);
25 din 28
}
sunet_lucru();
Serial.print("In mascare: Axa 5 de la " );
Serial.print (pozitie54);
Serial.print( " grade catre ");
Serial.print(pozitie5);
Serial.println(" grade");
for (int i=pozitie54; i<pozitie5; i++) { servo5.write(i);
delay(v);
}
sunet_lucru();
/*Serial.print("In mascare: Axa 6 de la " );
Serial.print (pozitie64);
Serial.print( " grade catre ");
Serial.print(pozitie6);
Serial.println(" grade");
for (int i=pozitie64; i<pozitie6; i++) { servo6.write(i);
delay(v);
}*/
delay(2000);
Serial.println(" Bratul a finalizat cu succes operatiunea! ");
}

void miscare(){
Serial.println(" Indepartati-va de raza de actiune a robotului");

pozitia1catre2();
pozitia2catre3();
pozitia3catre4();
pozitia4catre1();
}

// Functia de miscare a bratului cu scopul de a ajunge in pozitia de repaus


void repaus(){

Serial.println("Plasati sarcina in chenarul negru nr. 1");


delay(800);
initializare();

void loop() {

// Daca senzorul infrarosu detecteaza sarcina de lucru, se apeleaza functia de miscare


if(digitalRead(7)==0)
26 din 28
{
miscare();

}
else{

repaus();
}

Capitolul 4. Funcționarea

Capitolul 5. Concluzii

Această lucrare descrie modul de proiectare execuție și funcționare al unui braț robotic
manipulator, cu o placă Arduino UNO.
Robotul reușește să îndeplinească toate sarcinile pentru care a fost creat, într-un mod
autonom și dispune de un mod de oprire de urgență comandat în caz de avarii.
Întregul ansamblu, reprezintă doar o implementare practică a noțiunilor dobândite în
facultate, aplicațiile sale viitoare putând fi nelimitate. Acesta poate fi folosit în numeroase
aplicații și domenii unde prezența oamenilor este imposibilă sau ostilă, robotul putând fi
comandat de la o distanță sigură.
Principalele limitări actuale ale acestui robot se refera la calitatea, durata de viață a
componentelor și precizia senzorilor.
La nivel software, minusurile dar și domeniul de îmbunătățire pot fi considerate:
dezvoltarea unei aplicații ce foloseste cinematica inversă.

Bibliografie:
 Curs Sisteme de conducere a roboților al U.P.G.;
 Canalul YouTube „ How to Mechatronics”;
 Canalul YouTube „ DroneBot Workshop”;
 Canalul YouTube MariusCAD
 https://www.robotshop.com/community/tutorials/show/robot-arm-torque-calculator
 https://www.orientalmotor.com/motor-sizing/index.html?hsCtaTracking=f24cd0b7-
792e-4246-a809-1f6331235405%7C1a2e428f-08bc-423f-9cb5-36f09902df29
 www.arduino.cc
 https://github.com/arduino-libraries/Servo.h

Anexe:

27 din 28
Anexa 1. Manual de utilizare al Bratului Manipulator
Anexa 2. Manual de asamblare al Bratului Manipulator
Anexa 3. Lista de cumparaturi
Anexa4. Lista componentelor printate 3D cu fisierele CAD aferente

28 din 28

S-ar putea să vă placă și