- MPU6050 Žiroskopski senzor in merilec pospeška
- Flex senzor
- Priprava 3D tiskane robotske ARM:
- Potrebne komponente:
- Shema vezja:
- Montaža MPU6050 in Flex senzorja na rokavice
- Programiranje Arduino Nano za robotsko roko
- Delo z gestami nadzorovano robotsko roko z uporabo Arduina
Robotsko orožje je ena fascinantnih inženirskih stvaritev in vedno je fascinantno opazovati, kako se te stvari nagibajo in premikajo, da se zapletejo stvari, tako kot bi to storila človeška roka. Te robotske roke lahko pogosto najdemo v industrijah na tekočem traku, ki opravljajo intenzivna mehanska dela, kot so varjenje, vrtanje, barvanje itd. V zadnjem času se razvijajo tudi napredne robotske roke z visoko natančnostjo za izvajanje zapletenih kirurških operacij. Prej smo 3D natisnili robotsko roko in z uporabo mikrokrmilnika ARM7 izdelali robotsko roko DIY Pick and Place. Ponovno bomo uporabili isto 3D tiskano robotsko roko za izdelavo robotske ARM s krmiljenjem z roko z uporabo Arduino Nano, giroskopa MPU6050 in flex senzorja.
Ta 3D tiskani robotski položaj roke nadzira ročna rokavica, pritrjena z MPU6050 žiroskopom in fleksibilnim senzorjem. Senzor Flex se uporablja za krmiljenje servo prijemal Robotic Arm, MPU6050 pa za premikanje robotiziranih osi X in Y. Če nimate tiskalnika, lahko svojo roko sestavite tudi iz preprostega kartona, kot smo ga izdelali za naš projekt Arduino Robotic Arm. Za navdih se lahko obrnete tudi na snemanje in predvajanje robotske roke, ki smo jo prej ustvarili z uporabo Arduina.
Preden se spustimo v podrobnosti, se najprej seznanimo s senzorjem MPU6050 in flex senzorjem.
MPU6050 Žiroskopski senzor in merilec pospeška
MPU6050 temelji na tehnologiji mikro-mehanskih sistemov (MEMS). Ta senzor ima 3-osni merilnik pospeška, 3-osni žiroskop in vgrajen temperaturni senzor. Z njim lahko merimo parametre, kot so pospešek, hitrost, orientacija, premik itd. MPU6050 smo že povezali z Arduino in Raspberry pi in z njim zgradili nekaj projektov, kot so robot Self Balancing, Arduino Digital Protractor in Arduino Inclinometer.
Značilnosti senzorja MPU6050:
- Komunikacija: protokol I2C z nastavljivim naslovom I2C
- Vhodno napajanje: 3-5V
- Vgrajeni 16-bitni ADC zagotavlja visoko natančnost
- Vgrajeni DMP zagotavlja visoko računsko moč
- Lahko se uporablja za povezavo z drugimi napravami I2C, kot je magnetometer
- Vgrajen temperaturni senzor
Podrobnosti o pin-out MPU6050:
Pin | Uporaba |
Vcc | Omogoča napajanje modula, lahko je od + 3V do + 5V. Običajno se uporablja + 5V |
Tla | Povezan z zemljo sistema |
Zaporedna ura (SCL) | Uporablja se za zagotavljanje takta za komunikacijo I2C |
Zaporedni podatki (SDA) | Uporablja se za prenos podatkov prek komunikacije I2C |
Pomožni serijski podatki (XDA) | Lahko se uporablja za povezovanje drugih modulov I2C z MPU6050 |
Pomožna serijska ura (XCL) | Lahko se uporablja za povezovanje drugih modulov I2C z MPU6050 |
AD0 | Če se za en MCU uporablja več kot en MPU6050, lahko s tem zatičem spremenite naslov |
Prekinitev (INT) | Prekinitveni zatič označuje, da so MCU na voljo podatki za branje |
Flex senzor
Flex senzorji niso nič drugega kot spremenljivi upor. Odpornost upogibnega tipala se spremeni, ko je senzor upognjen. Običajno so na voljo v dveh velikostih 2,2 in 4,5 palca.
Zakaj v našem projektu uporabljamo upogljive senzorje?
V tej robotski roki, nadzorovani z gestami, je upognjen senzor za nadzor prijemala robotske roke. Ko je upognjen senzor upogiba na ročni rokavički, se servo motor pritrjen na prijemalo zavrti in prijemalo se odpre.
Flex senzorji so lahko uporabni v mnogih aplikacijah in z uporabo Flex senzorja smo zgradili nekaj projektov, kot so igralni krmilnik, generator tonov itd.
Priprava 3D tiskane robotske ARM:
3D tiskana robotska roka, uporabljena v tej vadnici, je bila narejena po načrtu, ki ga je izdal EEZYbotARM in je na voljo v Thingiverse. Celoten postopek izdelave 3D tiskane robotske roke in podrobnosti sestavljanja z videoposnetkom je prisoten v povezavi Thingiverse, ki je navedena zgoraj.
Zgoraj je slika moje 3D tiskane robotske roke po sestavljanju s 4 servo motorji.
Potrebne komponente:
- Arduino Nano
- Flex senzor
- 10k upor
- MPU6050
- Ročne rokavice
- Povezovanje žic
- Breadboard
Shema vezja:
Naslednja slika prikazuje vezje vezja za robotsko roko, ki temelji na Arduino .
Vezje med MPU6050 in Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Krožna povezava med servo motorji in Arduino Nano:
Arduino Nano |
SERVO MOTOR |
Polnilec |
D2 |
Servo 1 oranžna (PWM zatič) |
- |
D3 |
Servo 2 oranžna (Pin PWM) |
- |
D4 |
Servo 3 oranžna (Pin PWM) |
- |
D5 |
Servo 4 Orange (Pin PWM) |
- |
GND |
Servo 1,2,3,4 rjava (GND zatič) |
GND |
- |
Servo 1,2,3,4 Rdeča (+ 5V Pin) |
+ 5V |
Flex senzor vsebuje dva zatiča. Ne vsebuje polariziranih terminalov. Torej je pin 1 P1 povezan z analognim pinom A0 Arduino Nano z vlečnim uporom 10k, pin 2 P2 pa je ozemljen na Arduino.
Montaža MPU6050 in Flex senzorja na rokavice
MPU6050 in Flex Sensor smo namestili na ročno rokavico. Tu se za povezavo rokavice in robotske roke uporablja žična povezava, ki pa jo je mogoče brezžično povezati z uporabo RF povezave ali povezave Bluetooth.
Po vsaki povezavi je končna nastavitev robotske roke, ki jo nadzorujemo z gestami, videti kot spodnja slika:
Programiranje Arduino Nano za robotsko roko
Kot običajno je na koncu te vadnice navedena celotna koda skupaj z delujočim videoposnetkom. Tu je razloženih nekaj pomembnih vrstic kode.
1. Najprej vključite potrebne knjižnične datoteke. Knjižnica Wire.h se uporablja za komunikacijo I2C med Arduino Nano in MPU6050 in servo.h za nadzor servo motorja.
#include
2. Nato se deklarirajo predmeti za servo razreda. Ko uporabljamo štiri servo motorje, se ustvarijo štirje predmeti, kot so servo_1, servo_2, servo_3, servo_4.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Nato je naveden naslov I2C MPU6050 in spremenljivke, ki bodo uporabljene.
const int MPU_addr = 0x68; // MPU6050 Naslov I2C int16_t osi_X, osi_Y, osi_Z; int minVal = 265; int maxVal = 402; dvojni x; dvojni y; dvojna Z;
4. Naslednja nastavitev praznine je za serijsko komunikacijo nastavljena hitrost prenosa 9600.
Serial.begin (9600);
In vzpostavljena je komunikacija I2C med Arduino Nano in MPU6050:
Wire.begin (); // Inicializiramo komunikacijski kabel I2C.beginTransmission (MPU_addr); // Začnite komunikacijo z MPU6050 Wire.write (0x6B); // Piše v register 6B Wire.write (0); // Zapiše 0 v 6B Register za ponastavitev Wire.endTransmission (true); // Konča prenos I2C
Za povezave servo motorja so določeni tudi štirje PWM zatiči.
servo_1.attach (2); // naprej / nazaj_motor servo_2.attach (3); // Gor / Dol_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Levi / Desni_Motor
5. Nato v funkciji void loop spet vzpostavite povezavo I2C med MPU6050 in Arduino Nano in nato začnite brati podatke osi X, Y, Z-A iz registra MPU6050 in jih shranite v ustrezne spremenljivke.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Začnite z regsiter 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, resnično); // Preberemo 14 registrov axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Po tem preslikajte najmanjšo in največjo vrednost podatkov osi s senzorja MPU6050 v območju od -90 do 90.
int xAng = zemljevid (os_X, minVal, maxVal, -90,90); int yAng = zemljevid (os_Y, minVal, maxVal, -90,90); int zAng = zemljevid (os_Z, minVal, maxVal, -90,90);
Nato uporabite naslednjo formulo za izračun vrednosti x, y, z glede na 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);
Nato preberite analogne izhodne podatke senzorja upogiba na zatiču A0 Arduino Nano in glede na digitalno vrednost upogibnega senzorja nastavite servo kot prijemalca. Če so podatki senzorja upogibanja večji od 750, je kot servo motorja prijemalnika 0 stopinj, če je manjši od 750, pa 180 stopinj.
int prijemalka; int flex_sensorip = analogRead (A0); če (flex_sensorip> 750) { prijemalo = 0; } else { prijemalo = 180; } servo_3.write (prijemalo);
Nato se gibanje MPU6050 na osi X od 0 do 60 preslika v vrednosti od 0 do 90 stopinj za servo motorje Robotsko roko naprej / nazaj.
če (x> = 0 && x <= 60) { int mov1 = zemljevid (x, 0,60,0,90); Serial.print ("Gibanje v F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
In gibanje MPU6050 na X-osi, od 250 do 360 se preslikajo v smislu 0 do 90 stopinj za GOR / DOL gibanje robotske roke servo motorja.
sicer če (x> = 300 && x <= 360) { int mov2 = zemljevid (x, 360.250,0,90); Serial.print ("Gibanje navzgor / navzdol ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
Premik MPU6050 na osi Y od 0 do 60 je za levo gibanje robotske roke servo motorja preslikan v smislu 90 do 180 stopinj.
if (y> = 0 && y <= 60) { int mov3 = zemljevid (y, 0,60,90,180); Serial.print ("Gibanje v levo ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Premik MPU6050 v osi Y od 300 do 360 je preslikan v območju od 0 do 90 stopinj za desno gibanje robotske roke servo motorja.
sicer če (y> = 300 && y <= 360) { int mov3 = zemljevid (y, 360.300,90,0); Serial.print ("Gibanje v desno ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Delo z gestami nadzorovano robotsko roko z uporabo Arduina
Na koncu naložite kodo v Arduino Nano in nosite ročno rokavico, nameščeno s senzorjem MPU6050 & Flex.
1. Zdaj premaknite roko navzdol, da premaknete robotsko roko naprej, in premaknite navzgor, da jo premaknete navzgor.
2. Nato nagnite roko levo ali desno, da robotsko roko zasukate levo ali desno.
3. Upognite upognjeni kabel, pritrjen s prstom ročne rokavice, da odprete prijemalo in ga spustite, da ga zaprete.
Celotno delo je prikazano v spodnjem videoposnetku.