- MPU6050 giroskopinis ir akselerometro jutiklis
- „Flex Sensor“
- Pasiruošimas 3D spausdintam robotui ARM:
- Būtini komponentai:
- Grandinės schema:
- MPU6050 ir „Flex Sensor“ tvirtinimas prie pirštinių
- „Arduino Nano“ programavimas robotų rankai
- Su gestais valdomos robotinės rankos naudojimas naudojant „Arduino“
„Robotiniai ginklai“ yra vienas iš patrauklių inžinerijos kūrinių, todėl visada įdomu stebėti, kaip šie dalykai pakrypsta ir pasisuka, kad būtų atlikti sudėtingi dalykai, kaip tai darytų žmogaus ranka. Šių robotų ginklų paprastai galima rasti surinkimo linijos pramonės įmonėse, atliekančiose intensyvų mechaninį darbą, pvz., Suvirinimą, gręžimą, dažymą ir kt., Neseniai pažangios robotizuotos rankos, kurios yra labai tikslios, taip pat kuriamos sudėtingoms chirurginėms operacijoms atlikti. Anksčiau mes 3D spausdinome robotinę ranką ir pastatėme „pasidaryk pats“ robotą ranką, naudodamiesi „ARM7“ mikrovaldikliu. Mes vėl naudosime tą pačią 3D spausdintą robotų ranką, kad padarytume rankų judesiu valdomą robotą ARM, naudodami „Arduino Nano“, „MPU6050“ giroskopą ir „flex“ jutiklį.
Ši 3D spausdinta robotų rankos padėtis valdoma per rankinę pirštinę, kuri pritvirtinta MPU6050 giroskopu ir lanksčiu jutikliu. „Flex“ jutiklis naudojamas valdyti „Robotic Arm“ rankenos servo, o MPU6050 naudojamas roboto judėjimui X ir Y ašyse. Jei neturite spausdintuvo, taip pat galite pastatyti ranką iš paprasto kartono, kaip mes sukūrėme mūsų „Arduino“ robotų rankos projektui. Norėdami įkvėpti, taip pat galite kreiptis į „Record and Play Robotic Arm“, kurią mes anksčiau sukūrėme naudodami „Arduino“.
Prieš pradėdami detaliau, pirmiausia sužinokime apie MPU6050 jutiklį ir lankstų jutiklį.
MPU6050 giroskopinis ir akselerometro jutiklis
MPU6050 yra pagrįstas mikromechaninių sistemų (MEMS) technologija. Šis jutiklis turi 3 ašių akselerometrą, 3 ašių giroskopą ir įmontuotą temperatūros jutiklį. Jis gali būti naudojamas matuoti tokius parametrus kaip pagreitis, greitis, orientacija, poslinkis ir kt. Mes anksčiau susiejome MPU6050 su „Arduino“ ir „Raspberry pi“ ir taip pat sukūrėme keletą projektų, naudodami jį kaip „Self Balancing robot“, „Arduino Digital Protractor“ ir „Arduino Inclinometer“.
MPU6050 jutiklio savybės:
- Ryšys: I2C protokolas su konfigūruojamu I2C adresu
- Įvesties maitinimo šaltinis: 3-5 V
- Integruotas 16 bitų ADC užtikrina aukštą tikslumą
- Integruotas DMP suteikia didelę skaičiavimo galią
- Galima naudoti sąsajai su kitais I2C įrenginiais, pavyzdžiui, su magnetometru
- Įmontuotas temperatūros jutiklis
Išsami informacija apie MPU6050:
Smeigtukas | Naudojimas |
Vcc | Suteikia modulio maitinimą, gali būti nuo + 3 V iki + 5 V. Paprastai naudojamas + 5V |
Žemė | Prijungtas prie sistemos žemės |
Serijinis laikrodis (SCL) | Naudojamas I2C ryšio laikrodžio impulsui teikti |
Serijos duomenys (SDA) | Naudojamas duomenims perduoti per I2C ryšį |
Pagalbiniai serijiniai duomenys (XDA) | Galima naudoti sąsajai su kitais I2C moduliais su MPU6050 |
Papildomas serijinis laikrodis (XCL) | Galima naudoti sąsajai su kitais I2C moduliais su MPU6050 |
AD0 | Jei vienas MCU naudojamas daugiau nei vienas MPU6050, šį kaištį galima naudoti norint pakeisti adresą |
Nutraukti (INT) | Pertraukimo kaištis, nurodantis, kad yra duomenų, kuriuos MCU gali skaityti |
„Flex Sensor“
Lankstieji jutikliai yra ne kas kita, kaip kintamasis rezistorius. Lankstaus jutiklio varža keičiasi, kai jutiklis yra sulenktas. Paprastai jie yra dviejų dydžių - 2,2 colio ir 4,5 colio.
Kodėl savo projekte naudojame lanksčius jutiklius?
Šioje gestais valdomoje robotinėje rankoje lankstus jutiklis naudojamas valdyti robotų rankos griebtuvą. Sulenkus rankos pirštinės lankstumo jutiklį, prie griebtuvo pritvirtintas servovariklis sukasi ir griebtuvas atsidaro.
„Flex“ jutikliai gali būti naudingi daugelyje programų, todėl mes sukūrėme keletą projektų, kuriuose naudojami „Flex“ jutikliai, pavyzdžiui, žaidimų valdiklis, „Tone“ generatorius ir kt.
Pasiruošimas 3D spausdintam robotui ARM:
Šioje instrukcijoje naudojama 3D spausdinta robotų ranka buvo sukurta vadovaujantis „ EEZYbotARM“ pateiktu dizainu, kuris yra prieinamas „Thingiverse“. Išsami 3D spausdintos robotizuotos rankos ir surinkimo detalės su vaizdu gamybos procedūra pateikiama „Thingiverse“ nuorodoje, kuri bendrinama aukščiau.
Viršuje yra mano 3D spausdintos roboto rankos vaizdas, surinkus jį su 4 „Servo Motors“.
Būtini komponentai:
- „Arduino Nano“
- „Flex Sensor“
- 10k rezistorius
- MPU6050
- Rankinės pirštinės
- Laidų sujungimas
- Bandomoji Lenta
Grandinės schema:
Šiame paveikslėlyje parodytos „ Arduino“ valdomos gestų valdomos robotų rankos grandinės jungtys .
Grandinės jungtis tarp MPU6050 ir „Arduino Nano“:
MPU6050 |
„Arduino Nano“ |
VCC |
+ 5 V |
BND |
BND |
SDA |
A4 |
SCL |
A5 |
Grandinės jungtis tarp servo variklių ir „Arduino Nano“:
„Arduino Nano“ |
SERVO VARIKLIS |
Maitinimo adapteris |
D2 |
Servo 1 oranžinė (PWM kaištis) |
- |
D3 |
Servo 2 apelsinas (PWM kaištis) |
- |
D4 |
Servo 3 apelsinas (PWM kaištis) |
- |
D5 |
Servo 4 apelsinas (PWM kaištis) |
- |
BND |
Servo 1,2,3,4 rudas (BND kaištis) |
BND |
- |
Servo 1,2,3,4 Raudonas (+ 5 V kaištis) |
+ 5 V |
Flex jutiklis yra du kaiščius. Jame nėra poliarizuotų gnybtų. Taigi kaištis vienas P1 yra prijungtas prie „Arduino Nano“ analoginio kaiščio A0 su 10 k traukimo rezistoriumi, o du kaiščiai P2 yra įžeminti prie „Arduino“.
MPU6050 ir „Flex Sensor“ tvirtinimas prie pirštinių
Ant rankinės pirštinės pritvirtinome „MPU6050“ ir „Flex Sensor“. Čia laidinė jungtis naudojama norint prijungti pirštinę ir robotizuotą ranką, tačiau ją galima padaryti belaidžiu ryšiu naudojant RF arba „Bluetooth“ ryšį.
Po kiekvieno prisijungimo galutinis gestais valdomos robotų rankos nustatymas atrodo kaip žemiau pateiktas vaizdas:
„Arduino Nano“ programavimas robotų rankai
Kaip įprasta, šios instrukcijos pabaigoje pateikiamas visas kodas kartu su veikiančiu vaizdo įrašu. Čia paaiškintos kelios svarbios kodo eilutės.
1. Pirmiausia įtraukite reikiamus bibliotekos failus. „Wire.h“ biblioteka naudojama I2C ryšiui tarp „Arduino Nano“ ir „MPU6050“ ir „ servo.h “ valdyti servo variklį.
# įtraukti
2. Toliau deklaruojami klasės servo objektai. Naudojant keturis servovariklius, sukuriami keturi objektai, tokie kaip servo_1, servo_2, servo_3, servo_4.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Tada nurodomas MPU6050 I2C adresas ir kintamieji, kurie bus naudojami.
const int MPU_addr = 0x68; // MPU6050 I2C Adresas int16_t ašis_X, ašis_Y, ašis_Z; int minVal = 265; int maxVal = 402; dvigubas x; dvigubas y; dvigubo Z;
4. Toliau tuščioje sąrankoje nuosekliam ryšiui nustatomas 9600 perdavimo greitis.
Serijos pradžia (9600);
„I2C“ ryšys tarp „Arduino Nano“ ir „MPU6050“ yra užmegztas:
Viela.prasideda (); // Inicijuoti „ I2C“ ryšio laidą.beginTransmission (MPU_addr); // Pradėti ryšį su MPU6050 Wire.write (0x6B); // Rašo registruoti 6B Wire.write (0); // Įrašo 0 į 6B registrą, kad iš naujo nustatytumėte „ Wire.endTransmission“ (tiesa); // Baigia I2C perdavimą
Be to, servovariklio jungtims yra apibrėžti keturi PWM kaiščiai.
servo_1.attach (2); // Pirmyn / Reversas_Motorinis servo_2.attach (3); // Aukštyn / Žemyn_variklio servo_3.tvirtinti (4); // Gripper_Motor servo_4.attach (5); // Kairysis / Dešinis_variklis
5. Toliau naudodamiesi „ void loop loop“ funkcija, vėl užmegzkite I2C ryšį tarp MPU6050 ir „Arduino Nano“, tada pradėkite skaityti X, Y, Z ašies duomenis iš MPU6050 registro ir saugokite juos atitinkamuose kintamuosiuose.
„Wire.beginTransmission“ (MPU_addr); Wire.write (0x3B); // Pradėkite nuo regsiterio 0x3B Wire.endTransmission (false); „Wire.requestFrom“ (MPU_addr, 14, tiesa); // Skaityti 14 registrų ašis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Po to priskirkite MPU6050 jutiklio ašių duomenų mažiausias ir maksimalias vertes nuo -90 iki 90.
int xAng = žemėlapis (ašis_X, minVal, maxVal, -90,90); int yAng = žemėlapis (ašis_Y, minVal, maxVal, -90,90); int zAng = žemėlapis (ašis_Z, minVal, maxVal, -90,90);
Tada naudokite šią formulę, kad apskaičiuotumėte x, y, z reikšmes nuo 0 iki 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);
Tada perskaitykite lankstaus jutiklio analoginius išvesties duomenis „Arduino Nano“ A0 kaištyje ir pagal skaitmeninę lankstumo jutiklio vertę nustatykite griebtuvo servo kampą. Taigi, jei lankstaus jutiklio duomenys yra didesni nei 750, griebtuvo servo variklio kampas yra 0 laipsnių, o jei mažiau nei 750 - 180 laipsnių.
int griebtuvas; int flex_sensorip = analogRead (A0); if (flex_sensorip> 750) { griebtuvas = 0; } kitas { griebtuvas = 180; } servo_3.write (griebtuvas);
Tada MPU6050 judėjimas X ašyje nuo 0 iki 60 atvaizduojamas pagal 0–90 laipsnių ribas servovariklio judėjimui į priekį / atgal robotui.
if (x> = 0 && x <= 60) { int mov1 = žemėlapis (x, 0,60,0,90); Serial.print („Judėjimas F / R =“); Serial.print (mov1); Serijinis.println ((char) 176); servo_1.write (mov1); }
„ MPU6050 “ judėjimas X ašyje nuo 250 iki 360 yra nustatytas servo variklio „AUKŠTYN / ŽEMYN“ robotų rankos 0–90 laipsnių atžvilgiu.
else if (x> = 300 && x <= 360) { int mov2 = žemėlapis (x, 360,250,0,90); Serial.print („Judėjimas aukštyn / žemyn =“); Serijinis.printas (mov2); Serijinis.println ((char) 176); servo_2.write (mov2); }
MPU6050 judėjimas Y ašyje nuo 0 iki 60 atvaizduojamas 90–180 laipsnių kampu servovariklio kairiajam robotų rankos judesiui.
if (y> = 0 && y <= 60) { int mov3 = žemėlapis (y, 0,60,90,180); Serial.print ("Judėjimas kairėje ="); Serijinis.printas (mov3); Serijinis.println ((char) 176); servo_4.write (mov3); }
MPU6050 judėjimas Y ašyje nuo 300 iki 360 atvaizduojamas 0–90 laipsnių kampu servo variklio dešiniajam robotų rankos judėjimui.
else if (y> = 300 && y <= 360) { int mov3 = žemėlapis (y, 360,300,90,0); Serial.print („Judėjimas dešinėje =“); Serijinis.printas (mov3); Serijinis.println ((char) 176); servo_4.write (mov3); }
Su gestais valdomos robotinės rankos naudojimas naudojant „Arduino“
Galiausiai įkelkite kodą į „Arduino Nano“ ir dėvėkite rankinę pirštinę, pritvirtintą prie „MPU6050 & Flex Sensor“.
1. Dabar perkelkite ranką žemyn, kad robotų ranka judėtų į priekį, ir judėkite aukštyn, kad robotų ranka judėtų aukštyn.
2. Tada pakreipkite ranką į kairę arba į dešinę, kad robotų ranką pasuktumėte į kairę arba į dešinę.
3. Sulenkite rankinio pirštinės pirštu pritvirtintą lankstųjį kabelį, kad atidarytumėte griebtuvą, tada atleiskite, kad uždarytumėte.
Visas darbas parodytas toliau pateiktame vaizdo įraše.