- MPU6050 žiroskopiskais un akselerometra sensors
- Elastīgais sensors
- 3D drukātā robotizētā arma sagatavošana:
- Nepieciešamās sastāvdaļas:
- Ķēdes shēma:
- MPU6050 un elastīgā sensora piestiprināšana cimdiem
- Arduino Nano programmēšana robotizētajai rokai
- Ar žestu kontrolētas robotizētās rokas darbs, izmantojot Arduino
Robotu ieroči ir viens no aizraujošākajiem inženiertehniskajiem izstrādājumiem, un vienmēr ir aizraujoši skatīties, kā šīs lietas sasveras un kustas, lai sarežģītas lietas paveiktu tāpat kā cilvēka roka. Šīs robotizētās rokas parasti var atrast montāžas līnijas nozarēs, kas veic intensīvu mehānisku darbu, piemēram, metināšanu, urbšanu, krāsošanu utt., Nesen uzlabotas robotizētas rokas ar augstu precizitāti tiek izstrādātas arī sarežģītu ķirurģisku operāciju veikšanai. Iepriekš mēs 3D izdrukājām robotu roku un izveidojām DIY Pick and Place robotu roku, izmantojot ARM7 mikrokontrolleru. Mēs atkal izmantosim to pašu 3D drukāto robotu roku, lai izveidotu ar roku ar žestu kontrolētu robotu ARM, izmantojot Arduino Nano, MPU6050 žiroskopu un elastīgo sensoru.
Šo 3D drukāto robotu roku stāvokli kontrolē ar rokas cimdu, kas piestiprināts ar MPU6050 žiroskopu un elastīgo sensoru. Flex sensoru izmanto, lai kontrolētu Robotic Arm satvērēja servo, un MPU6050 izmanto robota kustībai X un Y asīs. Ja jums nav printera, varat arī uzbūvēt roku ar vienkāršu kartonu, kā mēs to izveidojām mūsu Arduino robotu roku projektam. Lai iegūtu iedvesmu, varat atsaukties arī uz ierakstīšanas un atskaņošanas robotu roku, kuru mēs iepriekš izveidojām, izmantojot Arduino.
Pirms iedziļināties detaļās, vispirms uzzināsim par MPU6050 sensoru un elastīgo sensoru.
MPU6050 žiroskopiskais un akselerometra sensors
MPU6050 pamatā ir mikromehānisko sistēmu (MEMS) tehnoloģija. Šim sensoram ir 3 asu akselerometrs, 3 asu žiroskops un iebūvēts temperatūras sensors. To var izmantot, lai izmērītu tādus parametrus kā paātrinājums, ātrums, orientācija, pārvietošanās utt. Mēs jau iepriekš esam saskarnē MPU6050 ar Arduino un Raspberry pi, kā arī izveidojām dažus projektus, piemēram, pašbalansējošais robots, Arduino Digital Protractor un Arduino Inclinometer.
MPU6050 sensora funkcijas:
- Komunikācija: I2C protokols ar konfigurējamu I2C adresi
- Ievades barošanas avots: 3-5V
- Iebūvētais 16 bitu ADC nodrošina augstu precizitāti
- Iebūvētais DMP nodrošina lielu skaitļošanas jaudu
- Var izmantot saskarnei ar citām I2C ierīcēm, piemēram, magnetometru
- Iebūvēts temperatūras sensors
MPU6050 PIN-Out informācija:
Piespraust | Lietošana |
Vcc | Nodrošina moduļa strāvu, var būt no + 3V līdz + 5V. Parasti tiek izmantots + 5V |
Zeme | Savienots ar sistēmas zemējumu |
Sērijveida pulkstenis (SCL) | Izmanto pulksteņa impulsa nodrošināšanai I2C sakariem |
Sērijas dati (SDA) | Izmanto datu pārsūtīšanai, izmantojot I2C sakarus |
Sērijas papilddati (XDA) | Var izmantot citu I2C moduļu saskarnei ar MPU6050 |
Sērijas papildpulkstenis (XCL) | Var izmantot citu I2C moduļu saskarnei ar MPU6050 |
AD0 | Ja vienā MCU tiek izmantots vairāk nekā viens MPU6050, šo tapu var izmantot, lai mainītu adresi |
Pārtraukt (INT) | Pārtrauciet piespraudi, lai norādītu, ka dati ir pieejami MCU lasīšanai |
Elastīgais sensors
Flex sensori ir nekas cits kā mainīgs rezistors. Elastīgā sensora pretestība mainās, kad sensors ir saliekts. Parasti tie ir pieejami divos izmēros - 2,2 collas un 4,5 collas.
Kāpēc mēs savā projektā izmantojam elastīgos sensorus?
Šajā ar žestu kontrolētajā robotu rokā elastīgo sensoru izmanto, lai kontrolētu robotizētās rokas satvērēju. Kad rokas cimda elastīgais sensors ir saliekts, pie satvērēja piestiprinātais servomotors pagriežas un satvērējs atveras.
Flex sensori var būt noderīgi daudzās lietojumprogrammās, un mēs esam izveidojuši dažus projektus, izmantojot Flex sensoru, piemēram, spēļu kontrolieri, toņu ģeneratoru utt.
3D drukātā robotizētā arma sagatavošana:
Šajā apmācībā izmantotā 3D drukātā robotizētā roka tika izgatavota, ievērojot EEZYbotARM piedāvāto dizainu, kas ir pieejams Thingiverse. Pilnīga 3D drukātās robotizētās rokas izgatavošanas procedūra un montāžas detaļa ar video ir atrodama iepriekšminētajā saitē Thingiverse.
Augšpusē ir redzams manas 3D drukātās robotizētās rokas attēls pēc montāžas ar 4 servomotoriem.
Nepieciešamās sastāvdaļas:
- Arduino Nano
- Elastīgais sensors
- 10k pretestība
- MPU6050
- Roku cimdi
- Vadu savienošana
- Maizes dēlis
Ķēdes shēma:
Šajā attēlā parādīti ķēdes savienojumi Arduino balstītai žestu kontrolētai robotu rokai.
Ķēdes savienojums starp MPU6050 un Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Kontūras savienojums starp servomotoriem un Arduino Nano:
Arduino Nano |
SERVO MOTORS |
Strāvas adapteris |
D2 |
Servo 1 oranžs (PWM tapa) |
- |
D3 |
Servo 2 oranžs (PWM tapa) |
- |
D4 |
Servo 3 oranžs (PWM tapa) |
- |
D5 |
Servo 4 oranžs (PWM tapa) |
- |
GND |
Servo 1,2,3,4 Brūns (GND tapa) |
GND |
- |
Servo 1,2,3,4 Sarkans (+ 5 V tapa) |
+ 5V |
Flex sensors satur divus pins. Tajā nav polarizētu termināļu. Tātad viena P1 tapa ir savienota ar Arduino Nano analogo tapu A0 ar pievilkšanas rezistoru 10 k, un divu tapu P2 iezemējums ir Arduino.
MPU6050 un elastīgā sensora piestiprināšana cimdiem
Mēs esam uzstādījuši MPU6050 un Flex Sensor uz rokas cimda. Šeit cimdu un robotu roku savienošanai tiek izmantots vadu savienojums, taču to var padarīt bezvadu, izmantojot RF savienojumu vai Bluetooth savienojumu.
Pēc katra savienojuma ar žestu vadāmās robotizētās rokas galīgā iestatīšana izskatās šādi:
Arduino Nano programmēšana robotizētajai rokai
Kā parasti, pilns kods kopā ar darba video ir norādīts šīs apmācības beigās. Šeit ir izskaidrotas dažas svarīgas koda rindas.
1. Pirmkārt, iekļaujiet nepieciešamos bibliotēkas failus. Wire.h bibliotēka tiek izmantota I2C saziņai starp Arduino Nano un MPU6050 un servo.h, lai kontrolētu servomotoru.
# iekļaut
2. Pēc tam tiek deklarēti klases servo objekti. Kad mēs izmantojam četrus servomotorus, tiek izveidoti četri objekti, piemēram, servo_1, servo_2, servo_3, servo_4.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Pēc tam tiek deklarēta MPU6050 I2C adrese un izmantojamie mainīgie.
const int MPU_addr = 0x68; // MPU6050 I2C Adrese int16_t ass_X, ass_Y, ass_Z; int minVal = 265; int maxVal = 402; dubultā x; dubultā y; double z;
4. Pēc tam tukšajā iestatījumā sērijveida sakariem tiek iestatīts 9600 pārraides ātrums.
Sērijas sākums (9600);
Ir izveidota I2C komunikācija starp Arduino Nano un MPU6050:
Wire.begin (); // Inicializēt I2C sakaru vadu.beginTransmission (MPU_addr); // Sākt saziņu ar MPU6050 Wire.write (0x6B); // Raksta, lai reģistrētu 6B Wire.write (0); // Ieraksta 0 6B reģistrā, lai atiestatītu Wire.endTransmission (true); // Beidz I2C pārraidi
Servomotora savienojumiem ir noteiktas arī četras PWM tapas.
servo_1.attach (2); // Pārsūtīt / Reverss_Motors servo_2.attach (3); // Uz augšu / Uz leju_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Kreisais / Labais_Motors
5. Pēc tam funkcijā void loop atkal izveidojiet I2C savienojumu starp MPU6050 un Arduino Nano un pēc tam sāciet lasīt X, Y, Z-Axis datus no MPU6050 reģistra un glabājiet tos attiecīgajos mainīgajos.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Sāciet ar regsiter 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, taisnība); // Izlasiet 14 reģistrus ass_X = Wire.read () << 8-Wire.read (); ass_Y = Wire.read () << 8-Wire.read (); ass_Z = Wire.read () << 8-Wire.read ();
Pēc tam kartējiet ass datu minimālo un maksimālo vērtību no MPU6050 sensora diapazonā no -90 līdz 90.
int xAng = karte (ass_X, minVal, maxVal, -90,90); int yAng = karte (ass_Y, minVal, maxVal, -90,90); int zAng = karte (ass_Z, minVal, maxVal, -90,90);
Pēc tam izmantojiet šo formulu, lai aprēķinātu x, y, z vērtības no 0 līdz 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);
Pēc tam izlasiet elastīgā sensora analogās izejas datus pie Arduino Nano A0 tapas un atbilstoši elastīgā sensora digitālajai vērtībai iestatiet satvērēja servo leņķi. Tātad, ja elastīgā sensora dati ir lielāki par 750, satvērēja servomotora leņķis ir 0 grādu un ja mazāks par 750 tas ir 180 grādi.
int satvērējs; int flex_sensorip = analogRead (A0); ja (flex_sensorip> 750) { satvērējs = 0; } cits { satvērējs = 180; } servo_3.write (satvērējs);
Tad MPU6050 kustība uz X ass no 0 līdz 60 tiek kartēta 0 līdz 90 grādu izteiksmē servomotora robotizētās rokas kustībai uz priekšu / atpakaļ.
ja (x> = 0 && x <= 60) { int mov1 = karte (x, 0,60,0,90); Serial.print ("Kustība F / R ="); Sērijas.druka (mov1); Seriālais.println ((char) 176); servo_1.write (mov1); }
Un kustība MPU6050 uz X-ass no 250 līdz 360, ir kartēts ziņā 0 līdz 90 grādiem, lai servo motoru ir UP / DOWN kustību Robotikas rokas.
else if (x> = 300 && x <= 360) { int mov2 = karte (x, 360,250,0,90); Serial.print ("Kustība augšup / lejup ="); Sērijas.druka (mov2); Seriālais.println ((char) 176); servo_2.write (mov2); }
MPU6050 kustība uz Y ass no 0 līdz 60 tiek attēlota 90 līdz 180 grādu izteiksmē servomotora kreisajai robota kustībai.
ja (y> = 0 && y <= 60) { int mov3 = karte (y, 0,60,90,180); Serial.print ("Kustība pa kreisi ="); Sērijas.druka (mov3); Seriālais.println ((char) 176); servo_4.write (mov3); }
MPU6050 kustība Y asī no 300 līdz 360 tiek attēlota 0 līdz 90 grādu izteiksmē servomotora robotizētās rokas labajai kustībai.
cits if (y> = 300 && y <= 360) { int mov3 = karte (y, 360,300,90,0); Serial.print ("Kustība pa labi ="); Sērijas.druka (mov3); Seriālais.println ((char) 176); servo_4.write (mov3); }
Ar žestu kontrolētas robotizētās rokas darbs, izmantojot Arduino
Visbeidzot, augšupielādējiet kodu vietnē Arduino Nano un valkājiet rokas cimdu, kas piestiprināts ar MPU6050 & Flex Sensor.
1. Tagad pārvietojiet roku uz leju, lai pārvietotu robotu uz priekšu, un uz augšu, lai pārvietotu robotu uz augšu.
2. Tad nolieciet roku pa kreisi vai pa labi, lai robotisko roku pagrieztu pa kreisi vai pa labi.
3. Salieciet ar rokas cimda pirkstu piestiprināto elastīgo kabeli, lai atvērtu satvērēju, un pēc tam atlaidiet, lai aizvērtu.
Pilnīga darbība ir parādīta zemāk redzamajā video.