- Senzor giroscopic și accelerometru MPU6050
- Senzor flexibil
- Pregătirea brațului robotizat tipărit 3D:
- Componente necesare:
- Diagrama circuitului:
- Montarea senzorului MPU6050 și flexibil pe mănuși
- Programare Arduino Nano pentru Robotic Arm
- Funcționarea brațului robotizat controlat prin gesturi folosind Arduino
Brațele robotice sunt una dintre creațiile inginerești fascinante și este întotdeauna fascinant să privești aceste lucruri înclinându-se și panoramând pentru a face lucruri complexe la fel cum ar face un braț uman. Aceste brațe robotizate pot fi găsite în mod obișnuit în industriile de pe linia de asamblare care efectuează lucrări mecanice intense, cum ar fi sudarea, găurirea, vopsirea etc., brațele robotice recent avansate cu precizie ridicată sunt, de asemenea, dezvoltate pentru a efectua operații chirurgicale complexe. Anterior, am imprimat 3D un braț robot și am construit un braț DIY Pick and Place Robotic folosind microcontrolerul ARM7. Vom folosi din nou același braț robotizat tipărit 3D pentru a realiza un braț robotizat controlat de gestul mâinii folosind Arduino Nano, giroscopul MPU6050 și senzorul flex.
Această poziție a brațului robotizat tipărit 3D este controlată printr-o mănușă de mână atașată cu un giroscop MPU6050 și un senzor flex. Senzorul Flex este utilizat pentru a controla servo gripper al brațului robotizat, iar MPU6050 este utilizat pentru mișcarea robotului pe axele X și Y. Dacă nu aveți o imprimantă, vă puteți construi brațul cu carton simplu, așa cum am construit pentru proiectul nostru Arduino Robotic Arm. Pentru inspirație, puteți face referire și la brațul robotizat Record and Play pe care l-am construit anterior folosind Arduino.
Înainte de a intra în detalii, mai întâi, să aflăm despre senzorul MPU6050 și senzorul flex.
Senzor giroscopic și accelerometru MPU6050
MPU6050 se bazează pe tehnologia sistemelor micro-mecanice (MEMS). Acest senzor are un accelerometru pe 3 axe, un giroscop pe 3 axe și un senzor de temperatură încorporat. Poate fi folosit pentru măsurarea parametrilor precum Accelerare, Viteză, Orientare, Deplasare etc. Am interfațat anterior MPU6050 cu Arduino și Raspberry pi și am construit, de asemenea, câteva proiecte folosindu-l, cum ar fi: robotul de auto-echilibrare, Arduino Digital Protractor și Arduino Inclinometer.
Caracteristici ale senzorului MPU6050:
- Comunicare: protocol I2C cu adresă I2C configurabilă
- Sursa de alimentare de intrare: 3-5V
- ADC încorporat pe 16 biți oferă o precizie ridicată
- DMP încorporat oferă o putere de calcul ridicată
- Poate fi folosit pentru interfața cu alte dispozitive I2C, cum ar fi un magnetometru
- Senzor de temperatură încorporat
Detalii Pin-Out ale MPU6050:
Pin | Utilizare |
Vcc | Oferă energie pentru modul, poate fi de la + 3V la + 5V. De obicei se folosește + 5V |
Sol | Conectat la masă al sistemului |
Ceas serial (SCL) | Folosit pentru furnizarea impulsului de ceas pentru comunicarea I2C |
Date seriale (SDA) | Folosit pentru transferul de date prin comunicare I2C |
Date seriale auxiliare (XDA) | Poate fi utilizat pentru interfața altor module I2C cu MPU6050 |
Ceas serial auxiliar (XCL) | Poate fi utilizat pentru interfața altor module I2C cu MPU6050 |
AD0 | Dacă se utilizează mai mult de un MPU6050 un singur MCU, atunci acest pin poate fi utilizat pentru a varia adresa |
Întrerupe (INT) | Pinul de întrerupere pentru a indica faptul că datele sunt disponibile pentru citirea MCU |
Senzor flexibil
Senzorii flexibili nu sunt altceva decât un rezistor variabil. Rezistența senzorului flex se modifică atunci când senzorul este îndoit. Sunt de obicei disponibile în două dimensiuni de 2,2 inci și 4,5 inci.
De ce folosim senzori flex în proiectul nostru?
În acest braț robotizat controlat prin gesturi, un senzor flex este utilizat pentru a controla gripper-ul brațului robotizat. Când senzorul flex de pe mănușa de mână este îndoit, servomotorul atașat la gripper se rotește și gripperul se deschide.
Senzorii Flex pot fi utili în multe aplicații și am construit puține proiecte folosind senzorul Flex, cum ar fi un controler de joc, un generator de ton etc.
Pregătirea brațului robotizat tipărit 3D:
Brațul robotizat tipărit 3D utilizat în acest tutorial a fost realizat urmând designul dat de EEZYbotARM, care este disponibil în Thingiverse. Procedura completă pentru realizarea brațului robot tipărit 3D și asamblarea detaliilor cu video este prezentă în link-ul Thingiverse, care este partajat mai sus.
Deasupra este imaginea brațului meu robot imprimat 3D după asamblare cu 4 servo-motoare.
Componente necesare:
- Arduino Nano
- Senzor flexibil
- Rezistor 10k
- MPU6050
- Mănuși
- Conectarea firelor
- Breadboard
Diagrama circuitului:
Următoarea imagine arată conexiunile de circuit pentru brațul robotizat controlat prin gesturi bazat pe Arduino .
Conexiune de circuit între MPU6050 și Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Conexiunea circuitului între servomotoare și Arduino Nano:
Arduino Nano |
SERVO MOTOR |
Adaptor de alimentare |
D2 |
Servo 1 portocaliu (pin PWM) |
- |
D3 |
Servo 2 Orange (Pin PWM) |
- |
D4 |
Servo 3 Orange (Pin PWM) |
- |
D5 |
Servo 4 Portocaliu (Pin PWM) |
- |
GND |
Servo 1,2,3,4 Maro (Pin GND) |
GND |
- |
Servo 1,2,3,4 Roșu (+ 5V Pin) |
+ 5V |
Un senzor flex conține doi pini. Nu conține terminale polarizate. Deci pinul P1 este conectat la pinul analogic A0 al lui Arduino Nano cu un rezistor de tracțiune de 10k, iar pinul doi P2 este legat la pământ la Arduino.
Montarea senzorului MPU6050 și flexibil pe mănuși
Am montat MPU6050 și senzorul flexibil pe o mănușă de mână. Aici este utilizată o conexiune prin cablu pentru a conecta mănușa și brațul robot, dar poate fi făcută fără fir folosind o conexiune RF sau o conexiune Bluetooth.
După fiecare conexiune, configurarea finală pentru brațul robotizat controlat prin gesturi arată ca imaginea de mai jos:
Programare Arduino Nano pentru Robotic Arm
Ca de obicei, codul complet împreună cu un videoclip de lucru este dat la sfârșitul acestui tutorial. Aici sunt explicate câteva linii importante de cod.
1. În primul rând, includeți fișierele bibliotecii necesare. Biblioteca Wire.h este utilizată pentru comunicația I2C între Arduino Nano și MPU6050 și servo.h pentru controlul servomotorului.
#include
2. În continuare, sunt declarate obiectele pentru clasa servo. Pe măsură ce folosim patru servo-motoare, sunt create patru obiecte precum servo_1, servo_2, servo_3, servo_4.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Apoi, se declară adresa I2C a MPU6050 și variabilele care trebuie utilizate.
const int MPU_addr = 0x68; // MPU6050 I2C Adresa int16_t axis_X, axis_Y, axis_Z; int minVal = 265; int maxVal = 402; x dublu; y dublu; z dublu;
4. Apoi, în configurarea nulă , este setată o rată de transmisie de 9600 pentru comunicarea serială.
Serial.begin (9600);
Și comunicarea I2C între Arduino Nano și MPU6050 este stabilită:
Wire.begin (); // Inițializați I2C Communication Wire.beginTransmission (MPU_addr); // Începeți comunicarea cu MPU6050 Wire.write (0x6B); // Scrie la înregistrarea 6B Wire.write (0); // Scrie 0 în 6B Înregistrați-vă pentru a reseta Wire.endTransmission (adevărat); // Încheie transmisia I2C
De asemenea, patru pini PWM sunt definite pentru conexiunile servomotorului.
servo_1.attach (2); // Forward / Reverse_Motor servo_2.attach (3); // Up / Down_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Stânga / Dreapta_Motor
5. Apoi în funcția de buclă nulă , stabiliți din nou conexiunea I2C între MPU6050 și Arduino Nano și apoi începeți să citiți datele X-Y, Ax-Z din registrul MPU6050 și să le stocați în variabilele corespunzătoare.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Începeți cu regsiter 0x3B Wire.endTransmission (fals); Wire.requestFrom (MPU_addr, 14, adevărat); // Citește 14 Registre axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
După aceea, mapați valoarea minimă și maximă a datelor axelor de la senzorul MPU6050 în intervalul de la -90 la 90.
int xAng = map (axis_X, minVal, maxVal, -90,90); int yAng = hartă (axis_Y, minVal, maxVal, -90,90); int zAng = hartă (ax_Z, minVal, maxVal, -90,90);
Apoi utilizați următoarea formulă pentru a calcula valorile x, y, z în termeni de la 0 la 360.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng) + PI);
Apoi, citiți datele de ieșire analogice ale senzorului flex la pinul A0 al Arduino Nano și, în funcție de valoarea digitală a senzorului flex, setați unghiul servo al pinței. Deci, dacă datele senzorului flex sunt mai mari de 750, unghiul servomotorului de prindere este de 0 grade, iar dacă este mai mic de 750, este de 180 de grade.
int gripper; int flex_sensorip = analogRead (A0); if (flex_sensorip> 750) { gripper = 0; } else { gripper = 180; } servo_3.write (gripper);
Apoi, mișcarea MPU6050 pe axa X de la 0 la 60 este mapată în termeni de la 0 la 90 de grade pentru mișcarea înainte / inversă a servomotorului brațul robotizat.
if (x> = 0 && x <= 60) { int mov1 = map (x, 0,60,0,90); Serial.print ("Mișcare în F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
Iar mișcarea MPU6050 pe axa X de la 250 la 360 este mapată în termeni de la 0 la 90 de grade pentru brațul robotic al mișcării SUS / JOS a servomotorului.
altfel if (x> = 300 && x <= 360) { int mov2 = map (x, 360,250,0,90); Serial.print ("Mișcare în sus / jos ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
Mișcarea MPU6050 pe axa Y de la 0 la 60 este mapată în termeni de 90 până la 180 de grade pentru mișcarea stângă a servomotorului brațului robotizat.
if (y> = 0 && y <= 60) { int mov3 = map (y, 0,60,90,180); Serial.print ("Mișcare în stânga ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Mișcarea MPU6050 pe axa Y de la 300 la 360 este mapată în termeni de la 0 la 90 de grade pentru mișcarea dreaptă a brațului robotului servomotorului.
altfel if (y> = 300 && y <= 360) { int mov3 = map (y, 360,300,90,0); Serial.print ("Mișcare în dreapta ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Funcționarea brațului robotizat controlat prin gesturi folosind Arduino
În cele din urmă, încărcați codul pe Arduino Nano și purtați mănușa de mână montată cu senzorul MPU6050 și Flex.
1. Acum mutați mâna în jos pentru a muta brațul robot în față și deplasați-vă în sus pentru a muta brațul robot în sus.
2. Apoi înclinați mâna la stânga sau la dreapta pentru a roti brațul robotizat la stânga sau la dreapta.
3. Îndoiți cablul flexibil atașat cu degetul mănușii de mână pentru a deschide mânerul și apoi eliberați-l pentru a-l închide.
Funcționarea completă este demonstrată în videoclipul prezentat mai jos.