- Sensore giroscopico e accelerometro MPU6050
- Sensore di flessione
- Preparare il braccio robotico stampato in 3D:
- Componenti richiesti:
- Schema elettrico:
- Montaggio di MPU6050 e sensore di flessione sui guanti
- Programmazione di Arduino Nano per braccio robotico
- Funzionamento del braccio robotico controllato tramite gesti utilizzando Arduino
I bracci robotici sono una delle affascinanti creazioni ingegneristiche ed è sempre affascinante osservare queste cose inclinarsi e spostarsi per ottenere cose complesse proprio come farebbe un braccio umano. Questi bracci robotici possono essere comunemente trovati nelle industrie presso la linea di assemblaggio che eseguono lavori meccanici intensi come saldatura, perforazione, verniciatura, ecc., Sono inoltre in fase di sviluppo bracci robotici di recente avanzata con elevata precisione per eseguire operazioni chirurgiche complesse. In precedenza abbiamo stampato in 3D un braccio robotico e costruito un braccio robotico Pick and Place fai-da-te utilizzando il microcontrollore ARM7. Useremo di nuovo lo stesso braccio robotico stampato in 3D per creare un ARM robotico controllato da gesti della mano utilizzando Arduino Nano, giroscopio MPU6050 e sensore di flessione.
Questa posizione del braccio robotico stampata in 3D è controllata tramite un guanto a mano fissato con un giroscopio MPU6050 e un sensore di flessione. Il sensore Flex viene utilizzato per controllare il servo della pinza del braccio robotico e l'MPU6050 viene utilizzato per il movimento del robot negli assi X e Y. Se non hai una stampante, puoi anche costruire il tuo braccio con un semplice cartone come abbiamo costruito per il nostro progetto di braccio robotico Arduino. Per ispirazione, puoi anche fare riferimento al Braccio robotico Registra e riproduci che abbiamo costruito in precedenza utilizzando Arduino.
Prima di entrare nei dettagli, per prima cosa, impariamo a conoscere il sensore MPU6050 e il sensore di flessione.
Sensore giroscopico e accelerometro MPU6050
MPU6050 si basa sulla tecnologia MEMS (Micro-Mechanical Systems). Questo sensore ha un accelerometro a 3 assi, un giroscopio a 3 assi e un sensore di temperatura integrato. Può essere utilizzato per misurare parametri come Accelerazione, Velocità, Orientamento, Spostamento, ecc. In precedenza abbiamo interfacciato MPU6050 con Arduino e Raspberry pi e abbiamo anche costruito alcuni progetti che lo utilizzano come: Robot di bilanciamento automatico, Goniometro digitale Arduino e Inclinometro Arduino.
Caratteristiche nel sensore MPU6050:
- Comunicazione: protocollo I2C con indirizzo I2C configurabile
- Alimentazione in ingresso: 3-5 V.
- L'ADC a 16 bit integrato offre un'elevata precisione
- DMP integrato fornisce un'elevata potenza di calcolo
- Può essere utilizzato per interfacciarsi con altri dispositivi I2C come un magnetometro
- Sensore di temperatura integrato
Dettagli pin-out di MPU6050:
Pin | Utilizzo |
Vcc | Fornisce alimentazione al modulo, può essere da + 3V a + 5V. In genere viene utilizzato + 5V |
Terra | Collegato a terra del sistema |
Orologio seriale (SCL) | Utilizzato per fornire impulsi di clock per la comunicazione I2C |
Dati seriali (SDA) | Utilizzato per il trasferimento dei dati tramite la comunicazione I2C |
Dati seriali ausiliari (XDA) | Può essere utilizzato per interfacciare altri moduli I2C con MPU6050 |
Orologio seriale ausiliario (XCL) | Può essere utilizzato per interfacciare altri moduli I2C con MPU6050 |
AD0 | Se più di un MPU6050 viene utilizzato per un singolo MCU, questo pin può essere utilizzato per variare l'indirizzo |
Interruzione (INT) | Pin di interruzione per indicare che i dati sono disponibili per la lettura dell'MCU |
Sensore di flessione
I sensori flessibili non sono altro che un resistore variabile. La resistenza del sensore di flessione cambia quando il sensore viene piegato. Di solito sono disponibili in due misure 2,2 pollici e 4,5 pollici.
Perché utilizziamo sensori flessibili nel nostro progetto?
In questo braccio robotico controllato da gesti, viene utilizzato un sensore di flessione per controllare la pinza del braccio robotico. Quando il sensore di flessione sul guanto è piegato, il servomotore collegato alla pinza ruota e la pinza si apre.
I sensori Flex possono essere utili in molte applicazioni e abbiamo costruito pochi progetti utilizzando sensori Flex come un controller di gioco, un generatore di toni, ecc.
Preparare il braccio robotico stampato in 3D:
Il braccio robotico stampato in 3D utilizzato in questo tutorial è stato realizzato seguendo il design fornito da EEZYbotARM, disponibile nel Thingiverse. La procedura completa per realizzare il braccio robotico stampato in 3D e il dettaglio di assemblaggio con video è presente nel link Thingiverse, che è condiviso sopra.
Sopra è l'immagine del mio braccio robotico stampato in 3D dopo l'assemblaggio con 4 servomotori.
Componenti richiesti:
- Arduino Nano
- Sensore di flessione
- Resistenza 10k
- MPU6050
- Guanti per le mani
- Collegamento dei cavi
- Breadboard
Schema elettrico:
L'immagine seguente mostra le connessioni del circuito per il braccio robotico controllato da gesti basato su Arduino .
Collegamento del circuito tra MPU6050 e Arduino Nano:
MPU6050 |
Arduino Nano |
VCC |
+ 5V |
GND |
GND |
SDA |
A4 |
SCL |
A5 |
Collegamento del circuito tra servomotori e Arduino Nano:
Arduino Nano |
SERVOMOTORE |
Adattatore di alimentazione |
D2 |
Servo 1 arancione (pin PWM) |
- |
D3 |
Servo 2 Orange (Pin PWM) |
- |
D4 |
Servo 3 arancione (Pin PWM) |
- |
D5 |
Servo 4 Orange (Pin PWM) |
- |
GND |
Servo 1,2,3,4 marrone (GND Pin) |
GND |
- |
Servo 1,2,3,4 Rosso (+ 5V Pin) |
+ 5V |
Un sensore di flessione contiene due perni. Non contiene terminali polarizzati. Quindi il pin uno P1 è collegato al pin analogico A0 di Arduino Nano con una resistenza pull-up di 10k e il pin due P2 è collegato a terra ad Arduino.
Montaggio di MPU6050 e sensore di flessione sui guanti
Abbiamo montato l'MPU6050 e il sensore Flex su un guanto. Qui viene utilizzata una connessione cablata per collegare il guanto e il braccio robotico, ma può essere resa wireless utilizzando una connessione RF o una connessione Bluetooth.
Dopo ogni connessione, la configurazione finale per il braccio robotico controllato tramite gesti è simile all'immagine seguente:
Programmazione di Arduino Nano per braccio robotico
Come al solito, alla fine di questo tutorial viene fornito il codice completo e un video funzionante. Qui vengono spiegate alcune importanti righe di codice.
1. Innanzitutto, includi i file di libreria necessari. La libreria Wire.h viene utilizzata per la comunicazione I2C tra Arduino Nano e MPU6050 e servo.h per il controllo del servomotore.
#includere
2. Successivamente, vengono dichiarati gli oggetti per la classe servo. Poiché utilizziamo quattro servomotori, vengono creati quattro oggetti come servo_1, servo_2, servo_3, servo_4.
Servo servo_1; Servo servo_2; Servo servo_3; Servo servo_4;
3. Successivamente, viene dichiarato l'indirizzo I2C di MPU6050 e le variabili da utilizzare.
const int MPU_addr = 0x68; // MPU6050 I2C Address int16_t axis_X, axis_Y, axis_Z; int minVal = 265; int maxVal = 402; doppia x; doppio y; doppio z;
4. Successivamente, nell'impostazione void , viene impostata una velocità di trasmissione di 9600 per la comunicazione seriale.
Serial.begin (9600);
E viene stabilita la comunicazione I2C tra Arduino Nano e MPU6050:
Wire.begin (); // Inizializza la comunicazione I2C Wire.beginTransmission (MPU_addr); // Inizia la comunicazione con MPU6050 Wire.write (0x6B); // Scrive nel registro 6B Wire.write (0); // Scrive 0 nel registro 6B per reimpostare Wire.endTransmission (true); // Termina la trasmissione I2C
Inoltre, quattro pin PWM sono definiti per i collegamenti del servomotore.
servo_1.attach (2); // Avanti / Indietro_Motor servo_2.attach (3); // Up / Down_Motor servo_3.attach (4); // Gripper_Motor servo_4.attach (5); // Left / Right_Motor
5. Successivamente, nella funzione void loop , stabilire nuovamente la connessione I2C tra MPU6050 e Arduino Nano e quindi iniziare a leggere i dati degli assi X, Y, Z dal registro di MPU6050 e memorizzarli nelle variabili corrispondenti.
Wire.beginTransmission (MPU_addr); Wire.write (0x3B); // Inizia con regsiter 0x3B Wire.endTransmission (false); Wire.requestFrom (MPU_addr, 14, true); // Leggi 14 registri axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Successivamente, mappare il valore minimo e massimo dei dati dell'asse dal sensore MPU6050 nell'intervallo da -90 a 90.
int xAng = map (axis_X, minVal, maxVal, -90,90); int yAng = map (axis_Y, minVal, maxVal, -90,90); int zAng = map (axis_Z, minVal, maxVal, -90,90);
Quindi utilizzare la seguente formula per calcolare i valori x, y, z in termini da 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);
Quindi leggi i dati dell'uscita analogica del sensore di flessione sul pin A0 di Arduino Nano e in base al valore digitale del sensore di flessione imposta l'angolo del servo della pinza. Quindi, se i dati del sensore di flessione sono maggiori di 750, l'angolo del servomotore della pinza è di 0 gradi e se inferiore a 750 è di 180 gradi.
int gripper; int flex_sensorip = analogRead (A0); if (flex_sensorip> 750) { gripper = 0; } else { gripper = 180; } servo_3.write (gripper);
Quindi il movimento di MPU6050 sull'asse X da 0 a 60 viene mappato in termini da 0 a 90 gradi per il movimento avanti / indietro del servomotore del braccio robotico.
if (x> = 0 && x <= 60) { int mov1 = map (x, 0,60,0,90); Serial.print ("Movimento in F / R ="); Serial.print (mov1); Serial.println ((char) 176); servo_1.write (mov1); }
E il movimento di MPU6050 sull'asse X da 250 a 360 è mappato in termini da 0 a 90 gradi per il braccio robotico di movimento SU / GIÙ del servomotore.
altrimenti se (x> = 300 && x <= 360) { int mov2 = map (x, 360,250,0,90); Serial.print ("Movimento in su / giù ="); Serial.print (mov2); Serial.println ((char) 176); servo_2.write (mov2); }
Il movimento di MPU6050 sull'asse Y da 0 a 60 è mappato in termini di 90-180 gradi per il movimento sinistro del servomotore del braccio robotico.
if (y> = 0 && y <= 60) { int mov3 = map (y, 0,60,90,180); Serial.print ("Movimento a sinistra ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Il movimento di MPU6050 nell'asse Y da 300 a 360 è mappato in termini di 0 a 90 gradi per il movimento destro del servomotore del braccio robotico.
altrimenti se (y> = 300 && y <= 360) { int mov3 = map (y, 360,300,90,0); Serial.print ("Movimento a destra ="); Serial.print (mov3); Serial.println ((char) 176); servo_4.write (mov3); }
Funzionamento del braccio robotico controllato tramite gesti utilizzando Arduino
Infine, carica il codice su Arduino Nano e indossa il guanto montato con MPU6050 e Flex Sensor.
1. Ora sposta la mano verso il basso per spostare il braccio robotico in avanti e spostala verso l'alto per spostare il braccio robotico verso l'alto.
2. Quindi inclinare la mano a sinistra oa destra per ruotare il braccio robotico a sinistra oa destra.
3. Piegare il cavo flessibile attaccato con il dito del guanto per aprire la pinza, quindi rilasciarlo per chiuderlo.
Il funzionamento completo è mostrato nel video sotto riportato.