Settimana scorsa l’appassionato arduino e lettore del blog Giuseppe mi ha inviato una email con il suo progetto: una Mano robotica con aduino autocostruita.
Giuseppe mi ha anche inviato tutte le foto, la descrizione del progetto ed un filmato, che trovi in fondo all’articolo, oltre all’autorizzazione a pubblicare tutto il suo materiale con la volontà di condividere il suo progetto.
Il progetto Mano robotica con arduino è senza dubbio uno di quei progetti che un po’ tutti gli appassionati di elettronica , meccanica e robotica abbiamo provato a realizzare e senza dubbio con arduino questo progetto è realizzabile con un po’ di pratica e tanta voglia di fare.
Costruzione della parte mecanica della mano robotica
per la realizzazione della parte meccanica Giuseppe scrive:
“La parte meccanica è presa da un tutorial sul sito emcelettronica, un semplice modo per costruire con materiali facilmente reperibili la struttura della mano. Possiamo aggiungere a questo progetto una barra metallica legata ad un cuscinetto rotante ed un supporto fisso, ottenendo la rotazione del polso.”
effettivamente se osservi il progetto il materiale è facilmente reperibile:
- qualche metro di tubo corrugato, dipende da quanto vuoi grande la mano;
- del filo di naylon o simile;
- colla a caldo;
- n.6 servomotori;
- una staffa fissa;
- un asse metallico collegato alla staffa fissa;
- un cuscinetto.
A questo materiale devi aggiunger la parte elettronica:
- n.1 arduino uno o simili;
- n.1 connettore autocostruito a 7 contatti da 3 pin ciascuno per collegare i servo;
- n.1 nunchuck per pilotare la mano robotica
- n.1 alimentatore da 6v 1,7A per alimentare i servo;
- n.1 pila da 9v per alimentare Arduino.
Assemblare la parte meccanica della mano robotica
Per costruire la parte meccanica ti consiglio di seguire il tutorial che Giuseppe suggerisce perchè benfatto: Mano Robotica parte meccanica realizzata con il tubo corrugato, il filo di naylon e della colla a caldo.
Ecco una foto di un particolare della mano robotica realizzata:
Assemblare la parte elettrica della mano robotica
Per la parte elettrica hai bisogno di un saldatore che ti permetta di realizzare il connettore per i servo:
in pratica tutti i pin positivi sono saldati insieme tra loro e connessi al polo positivo dell’alimentatore a 6v 1,7A, così come tutti i pin negativi sono saldati insieme tra loro e collegati al polo negativo del medesimo alimentatore:
Important!
come anche Giuseppe suggerisce ricordati che il polo negativo dell’alimentatore dei servo ( 6v 1,7A ) e il terminale a massa ( GND ) di arduino devono essere collegati insieme.
Solo in questo modo tutto il progetto della mano robotica funziona correttamente.
Passa al collegamento del nunchuk, puoi seguire il tutorial su questo blog, aquistando un connettore per pochi o tagliare il connettore del nunchuk e collegare i cavi come descritto da Giuseppe:
” Tagliando il connettore, colleghiamo il cavo bianco al pin GND, il cavo rosso all’alimentazione da 3,3 volt forniti dalla scheda del microcontrollore, il cavo giallo all’ingresso analogico A5 ed il cavo verde all’ingresso A4. (In foto il cavo nero è prolungamento del cavo bianco) ”
in ogni caso l’importante è che i collegamenti siano fissi e che tu non abbia dei falsi contatti tra il nunchuck e arduino per evitare malfunzionamenti.
Lo sketch della mano robotica
Giuseppe ha realizzato lo sketch seguente come esempio di ciò che puoi realizzare:
#include <Wire.h> #include <string.h> #include <stdio.h> #include <Servo.h> uint8_t outbuf[6]; int cnt = 0; int flag = 0; int pulseWidth = 0; int pulseWidth2 = 0; long lastPulse = 0; long lastPulse2 = 0; int z_button = 0; int c_button = 0; int refreshTime = 20; int minPulse = 1000; int minPulse2 = 500; int dtime=10; int joy_x_axis; int joy_y_axis; int accel_x_axis; int accel_y_axis; int accel_z_axis; #define pwbuffsize 10 long pwbuff[pwbuffsize]; long pwbuffpos = 0; long pwbuff2[pwbuffsize]; long pwbuffpos2 = 0; //dichiarazione variabili servo Servo servo1; Servo servo2; Servo servo3; Servo servo4; Servo servo5; Servo servo6; int val1; // variabili per le posizioni dei servo int val2; int val3; int val4; int val5; int val6; void setup() { servo1.attach(8); // assegnazione piedini per i servo servo2.attach(9); servo3.attach(10); servo4.attach(11); servo5.attach(12); servo6.attach(13); Serial.begin (9600); Wire.begin (); nunchuck_init (); Serial.print ("Setup Completato\n"); } void nunchuck_init() { Wire.beginTransmission (0x52); Wire.write (0x40); Wire.write (0x00); Wire.endTransmission (); } void send_zero() { Wire.beginTransmission (0x52); Wire.write (0x00); Wire.endTransmission (); } int t = 0; void loop() { t++; long last = millis(); if( t == 1) { t = 0; Wire.requestFrom (0x52, 6); while (Wire.available ()) { outbuf[cnt] = nunchuk_decode_byte (Wire.read ()); cnt++; } if (cnt >= 5) { int z_button = 0; int c_button = 0; if ((outbuf[5] >> 0) & 1) z_button = 1; if ((outbuf[5] >> 1) & 1) c_button = 1; } cnt = 0; send_zero(); } // if(t==) joy_x_axis = outbuf[0]; joy_y_axis = outbuf[1]; accel_x_axis = outbuf[2]; // * 2 * 2; accel_y_axis = outbuf[3]; // * 2 * 2; accel_z_axis = outbuf[4]; // * 2 * 2; z_button = 0; c_button = 0; if ((outbuf[5] >> 0) & 1) z_button = 1; if ((outbuf[5] >> 1) & 1) c_button = 1; if ((outbuf[5] >> 2) & 1) accel_x_axis += 2; if ((outbuf[5] >> 3) & 1) accel_x_axis += 1; if ((outbuf[5] >> 4) & 1) accel_y_axis += 2; if ((outbuf[5] >> 5) & 1) accel_y_axis += 1; if ((outbuf[5] >> 6) & 1) accel_z_axis += 2; if ((outbuf[5] >> 7) & 1) accel_z_axis += 1; // interpretazione variabili nunchuck if(z_button==0) {if(flag==0) flag=1; else flag=0; } if((c_button==0)&&(z_button==1)) if(flag==0){if(val5<180)val5+=20;} else{if(val5>19)val5-=20;} if((c_button==1)&&(z_button==1)) if(flag==0){if(val5>19)val5-=20;} else{if(val5<180)val5+=20;} if((joy_y_axis > 220)||((joy_y_axis >= 0)&&(joy_y_axis < 40))) if(flag==0){if(val1<180) val1+=20;} else{if(val1>19) val1-=20;} if((joy_y_axis > 45)&&(joy_y_axis < 160)) if(flag==0){if(val3<180) val3+=20;} else{if(val3>19) val3-=20;} if((joy_y_axis <171)&&(joy_y_axis > 167)) if(flag==0){{if(val1>19) val1-=20; if(val3>19) val3-=20; } } else {{if(val1<180) val1+=20; if(val3<180) val3+=20; } } if((joy_x_axis > 220)||((joy_x_axis >= 0)&&(joy_x_axis < 40))) if(flag==0){if(val2<180) val2+=20;} else{if(val2>19) val2-=20;} if((joy_x_axis > 45)&&(joy_x_axis < 160)) if(flag==0){if(val4<180) val4+=20;} else{if(val4>19) val4-=20;} if((joy_x_axis <171)&&(joy_x_axis > 167)) if(flag==0){{if(val2>19) val2-=20; if(val4>19) val4-=20; } } else {{if(val2<180) val2+=20; if(val4<180) val4+=20; } } //controllo polso //val6=map(accel_x_axis, 63, 210, 0, 180); alternativa poco pratica a causa //dell'imprecisione del nunchuck di prova if(accel_x_axis<110) if(val6>19) val6-=20; if(accel_x_axis>150) if(val6<180) val6+=20; servo1.write(val1); // trasferimento del comando ai servo servo2.write(val2); servo3.write(val3); servo4.write(val4); servo5.write(val5); servo6.write(val6); printNunchuckData(); delay(dtime); } int i=0; void printNunchuckData() { Serial.print (i,DEC); Serial.print ("\t"); Serial.print ("X: "); Serial.print (joy_x_axis, DEC); Serial.print ("\t"); Serial.print ("Y: "); Serial.print (joy_y_axis, DEC); Serial.print ("\t"); Serial.print ("AccX: "); Serial.print (accel_x_axis, DEC); Serial.print ("\t"); Serial.print ("AccY: "); Serial.print (accel_y_axis, DEC); Serial.print ("\t"); Serial.print ("AccZ: "); Serial.print (accel_z_axis, DEC); Serial.print ("\t"); Serial.print (z_button, DEC); Serial.print (" "); Serial.print (c_button, DEC); Serial.print ("\t"); Serial.print (val1,DEC); Serial.print (" "); Serial.print (val2,DEC); Serial.print (" "); Serial.print (val3,DEC); Serial.print (" "); Serial.print (val4,DEC); Serial.print (" "); Serial.print (val5,DEC); Serial.print (" "); Serial.print (val6,DEC); Serial.print ("\t"); Serial.print (flag,DEC); Serial.print ("\r\n"); i++; } char nunchuk_decode_byte (char x) { x = (x ^ 0x17) + 0x17; return x; }
e nella documentazione inviatami riporta:
“i movimenti vengono eseguiti per step crescenti o decrescenti invece di una mappatura diretta dell’accelerometro. Lo stesso metodo è stato usato per il joystick poiché in questo modo è possibile utilizzare le 4 direzioni per il controllo di 4 dita ed ottenere varie combinazioni di movimenti portando il cursore nelle posizioni intermedie. Queste posizioni sono utilizzabili poiché il movimento è attivato da uno spostamento abbastanza piccolo del cursore, quindi nelle posizioni intermedie le componenti x ed y del segnale ricevuto sono sufficienti ad innescare l’azione delle dita. Inoltre lo schetch prevede il ritorno alla posizione di “riposo” quando il joystick non viene toccato, quindi, evitando di passare dal centro, è possibile ottenere ulteriori movimenti arbitrari.
La posizione di “riposo “ , ovvero la decisione di far partire la mano con le dita aperte o chiuse, è modificabile tramite il tasto Z (secondo tasto grande); partendo dalla mano aperta e, muovendo il cursore, le dita si chiudono e premendo il tasto C (il primo tasto piccolo) si chiude il pollice. Se partiamo dalla mano chiusa abbiamo il movimento opposto.”
In pratica i movimenti del joystick presente sul nunchuck muove le dita della mano robotiva mentre l’asse X dell’accellerometro simula la rotazione del poso se questo fosse connesso ad una struttura scheletrica simile a quello umano da cui tutta la mano robotica prende ispirazione.
Interessante l’uso del tasto “C” per il controllo del pollice opponibile di cui la mano è dotata e la funzione legata al tasto “Z” con cui puoi decidere se partire con la mano aperta o chiusa con un solo gesto.
Il video della mano robotica in azione
La mano robotica in movimento guidata da Giuseppe attraverso il nunchuck:
Buon divertimento !!!
58 commenti
1 ping
Vai al modulo dei commenti
Ciao Mauro, è questo l’articolo che intendevi?? 🙂
Autore
Ciao Davide,
mi scrivere in tantissimi non posso ricordarmi cosa ti ho consigliato di leggere dal blog, mi rinfreschi la memoria su cosa stai realizzando?
Mauro
Sto realizzando una mano robotica comandata dal movimento della mia mano..
Autore
Grande Davide, aspetto le tue foto, disegni e video se vorrai condividerli con tutti noi appassionati sarò lieto di offrirti spazio su questo blog.
Mauro
chiedevo appunto se era questo l’articolo che mi consigliavi per la programmazione
Autore
Si Davide, queto progetto di mano robotica con arduino è un ottimo esempio.
Mauro
ciao sono fabio ho provato a fare il tuo ma nn mi si muove niente arduino uno r3 compila ma nn riesco a capire come mai nn và
Autore
Ciao Fabio,
mi sembra un problema di collegamenti.
Mauro
ciao , ho seguito le istruzioni per il progetto , ho verificato le connessioni per evitare dei corto ma non funziona e la tensione dell alimentatore cala improvvisamente quando mi collego
Autore
Ciao Marco,
potresti avere un alimentatore non sufficiente a supportare il carico del robot.
Mauro
Ciao , ora ho cambiato alimentatore , la tensione è stabile ma funzionano solo i servo comandati dal tasto C e dal movimento del polso , gli altri continuano a vibrare a vuoto . Grazie mille !
Autore
Ciao Marco,
prova a verificare che i valori del tuo nunchuck siano identici a quelli previsti nello sketch.
Il tuo problema sembra questo, nello sketch trovi la funzione dedicata alla visualizzazione dei valori su monitor seriale.
Mauro
Ciao, ho seguito passo passo il procedimento, ma a me non legge i valori del nunchuck D:
Dove sbaglio?
Autore
Ciao Matteo,
detto così non so aiutarti, dovresti dirmi cosa leggi, se il nunchuck è originale, se usi un adattatore e di quale produttore.
Mauro
Hola Mauro…
Oye tengo una duda el Nunchuck que utilizaste es el original?.
Yo lo hice con uno genérico pero no me funciona el código, aunque no me da ningún error.
Gracias!
Autore
Hola Kary,
me pasó a mí no sé por qué me había roto el nunchuck.
Mauro
Salve,
sto terminando ora il progetto della mano,
i servo vanno collegati ai 8 9 10 11 12 13 se ho letto bene lo sketch, il pollice quale sarebbe e quale il movimento del polso?
Penso di aver compreso quasi tutto, la massa di arduino va collegata alla massa dell’alimentatore.
Ho caricato il programma, il led tx resta acceso,
questo è corretto.
Grazie
Autore
Ciao Tamas,
Il progetto è stato realizzato da Giuseppe che potrà darti maggiori delucidazioni.
Per quanto ne so non è corretto che il led Tx resti acceso.
Mauro
Lo sketch sopra supera il test iniziale, ma il led TX rimane sempre acceso , Potresti cortesemente darmi i riferimentoi per contattare Giuseppe o qualcuno a cui funziona il tutto senza problemi ?
Il Nunchuck che ho io ha i fili ( giallo-verde-bianco-rosso e la calza ) ma non c’è il blu puoi darmi qualche dritta ?
Puoi darmi un riferimento di questa persona o di qualcuni a cui funziona il tutto senza problemi ?
Ok ho riletto meglio il testo il nero è un proliungamento del bianco !!
Grazie
Autore
Ciao Sandro,
Giuseppe riceve e legge tutti i commenti che riceve il suo articolo, se non ha risposto è perché probabilmente è impegnato.
In generale trovi altri articoli, scritti da me, in cui spiego il funzionamento del Nunchuck che puoi seguire e da cui puoi scrivere il tuo sketch.
Ti chiedo la cortesia di non postare commenti a raffica sul blog, non ottieni più risposte.
Il blog è una risorsa GRATUITA a disposizione di chi ha voglia di imparare e migliorare i progetti presentati.
Tutti gli autori dei progetti pubblicano spontaneamente e senza alcun compenso i loro progetti e dedicano alla revisione dei commenti il tempo libero essendo arduino una passione.
In futuro comportamenti come quello che stai tenendo saranno considerati SPAM e non ti consentirò di aggiungere alcun commento agli articoli pubblicati.
Mauro
Ciao! vorrei provare ad iniziare questo esperimento, ma il link per la costruzione meccanica della mano non funziona, avresti un altro link dove spiegano questo?
grazie
Autore
Ciao Alessandro, purtroppo no, hanno cancellato il progetto, tuttavia trovi dei miei dettagliati articoli di qualche settimana fa che descrivono passo-passo tutto il progetto.
Ciao, ho trovato vari progetti ma quello no, come si chiama quello fatto da te che parla di questo che sto cercando?
Autore
Ciao Alessandro, ti riferisci al guanto con sensori di flessione forse?
si diciamo che mi riferisco alla parte meccanica di questo progetto, siccome ho intenzione di fare la mano in metallo, volevo vedere come erano i collegamenti all’interno delle dita e dai servi alle dita stesse insomma
Autore
Ciao Alessandro,
per la parte meccanica ci sono molti modi di realizzarla.
Di solito chi inizia un progetto come questo si inventa il proprio modo di collegare le dita ai servo.
Ti invito alla lettura degli articoli dedicato alla “mano biomeccanica” in cui trovi i disegni 3D realizzati da un designer italiano.
Mauro
Ciao Mauro sto realizzando questo progetto ho fatto tutti i collegamenti corretti infatti sia il pulsante z che il pulsante c mi funzionano correttamente ho invece un problema nella parte analogica che non mi funziona e da quanto ho capito è una questione di valori del nunchuck però non so dove sostituirli nella programmazione mi potresti dare un aiuto questi sono i miei valori del nunchuck
analogico base”a centro” (0):
X=254; Y=67;
analogico a destra:
X=454; Y=67;
analogico a sinistra:
X=64; Y=67;
analogico in su:
X=254; Y=108;
anologico in giù:
x=254; Y=17;
spero che si possa risolvere.
Autore
Ciao Mario,
pubblico il tuo commento perchè Giuseppe, autore del progetto, possa aiutarti.
ok spero che lo vedrà presto questo commento
ciso Mauro… vai affanculo
Autore
Ciao Stefano, mi piacerebbe conoscere il motivo di questo tuo invito. Sopratutto su un articolo non mio.
Scusami sono stati dei miei compagni a scrivere tutto a mia insaputa. Ovvio che anche io la penso allo stesso modo dovresti proprio andarci a fare in culo pero non te lo avrei mai scritto. Pace ciao
Lascia stare ciao
Autore
Ciao Srefano, non preoccuparti, capita.
Ciao, gentilmente potresti mettere di nuovo il link della Mano Robotica Parte Meccanica, mi dice indirizzo non trovato…
Grazie, e bellissima guida! Continua cosi! 😀
Autore
Ciao Matteo,
purtroppo quel link non esiste più.
Vorrei chiarire stai facendo un lavoro meraviglioso continua cosi NON SAPEVO NULLA !
COMPLIMENTI!
Autore
Grazie Stefano
ciao stefano , per questo progetto come avete fatto a collegare il nunchuck ad Arduino ?? avete tagliato il filo e avete spelato i fili in esso contenuti ??
grazie
Autore
Ciao Francesco, in attesa che ti risponda Stefano ti segnalo l’esistenza di un adattatore in vendita su robot-domestici.it da 1 o 2 euro con cui non devi tagliar il cavo.
ciao Francesco, non ho la più pallida idea di quello che mi vuoi chiedere… il programma non va… spero che Mauro, un programmatore D.O.P. (denominazione di origine programmata) e .DO.C. (di origine Central Processing Unit) ti possa dare una mano…
Baci… Perugina
ciao Mauro… sono uno studente di un indirizzo tecnico… ho un po’ di domande da porti:
1) abbiamo fatto la prova con il Nunchuck, ma il connettore ,mi da un falso contatto… va bene se non lo uso e collego il + e gnd ad una breadboard?
2) La batteria dei 9 v serve per dare potenza all’arduino?? se non la metto non va?
3) i servo non riescono a tirare su il tubo corrugato… ce una particolare “tecnica” da fare?
grazie mille…. complimenti per il lavoro e la pazienza…
ciao… brian
Autore
Ciao Brian,
l’adattatore per nunchuck di solito aiuta ma puoi ometterlo;
la pila da 9v alimenta arduino e fornisce più energia della USB, in corrente, per sostenere anche il movimento dei servo;
se i servo non riescono a muovere il corrugato probabilmente avete scelto un tipo troppo pesante per i servo che usate, ti consiglio di valutare la forza dei servo e di proporzionarla a quanto vi occorre per flettere il tubo corrugato.
Ciao Mauro! Ho assemblato correttamente i componenti ma i servomotori non rispondono. Siccome utilizzo il tuo programma come riferimento (ho copiato ed incollato tutto) puo essere che ci sia una qualche istruzione di troppo che non mi fa funzionare i Servo ? Io devo arrivare ad ottenere una mano che faccia muovere i 5 servo delle dita tramite nunchuck proprio come il progetto originale e per 1 servo per il polso. Sono in emergenza totale riusciresti a propormi un programma SEMPLIFICATO per fare muovere questi benedetti servo? Ti ringrazio anticipatamente 🙂
Con dei commenti anche brevissimi per favore. Ti ringrazioamo studenti itis marconi Locatelli Maffioletti e Curatolo.
Autore
Vi invito a leggere e comprendere il codice descritto e cercare le differenze tra il progetto presentato e la vostra riproduzione.
Immagino si tratti di un progetto di esame vostro e non sarebbe corretto se fossi io a scrivervi lo sketch.
Mauro
Autore
Ciao Stefano,
questo progetto è stato realizzato da Giuseppe e condiviso con gli appassionati, non saprei fornirtene una versione più semplice di quella che leggi.
Ho realizzato altri esperimenti con i servo e se cerchi “mano” nel blog troverai gli articoli di cui ti parlo e con i quali puoi risolvere le difficoltà incontrate.
ciao Mauro, è da un po che non ci sentiamo… quest’anno ho deciso di riprovare a fare la mano (quela che è stata la causa della mia bocciatura)… mi aiuti o vuoi avermi sulla coscienza per la seconda volta?
ciao Stefano
Autore
Ciao Stefano,
mi spiace che tu sia stato bocciato ma dubito che il problema sia la mano che non hai saputo realizzare.
Come già avrai letto io per etica non realizzo i progetti d’esame neppure su commissione ma invito tutti voi a studiare che è l’unica strada per essere promossi e soprattutto per imparare cose nuove e costruirsi un futuro.
Ciao mauro, quest’anno hi deciso di fare o la serra o la diga pero in entrambi i progetti volevo inserire la mano robotica… Per la serra pensavo di usarla per raccogliere la verdura, per la diga per pescare i pesci… Cosa ne pensi? Hai qualche consiglio da darmi? Grazie ciao
Autore
Ciao Stefano,
mi sembra complesso realizzare una mano abbastanza veloce da pescare i pesci.
Allo stesso modo riconoscerli per poi pescarli non è certo un’operazione semplice o che puoi fare con Arduino.
ciao mauro dopo tre anni che lavoro su codesto progetto ancora non mi funziona …………….
Autore
Ciao Stefano,
imprecare non aiuta, almeno me, nella risoluzione dei problemi.
Se provi a scrivere qualche dettaglio in più del “non mi funziona” magari Giuseppe, autore del progetto, può darti una mano.
ciao Mauro, volevo chiederti una cosa inerente più ad Arduino che al progetto della mano robotica… esiste un touch panel da usare con arduino? grazie
Autore
Ciao Brian,
hai inserito un commento con un altro nome ed email ma stesso computer/identificativo circa 7 min fa sullo stesso articolo, spero tu ti renda conto che questo comportamento è considerabile spam.
Stavolta sei perdonato.
Si esistono e ne ho trattato uno anche io nel blog è della system4D cerca nel blog e troverai le risposte che cerchi.
Ciao Mauro. Mi sto impegnando su questo progetto ma non riesco più a trovare il progetto meccanico. C’è un modo per aiutarmi? Grazie in anticipo.
Autore
Ciao Lorenzo,
hai scelto un progetto datato: Dic 2012
Ti consiglio o di cercare un progetto simile più aggiornato o di inventare tu un modo di realizzare la parte meccanica.
Grazie
[…] avrai letto questo articolo sulla mano robotica l’idea è simile, in collaborazione con Federico ho deciso di partecipare al progetto e di […]