La mano biomeccanica e altre realizzazioni di mano hanno necessità di un servo e sensore di flessione per risprodurre il movimento delle tue dita sulla mano robotica.
L’uso del sensore di flessione e come collegarlo ad arduino per leggerne i valori li hai già letti negli articoli:
è ora di collegare il primo servo e sensore di flessione ad arduino per controllare il movimento del primo con il secondo.
Collegamento del servo e sensore di flessione
Un servo è un componete semplice da collegare ad arduino, se non sai come fare ti invito alla lettura dell’articolo Tutorial: arduino servo con alimentazione esterna, il sensore di flessione oramai non ha più segreti 🙂
Ecco come collegare il servo
Ecco come collegare il sensore di flessione
Taratura del sensore di flessione
il sensore di flessione restituisce valori differenti in funzione della flessione applicata e questa varia in base alla posizione del sensore sul guanto, come hai letto nel precedente articolo.
E’ pertanto necessario procedere alla taratura del sensore di flessione con lo sketch che trovi nell’articolo dedicato al guanto con sensore di flessione e segnare su un foglio il valore letto quando il dito è piegato e quando il dito è steso; nel mio esempio il valore con il dito piegato è circa 130 mentre il valore alla massima estensione del dito è circa 260.
I due valori ti serviranno per impostare correttamente lo sketch in modo da controllare il servo con la completa estensione del dito.
Lo Sketch di controllo
#include <Servo.h> #define sensIndice A5 #define pinIndice 6 Servo indice; int valueIndice = 0; int rangeIndice[] = {130,260}; int gradiIndice[] = {0,180}; void setup() { Serial.begin(9600); pinMode( sensIndice,INPUT ); indice.attach( pinIndice ); indice.write( gradiIndice[0] ); } void loop() { valueIndice = analogRead( sensIndice ); Serial.print( valueIndice ); Serial.print( "\n" ); valueIndice = map(analogRead(sensIndice), rangeIndice[0], rangeIndice[1], gradiIndice[0], gradiIndice[1]); indice.write( valueIndice ); delay( 10 ); }
Lo sketch compie tre operazioni importanti:
- la prima è recepire i valori inviati dal sensore
- la seconda è adattarle il range min-max del sensore al range min-max del servo
- la terza è posizionare il servo al giusto grado di rotazione
Le linee 03-04: definisci i pin a cui hai collegato rispettivamenti il sensore di flessione ed il servocomando;
linea 06: definisci indice ossia l’istanza della classe Servo.h che userai per inviare i comandi al servo;
linea 08: imposta una variabile di tipo intero ( integer ) valueIndice in cui memorizzerai i valori adattati da sensore a servo;
linea 09: imposta un array di valori interi rangeIndice i cui due valori rappresentano il valore minimo e massimo letti dal sensore, nell’esempio 130 è il valore minimo e 260 quello massimo;
linea 10: imposta un array di valori interi gradiIndice i cui due valori rappresentano il grado minimo e grado massimo che il servo può raggiungere, questa taratura dipende dalla meccanica del tuo progetto;
linee 14-16: definisci la modalità di uso del pin a cui è collegato il sensore di flessione, esegui l’attach() del pin del servo, ossia imposti l’istanza indice per controllare il servo mediante il pin a cui lo hai collegato ed infine posizioni il servo al suo valore minimo gradiIndice[0]
Notice
NOTA: il valore 0 indica il primo elemento dell’array gradiIndice questo comporta che la variabile gradiIndice[0] = 0 se guardi la linea10. Se usi la variabile gradiIndice[1] ti riferisci al secondo valore dell’array e il suo valore sarà 180 come impostato alla linea 10.
linea 20: leggi il valore restituito dal sensore indice;
linea 22: mappa il valore letto alla linea 20 con il range minimo e massimo del sensore di flessione ed il range minimo e massimo dei gradi del servo.
Important!
Se vuoi approfondire a cosa serve e come si usa la funzione map() con arduino ti consiglio di consultare il reference.
Inoltre ricorda che lo stesso discorso fatto per gradiIndice[0], gradiIndica[1] vale per rangeIndice[0], rangeIndice[0]
linea 28: fai il lavoro più semplice invia all’istanza indic il valore in gradi da eseguire sul server;
linea 30: imposta un ritardo di 10 millisecondi tra un ciclo di loop ed il successivo questo consente al servo di raggiungere la posizione desiderata.
Il video
ho realizzato un piccolo video in cui puoi vedere il servo che si muove in fuzione della distenzione o piegatura del mio dito, quello nel guanto 🙂
Buona realizzazione !!!
32 commenti
Vai al modulo dei commenti
Salve, volevo chiedere se secondo te posso mettere Lilypad su un guanto, collegarci i 5 sensori di flessione, e di abbinarci un modulo Xbee comunicante con una scheda arduino UNO a cui sono collegati i 5 servo per tirare i fili della mano artificiale. Perchè non so bene se riesco a trasmettere i dati di 5 variabili analogiche…
Grazie,
Gabriele
Autore
Ciao Gabriele,
puoi mettere la Lilypad su un guanto, trovi un articolo proprio su un guanto realizato con la Lilypad sul blog.
Per i 5 sensori di flessione hai bisogno di 5 pin analogici, non ricordo se la Lilypad ne ha 5 a disposizione.
La trasmissione via xbee non dovrebbe essere un problema, anche se io prima proverei con una comunicazione seriale tra i due arduino, sostituirli poi con gli xbee sarebbe la parte meno complessa.
Mauro
Ho preparato un carrello da questo sito americano dove hanno praticamente tutto, volevo chiederti un consiglio, giusto anche per rifletterci un attimo prima di procedere all’acquisto (dato che non sono pochi soldi…), se secondo te manca qualcosa…
Ecco il link: http://imageshack.com/a/img401/2534/d7gr.png
Perchè ho già un arduino con i servo, una mano artificiale fatta di legno (quasi finita!), e una shield per facilitare il controllo dei servo (Robot_Shield da Futura Elettronica, con regolatore switching).
Riguardo al carrello, in particolare volevo chiederti cosa mi converrebbe tra un FTDI a 3,3V e uno a 5V… Costano uguale e sinceramente non saprei quale scegliere anche se ho fatto un po’ di ricerche. Inoltre non so se i due moduli Xbee necessitano di un’antenna da comprare a parte oppure non sia necessaria per questi (mi basta stare a qualche metro dalla mano artificiale).
Aggiungo il link di ciascun pezzo per facilitare eventualmente la visione:
https://www.sparkfun.com/products/9873
https://www.sparkfun.com/products/8937
https://www.sparkfun.com/products/9266
https://www.sparkfun.com/products/11215
https://www.sparkfun.com/products/10264
Grazie in anticipo per la pazienza! 🙂
Autore
Ciao Gabriele,
mi fa piacere che tu mi abbia coinvolto nel tuo progetto, ma non mi sento in grado di valutare un progetto a cui non ho mai pensato, rischio di commettere degli errori di valutazione e consigliarti male.
Mauro
Ok grazie lo stesso, ci ragionerò ancora un po’ su 🙂
Autore
Ciao Gabriele, ho provato a dare un occhio al carrello che mi hai inviato, sebbene ti chiedo di prendere con le pinze la mia analisi del tutto teorica, mi sembra che ciò che hai acquistato sia sufficiente per il guanto.
Il convertitore FTDI puoi evitarlo perché usi Arduino Uno come interfaccia, trovi un mio tutorial a riguardo che puoi seguire, io lo uso per programmare l’arduino mini che non è molto differente dalla lilypad.
Sono in dubbio sul l’adattatore per Xbee perché non lo conoscevo e non saprei dirti se semplice da utilizzare.
Per l”acquisto io proverei da robot-domestici.it, sono rivenditori autorizzati della sparkfun, dove hai visto i componenti, e se manca qualche pezzo te lo fanno arrivare in settimana, inoltre risparmi le spese dall’America, il tempo di spedizione e puoi chiedere loro dei consigli, sono preparati.
Mauro
Ciao Mauro innanzitutto volevo ringraziarti per i tuoi utilissimi tutorial. Ho una sola incertezza ovvero riesco a pilotare 5 servomotori direttamente dall’arduino o c’è bisogno della shield?
Autore
Ciao Davide,
si riesci a controllare fino a 6 servo da arduino, un per ogni uscita PWM.
L’unica cosa di cui avrai bisogno è una alimentazione da 4 a 6v esterna per i servo, trovi come collegare l’alimentazione esterna in un mio tutorial.
Mauro
Grazie mille. Un’ultima cosa, per realizzare la mano robotica secondo te i servo MG90S E MG90 potrebbero andar bene?
Grazie in anticipo
Autore
Ciao Davide,
non ho mai provato quei servo tuttavia per la mano puoi usare tutti i servo che desideri se la coppia sviluppata ti é sufficiente.
Il parametro di coppia dei servo lo riporta di solito il produttore e la tua realizzazione meccanica deve rispettarla.
Mauro
Ciao Mauro e grazie, ho il timore che quei micro servo non siano al caso mio, mi consiglieresti qualche servo come quello sopra in figura?
Autore
Certo Davide,
cerca nel sito robot-domestici nella sezione. Servo c’è ne sono tanti il mio preferito é un tipo economico ( 19€ circa ) da 15kg/cm con ingranaggi in metallo
Mauro
mi consigli quelli a 180° o quelli a rotazione completa? Grazie mille per l’aiuto
Autore
Ciao Davide,
osservando il movimento del mio dito vedo un movimento inferiore ai 180gradi, per cui direi che 180 é più che sufficiente.
Mauro
I sensori di flessione costicchiano, purtroppo… però ho trovato una soluzione artigianale low cost a questo indirizzo, un sensore di flessione fatto in casa!
http://m.instructables.com/id/DIY-Bend-Sensor-Using-only-Velostat-and-Masking-T/
Un grazie a Mauro per i suoi tutorial gratuiti
Autore
Ciao Heron,
sono molto interessanti, se li realizzi e fai delle foto o dei video posso condividerli sul blog se ti fa piacere.
Ciao Mauro, volevo dare un consiglio, ho notato che utilizzando una resistenza da 10K si ha un delta di tensione (da sensore a riposo a piegato) di circa 0,53V, tenendo conto che (almeno secondo le misure che ho effettuato) a riposo il sensore ha circa 28-30KOhm e piegato circa 60-63KOhm. Facendo i calcoli col partitore di tensione, ho notato che la resistenza migliore da utilizzare sarebbe quella da 47K, che ha un delta di tensione di circa 0,86V, permettendo di avere letture con una precisione leggermente maggiore 🙂
Confermi?
Autore
Ciao Gabriele, se hai fatto delle accurate misurazioni é corretto ciò che scrivi, io mi sono limitato a seguire lo schema diffuso dal produttore del sensore di flessione, probabilmente é migliorabile la lettura apportando la modifica da te suggerita.
Ciao Mauro , ho trovato questo articolo molto interessante, volevo porti alcune domande, alle quali magari potrai sicuramente togliermi alcuni dubbi.
Innanzitutto,vedo che attraverso questo esperimento sei riuscito a pilotare senza alcun problema un servomotore, tuttavia nel caso in cui volessi emulare fedelmente il movimento di ogni dito della mano(quindi 5 motori), mi basterebbe una semplice batteria come quella che hai usato tu o dovrei ricorrere a qualcos’altro?
Scusa l’ignoranza ma se riusciresti a consigliarmi riguardo a questo punto te ne sarei davvero grato, ho fatto diversi esperimenti pilotando più di un servo contemporaneamente attraverso un generatore , ma evidentemente devo aver sbagliato qualcosa, in quanto il risultato finale non è quello desiderato.
Autore
Ciao Giuseppe, ho pubblicato alcuni articoli che penso possano esserti di aiuto e che affrontano dettagliatamente la problematica più di come potrei far io in un commento.
Ti consiglio di leggere gli articoli sulla mano robot, sui sensori di flessione e sui servo con alimentazione esterna.
In merito alla batteria che vedi in questo esperimento é la medesima che utilizzo in tutti i miei progetti e si tratta di una LiPo 3S da 1600mA comperata da robot-domestici a cui ho saldato il connettore per arduino.
grazie Mauro ma è un tipo di batteria ricaricabile?
Autore
Si Giuseppe, se cerchi nel blog c’é un articolo dedicato alle diverse batterie che solitamente uso.
Questa in particolare la puoi trovare sul sito robot-domestici.it insieme al suo caricabatterie dedicato.
ciao mauro, mi potresti spiegare il compito del partitore di tensione in questo circuito? grazie anticipatamente.
Autore
Ciao Marco,
il partitore di tensione ha funzione di pull-down ossia assicura che in caso di resistenza nulla rilevata dal sensore di flessione l’uscita arduino non inizi a flottare rilevando valori errati.
Ciaooo volevo sapere se dopo aver realizzato lo sketch e installato tutto fra fili servomotore e e sensore di flessione nel l’arduino il tutto funzionasse con le batterie staccando il cavetto USB grz in anticipo
Autore
Si Alberto, puoi alimentare Arduino attraverso una alimentazione esterna.
Okkey grz mille,quindi con le batterie farò come hai pubblicato tu lo schema sopra perr enderlo autonomo ….TI VOLEVO CHIEDERE un’altra cosa…come si chiama quel “pezzettino” di colore arancio che si trova nel beadboard in basso a destra che connette i fili??? EE lo so sono negato su ste cose xD
(Dico sempre nel secondo schema dove c’è il sensore di FLESSIONE)
P.S. ti volevo chiedere anche quanta potenza deve avere il servomotore??
PPS.QUANTO DEVE ESSERE GRANDE IL BREADBOARD
P.P.P.S xD io il servomotore l’ho comprato “tower prp sg90 9g per Arduino” va bene??
P.P.P.P.S.l’ultima cosa e giuro che basta,il cospetto arancione che si trova giù in basso a destra nella beadboard quanta potenza deve avere,per favore Rispondimi il prima possibile,sono nelle tue mani grz ciaoo
Autore
Ciao Alberto,
innanzitutto ti chiedo la cortesia di rispettare la “netiquette” ( buon comportamento su internet ) sopratutto nell’uso dei caratteri maiuscolo e minuscolo e nel numero di commenti.
Ho unito i tuoi 5 commenti consecutivi in un unico commento, puoi fare altrettanto se si parla di un unico articolo.
Non l’ho mai fatto, tuttavia, se continuerai con questo comportamento, dovrò classificarti SPAM e cestinare i tuoi commenti.
In merito alle richieste: non è un problema se non sai o non comprendi qualcosa negli articoli ma lo diventa quando non dimostri di aver voglia di comprendere, leggendo il testo dell’articolo, o di voler approfondire ciò che leggi.
Il testo dell’articolo contiene le informazioni che ti servono ed i link ad approfondimenti che ti aiuteranno a comprendere tutto quello che ti occorre, se vorrai dedicare 3 min alla lettura e comprensione.
Quel cosetto arancione, che pre inciso non è arancione, è una resistenza il suo valore è dato dai colori che riporta secondo tabelle chiare sulle misure delle resistenze che trovi in internet.
In funzione del mio sketch è necessario tarare separatamente i sensori?
Se si dove devo inserire min e Max del sensore?uso sketch arduino preimpostato.
Grazie
Autore
Ciao Savino,
non so se ho compreso la tua richiesta, tuttavia se hai dei sensori è giusto che essi siano tarati.
ciao,
vorrei sapere di più sul funzionamento del sensore di flessione, proprio il funzionamento meccanico/elettrico.
Grazie in anticipo.
Autore
Ciao Matteo,
hai provato a leggere il datasheet del produttore sono spiegate molte info che probabilmente cerchi.