- MPU6050 Žiroskopski senzor i mjerač ubrzanja
- Flex senzor
- Priprema 3D tiskane robotske ARM:
- Potrebne komponente:
- Kružni dijagram:
- Montaža MPU6050 i Flex senzora na rukavice
- Programiranje Arduino Nano za robotsku ruku
- Rad robotske ruke s kontrolom gesta pomoću Arduina
Robotsko oružje jedna je od fascinantnih inženjerskih tvorevina i uvijek je fascinantno gledati kako se te stvari naginju i pomiču kako bi se složene stvari učinile baš kao što bi to učinila ljudska ruka. Ove robotske ruke mogu se često naći u industrijama na montažnoj liniji koje izvode intenzivne mehaničke radove poput zavarivanja, bušenja, farbanja itd., Nedavno se razvijaju i napredne robotske ruke s velikom preciznošću za izvođenje složenih kirurških operacija. Prije smo 3D printali robotsku ruku i napravili DIY robotsku ruku za odabir i postavljanje pomoću ARM7 mikrokontrolera. Ponovno ćemo upotrijebiti istu 3D ispisanu robotsku ruku za izradu robotskog ARM-a kontroliranog gestama pomoću Arduino Nano-a, MPU6050 žiroskopa i flex senzora.
Ovim 3D otisnutim robotskim položajem ruke kontrolira se ručnom rukavicom koja je pričvršćena MPU6050 žiroskopom i fleks senzorom. Flex senzor koristi se za upravljanje servo hvatačem Robotic Arm, a MPU6050 koristi se za kretanje robotskog u X i Y osi. Ako nemate pisač, ruku možete izraditi i jednostavnim kartonom kakav smo izradili za naš Arduino Robotic Arm Project. Kao inspiraciju možete se pozvati i na Record and Play Robotic Arm koji smo ranije izradili pomoću Arduina.
Prije ulaska u detalje, prvo, naučimo o MPU6050 senzoru i flex senzoru.
MPU6050 Žiroskopski senzor i mjerač ubrzanja

MPU6050 temelji se na tehnologiji mikro-mehaničkih sustava (MEMS). Ovaj senzor ima 3-osni akcelerometar, 3-osni žiroskop i ugrađeni senzor temperature. Može se koristiti za mjerenje parametara kao što su ubrzanje, brzina, orijentacija, pomicanje itd. Prethodno smo povezali MPU6050 s Arduinom i Raspberry pi, a također smo napravili nekoliko projekata koristeći ga poput - Samo balansirajući robot, Arduino Digitalni kutomjer i Arduino Inclinometer.
Značajke senzora MPU6050:
- Komunikacija: I2C protokol s podesivom I2C adresom
- Ulazno napajanje: 3-5V
- Ugrađeni 16-bitni ADC pruža visoku točnost
- Ugrađeni DMP pruža veliku računsku snagu
- Može se koristiti za povezivanje s drugim I2C uređajima poput magnetometra
- Ugrađeni senzor temperature
Pojedinosti o pin-outu MPU6050:
| Prikvači | Upotreba |
| Vcc | Pruža snagu modula, može biti od + 3V do + 5V. Uobičajeno se koristi + 5V |
| Prizemlje | Povezano s masom sustava |
| Serijski sat (SCL) | Koristi se za davanje impulsa takta za I2C komunikaciju |
| Serijski podaci (SDA) | Koristi se za prijenos podataka putem I2C komunikacije |
| Pomoćni serijski podaci (XDA) | Može se koristiti za povezivanje ostalih I2C modula s MPU6050 |
| Pomoćni serijski sat (XCL) | Može se koristiti za povezivanje ostalih I2C modula s MPU6050 |
| AD0 | Ako se više MCU6050 koristi s jednim MCU-om, tada se ovaj pin može koristiti za promjenu adrese |
| Prekid (INT) | Prekidni pin označava da su podaci dostupni MCU za čitanje |
Flex senzor

Flex senzori nisu ništa drugo nego promjenjivi otpornici. Otpor fleks senzora mijenja se kada je senzor savijen. Obično su dostupni u dvije veličine 2,2 inča i 4,5 inča.
Zašto u našem projektu koristimo flex senzore?
U ovoj robotskoj ruci kontroliranoj gestama, senzor savijanja koristi se za upravljanje hvataljkom robotske ruke. Kada je savijeni flex senzor na ručnoj rukavici, servo motor pričvršćen na hvataljku se okreće i hvataljka se otvara.

Flex senzori mogu biti korisni u mnogim aplikacijama, a mi smo napravili nekoliko projekata koji koriste Flex senzor poput kontrolnika igre, generatora tona itd.
Priprema 3D tiskane robotske ARM:

3D tiskana robotska ruka korištena u ovom vodiču izrađena je slijedeći dizajn koji je dao EEZYbotARM koji je dostupan u Thingiverse. Cjelovit postupak izrade 3D tiskane robotske ruke i detalja o sastavljanju s videom prisutan je na poveznici Thingiverse, koja je gore podijeljena.
Iznad je slika moje 3D tiskane robotske ruke nakon sklapanja s 4 servo motora.
Potrebne komponente:
- Arduino Nano
- Flex senzor
- Otpornik 10k
- MPU6050
- Rukavice
- Spajanje žica
- Breadboard
Kružni dijagram:
Sljedeća slika prikazuje kruga veze za Težak temelji pokretom ruke. Kontroliranom robotski

Kružna veza između MPU6050 i Arduino Nano:
|
MPU6050 |
Arduino Nano |
|
VCC |
+ 5V |
|
GND |
GND |
|
SDA |
A4 |
|
SCL |
A5 |
Kružna veza između servo motora i Arduino Nano:
|
Arduino Nano |
SERVO MOTOR |
Adapter za napajanje |
|
D2 |
Servo 1 narančasta (PWM pin) |
- |
|
D3 |
Servo 2 Narančasta (PWM pribadača) |
- |
|
D4 |
Servo 3 Narančasta (PWM pribadača) |
- |
|
D5 |
Servo 4 Narančasta (PWM pribadača) |
- |
|
GND |
Servo 1,2,3,4 smeđa (GND pribadača) |
GND |
|
- |
Servo 1,2,3,4 Crveni (+ 5V pin) |
+ 5V |
Fleksibilni senzor sadrži dvije igle. Ne sadrži polarizirane stezaljke. Dakle, pin jedan P1 povezan je s analognim pinom A0 Arduino Nano s povlačnim otpornikom od 10k, a pin dva P2 uzemljen je na Arduino.
Montaža MPU6050 i Flex senzora na rukavice
Montirali smo MPU6050 i Flex Sensor na ručnu rukavicu. Ovdje se za povezivanje rukavice i robotske ruke koristi žičana veza, ali se ona može učiniti bežičnom pomoću RF veze ili Bluetooth veze.
Nakon svake veze, konačna postavka za robotsku ruku kontroliranu gestama izgleda poput donje slike:

Programiranje Arduino Nano za robotsku ruku
Kao i obično, na kraju ovog vodiča dan je cjelovit kôd zajedno s video zapisom koji radi. Ovdje je objašnjeno nekoliko važnih redaka koda.
1. Prvo uključite potrebne datoteke knjižnice. Biblioteka Wire.h koristi se za I2C komunikaciju između Arduino Nano i MPU6050 i servo.h za upravljanje servo motorom.
#include
2. Zatim se deklariraju objekti za servo klase. Kako koristimo četiri servo motora, kreiraju se četiri objekta poput servo_1, servo_2, servo_3, servo_4.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Zatim se deklarira I2C adresa MPU6050 i varijable koje će se koristiti.
const int MPU_addr = 0x68; // MPU6050 I2C Adresa int16_t osi_X, osi_Y, osi_Z; int minVal = 265; int maxVal = 402; dvostruki x; dvostruko y; dvostruko z;
4. Sljedeće u postavljanju praznine postavlja se brzina prijenosa od 9600 za serijsku komunikaciju.
Serial.begin (9600);
Uspostavljena je I2C komunikacija između Arduino Nano i MPU6050:
Wire.begin (); // Iniciranje komunikacijske žice I2C.beginTransmission (MPU_addr); // Pokreni komunikaciju s MPU6050 Wire.write (0x6B); // Zapisuje u registar 6B Wire.write (0); // Zapiše 0 u 6B Registriraj se za poništavanje Wire.endTransmission (true); // Završava I2C prijenos
Također su definirana četiri PWM pina za veze servo motora.
servo_1.attach (2); // Naprijed / unatrag_Motor servo_2.attach (3); // Gore / Dolje_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Lijevi / Desni_Motor
5. Sljedeće u funkciji void loop , ponovo uspostavite I2C vezu između MPU6050 i Arduino Nano, a zatim počnite čitati podatke o X, Y, Z-osi iz registra MPU6050 i pohranite ih u odgovarajuće varijable.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Počnite s regsiter 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, istina); // Čitanje 14 Registra axis_X = Wire.read () << 8-Wire.read (); osi_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Nakon toga mapirajte minimalnu i maksimalnu vrijednost podataka osi sa senzora MPU6050 u rasponu od -90 do 90.
int xAng = karta (os_X, minVal, maxVal, -90,90); int yAng = karta (os_Y, minVal, maxVal, -90,90); int zAng = karta (os_Z, minVal, maxVal, -90,90);
Zatim upotrijebite sljedeću formulu za izračun vrijednosti x, y, z u terminima od 0 do 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);
Zatim pročitajte analogne izlazne podatke osjetnika savijanja na pinu A0 Arduino Nano-a i prema digitalnoj vrijednosti savitljivog osjetnika postavite kut servo-hvatača. Dakle, ako su podaci fleks senzora veći od 750, kut servo motora hvatača je 0 stupnjeva, a ako je manji od 750, to je 180 stupnjeva.
int hvataljka; int flex_sensorip = analogRead (A0); if (flex_sensorip> 750) { hvataljka = 0; } else { hvataljka = 180; } servo_3.write (hvataljka);
Tada se kretanje MPU6050 na X-osi od 0 do 60 preslikava u smislu 0 do 90 stupnjeva za kretanje servo-motora prema naprijed / unatrag robotskom rukom.
if (x> = 0 && x <= 60) { int mov1 = map (x, 0,60,0,90); Serial.print ("Pokret u F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
A kretanje MPU6050 na X-osi od 250 do 360 preslikava se u smislu od 0 do 90 stupnjeva za robotsku ruku kretanja servo motora gore / dolje.
inače if (x> = 300 && x <= 360) { int mov2 = map (x, 360.250,0,90); Serial.print ("Kretanje gore / dolje ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
Kretanje MPU6050 na Y-osi od 0 do 60 mapirano je u smislu 90 do 180 stupnjeva za lijevo kretanje robotske ruke servo motora.
if (y> = 0 && y <= 60) { int mov3 = karta (y, 0,60,90,180); Serial.print ("Pokret ulijevo ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Kretanje MPU6050 u Y-osi od 300 do 360 mapirano je u smislu 0 do 90 stupnjeva za desno kretanje robotske ruke servo motora.
inače if (y> = 300 && y <= 360) { int mov3 = map (y, 360.300,90,0); Serial.print ("Pokret udesno ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Rad robotske ruke s kontrolom gesta pomoću Arduina
Konačno, prenesite kod na Arduino Nano i nosite ručnu rukavicu montiranu s MPU6050 i Flex senzorom.
1. Sada pomaknite ruku prema dolje za pomicanje robotske ruke prema naprijed i pomaknite se gore za pomicanje robotske ruke prema gore.
2. Zatim nagnite ruku ulijevo ili udesno da biste okrenuli robotsku ruku ulijevo ili udesno.
3. Savijte fleksibilni kabel pričvršćen prstom ručne rukavice da biste otvorili hvataljku, a zatim je otpustite da biste je zatvorili.
Kompletan rad prikazan je u videu datom u nastavku.
