- Sensor giroscòpic i acceleròmetre MPU6050
- Sensor flexible
- Preparació del braç robòtic imprès en 3D:
- Components necessaris:
- Esquema de connexions:
- Muntatge del sensor MPU6050 i Flex als guants
- Programació Arduino Nano per a Robotic Arm
- Funcionament del braç robòtic controlat per gestos mitjançant Arduino
Els braços robòtics són una de les creacions d’enginyeria fascinants i sempre és fascinant veure com aquestes coses s’inclinen i es mouen per fer coses complexes tal com ho faria un braç humà. Aquests braços robòtics es poden trobar habitualment en indústries de la cadena de muntatge que realitzen treballs mecànics intensos com soldadura, perforació, pintura, etc. Anteriorment, vam imprimir en 3D un braç robòtic i vam construir un braç robòtic Pick and Place bricolatge mitjançant el microcontrolador ARM7. Tornarem a utilitzar el mateix braç robòtic imprès en 3D per fer un braç robòtic controlat amb gestos manuals mitjançant Arduino Nano, giroscopi MPU6050 i sensor de flexió.
Aquesta posició del braç robòtic imprès en 3D es controla a través d’un guant manual que s’uneix amb un giroscopi MPU6050 i un sensor de flexió. El sensor Flex s’utilitza per controlar la pinça servo de Robotic Arm i el MPU6050 s’utilitza per al moviment de robòtica en els eixos X i Y. Si no teniu cap impressora, també podeu construir el vostre braç amb cartró senzill, tal com hem creat per al nostre projecte Arduino Robotic Arm. Per inspirar-vos, també podeu consultar el braç robòtic Record and Play que hem creat anteriorment amb Arduino.
Abans d’entrar en els detalls, primer, anem a conèixer el sensor MPU6050 i el sensor de flexió.
Sensor giroscòpic i acceleròmetre MPU6050

MPU6050 es basa en la tecnologia de sistemes micro-mecànics (MEMS). Aquest sensor té un acceleròmetre de 3 eixos, un giroscopi de 3 eixos i un sensor de temperatura incorporat. Es pot utilitzar per mesurar paràmetres com l’acceleració, la velocitat, l’orientació, el desplaçament, etc. Anteriorment hem interfacat MPU6050 amb Arduino i Raspberry pi i també hem construït uns quants projectes utilitzant-lo com: robot d’equilibri automàtic, transportador digital Arduino i inclinòmetre Arduino.
Funcions del sensor MPU6050:
- Comunicació: protocol I2C amb adreça I2C configurable
- Font d'alimentació d'entrada: 3-5V
- L’ADC de 16 bits incorporat proporciona una alta precisió
- El DMP incorporat proporciona una gran potència de càlcul
- Es pot utilitzar per relacionar-se amb altres dispositius I2C com un magnetòmetre
- Sensor de temperatura incorporat
Detalls del pin-out de MPU6050:
| Pin | Ús |
| Vcc | Proporciona energia per al mòdul, pot ser de + 3V a + 5V. Normalment s’utilitza + 5V |
| Terra | Connectat a terra del sistema |
| Rellotge en sèrie (SCL) | S'utilitza per proporcionar pols de rellotge per a la comunicació I2C |
| Dades de sèrie (SDA) | S’utilitza per transferir dades a través de la comunicació I2C |
| Dades de sèrie auxiliars (XDA) | Es pot utilitzar per connectar altres mòduls I2C amb MPU6050 |
| Rellotge sèrie auxiliar (XCL) | Es pot utilitzar per connectar altres mòduls I2C amb MPU6050 |
| AD0 | Si s'utilitza més d'un MPU6050 amb una sola MCU, aquest pin es pot utilitzar per variar l'adreça |
| Interrompre (INT) | Pin d'interrupció per indicar que hi ha dades disponibles per llegir-les de la MCU |
Sensor flexible

Els Sensors Flex no són res més que una resistència variable. La resistència del sensor de flexió canvia quan el sensor està doblegat. Normalment estan disponibles en dues mides de 2,2 polzades i 4,5 polzades.
Per què fem servir sensors flex en el nostre projecte?
En aquest braç robòtic controlat per gestos, s’utilitza un sensor de flexió per controlar la pinça del braç robòtic. Quan el sensor de flexió del guant de mà està doblegat, el servomotor connectat a la pinça gira i la pinça s’obre.

Els sensors Flex poden ser útils en moltes aplicacions i hem construït pocs projectes amb sensor Flex com un controlador de jocs, un generador de tons, etc.
Preparació del braç robòtic imprès en 3D:

El braç robòtic imprès en 3D utilitzat en aquest tutorial es va fer seguint el disseny donat per EEZYbotARM que està disponible al Thingiverse. El procediment complet per fer el braç robòtic imprès en 3D i el detall del muntatge amb vídeo es troba a l'enllaç Thingiverse, que es comparteix més amunt.
A sobre hi ha la imatge del meu braç robòtic imprès en 3D després de muntar-lo amb 4 servomotors.
Components necessaris:
- Arduino Nano
- Sensor flexible
- Resistència de 10k
- MPU6050
- Guants de mà
- Connexió de cables
- Taula de pa
Esquema de connexions:
La següent imatge mostra les connexions del circuit per a un braç robòtic basat en gestos basat en Arduino .

Connexió del circuit entre MPU6050 i Arduino Nano:
|
MPU6050 |
Arduino Nano |
|
VCC |
+ 5V |
|
GND |
GND |
|
SDA |
A4 |
|
SCL |
A5 |
Connexió de circuits entre servomotors i Arduino Nano:
|
Arduino Nano |
SERVO MOTOR |
Adaptador de corrent |
|
D2 |
Servo 1 taronja (pin PWM) |
- |
|
D3 |
Servo 2 taronja (Pin PWM) |
- |
|
D4 |
Servo 3 taronja (Pin PWM) |
- |
|
D5 |
Servo 4 taronja (Pin PWM) |
- |
|
GND |
Servo 1,2,3,4 Marró (Pin GND) |
GND |
|
- |
Servo 1,2,3,4 Vermell (+ Pin de 5 V) |
+ 5V |
Un sensor de flexió conté dos pins. No conté terminals polaritzats. Així, el pin 1 P1 està connectat al pin analògic A0 d’Arduino Nano amb una resistència de tracció de 10 k i el pin 2 P2 està connectat a terra a Arduino.
Muntatge del sensor MPU6050 i Flex als guants
Hem muntat el MPU6050 i el sensor Flex en un guant de mà. Aquí s’utilitza una connexió per cable per connectar el guant i el braç robòtic, però es pot fer sense fils mitjançant una connexió RF o una connexió Bluetooth.
Després de cada connexió, la configuració final del braç robòtic controlat per gestos és la següent:

Programació Arduino Nano per a Robotic Arm
Com és habitual, al final d’aquest tutorial es dóna un codi complet juntament amb un vídeo de treball. Aquí s'expliquen algunes línies de codi importants.
1. Primer, incloeu els fitxers de biblioteca necessaris. La biblioteca Wire.h s’utilitza per a la comunicació I2C entre Arduino Nano i MPU6050 i servo.h per controlar el servomotor.
#incloure
2. A continuació, es declaren els objectes de la classe servo. En utilitzar quatre servomotors, es creen quatre objectes com servo_1, servo_2, servo_3, servo_4.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. A continuació, es declara l'adreça I2C de MPU6050 i les variables que s'han d'utilitzar.
const int MPU_addr = 0x68; // MPU6050 Adreça I2C int16_t eix_X, eix_Y, eix_Z; int minVal = 265; int maxVal = 402; doble x; doble y; doble z;
4. A continuació, a la configuració del buit , s'estableix una velocitat de transmissió de 9600 per a la comunicació sèrie.
Serial.begin (9600);
I s'estableix la comunicació I2C entre Arduino Nano i MPU6050:
Wire.begin (); // Inicieu la comunicació I2C Wire.beginTransmission (MPU_addr); // Inicieu la comunicació amb MPU6050 Wire.write (0x6B); // Escriu al registre 6B Wire.write (0); // Escriu 0 a 6B Registre per restablir Wire.endTransmission (true); // Finalitza la transmissió I2C
A més, es defineixen quatre pins PWM per a les connexions del servomotor.
servo_1.attach (2); // Forward / Reverse_Motor servo_2.attach (3); // Up / Down_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Motor esquerra / dreta
5. A continuació, a la funció de bucle buit , torneu a establir la connexió I2C entre el MPU6050 i Arduino Nano i, a continuació, comenceu a llegir les dades de l'eix X, Y, Z del registre del MPU6050 i emmagatzemeu-les a les variables corresponents.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Comenceu amb regsiter 0x3B Wire.endTransmission (fals); Wire.requestFrom (MPU_addr, 14, cert); // Llegiu 14 registres axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Després, mapeu el valor mínim i màxim de les dades de l'eix del sensor MPU6050 en un interval d'entre -90 i 90.
int xAng = mapa (eix_X, minVal, maxVal, -90,90); int yAng = mapa (eix_Y, minVal, maxVal, -90,90); int zAng = mapa (eix_Z, minVal, maxVal, -90,90);
A continuació, utilitzeu la fórmula següent per calcular els valors x, y, z en termes de 0 a 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);
A continuació, llegiu les dades de sortida analògica del sensor de flexió al pin A0 de l’Arduino Nano i, segons el valor digital del sensor de flexió, configureu l’angle de servo de la pinça. Per tant, si les dades del sensor de flexió són superiors a 750, l’angle del servomotor de la pinça és de 0 graus i, si és inferior a 750, és de 180 graus.
pinça int; int flex_sensorip = analogRead (A0); if (flex_sensorip> 750) { gripper = 0; } else { gripper = 180; } servo_3.write (gripper);
A continuació, el moviment de MPU6050 a l'eix X de 0 a 60 es mapeja en termes de 0 a 90 graus per al moviment endavant / invers del servomotor al braç robot.
if (x> = 0 && x <= 60) { int mov1 = map (x, 0,60,0,90); Serial.print ("Moviment en F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
I el moviment del MPU6050 a l'eix X de 250 a 360 es mapeja en termes de 0 a 90 graus per al braç robotitzat del moviment del servomotor AMUNT / BAIX.
else if (x> = 300 && x <= 360) { int mov2 = map (x, 360.250,0,90); Serial.print ("Moviment cap amunt / cap avall ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
El moviment del MPU6050 a l'eix Y de 0 a 60 es mapeja en termes de 90 a 180 graus per al moviment esquerre del braç robot del servomotor.
if (y> = 0 && y <= 60) { int mov3 = map (y, 0,60,90,180); Serial.print ("Moviment a l'esquerra ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
El moviment del MPU6050 a l'eix Y de 300 a 360 es mapeja en termes de 0 a 90 graus per al moviment dret del braç robot del servomotor.
else if (y> = 300 && y <= 360) { int mov3 = map (y, 360,300,90,0); Serial.print ("Moviment cap a la dreta ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Funcionament del braç robòtic controlat per gestos mitjançant Arduino
Finalment, pengeu el codi a Arduino Nano i utilitzeu el guant de mà muntat amb el MPU6050 i el sensor Flex.
1. Ara moveu la mà cap avall per moure el braç robòtic cap endavant i pugeu cap amunt per moure el braç robotitzat cap amunt.
2. A continuació, inclineu la mà cap a l'esquerra o la dreta per girar el braç robotitzat cap a l'esquerra o cap a la dreta.
3. Doblegueu el cable flexible connectat amb el dit del guant manual per obrir la pinça i deixeu-lo anar per tancar-lo.
El funcionament complet es mostra al vídeo que es mostra a continuació.
