mano robot servo flex sensor

La mano robot sevo e flex sensor è l’evoluzione degli articoli pubblicati nei giorni scorsi e fa parte di un progetto realizzato con la collaborazione dell’ITIS di Vorbano e degli allievi del prof. caruccio.

mano biomeccanica - pugnoPer ralizzare il progetto abbiamo selezionato i componenti che puoi acquistare:

  • n.1 arduino uno
  • n.1 protoshield
  • n.6 morsetti da scheda
  • n.3 headers per la protoshield
  • n.1 connettore maschio da 20 pin da scheda
  • n.5 sensori di flessione
  • n.5 resistenze da 10Kohm
  • n.5 servomotori modellistici
  • n.1 ponticello per pin da scheda

da robot-domestici ed ho provveduto alla realizzazione del circuito sulla protoshield.

I collegamenti su protoshield della mano robot servo flex sensor

I sensori di flessione hanno 2 contatti ciascuno e per poter essere collegato agli ingressi analogici di arduino è necessario aggiungere una resistenza da 10Kohm tra uno dei terminali del sensore e il polo positivo del circuito.

I servo puoi collegarli direttamente ai pin di tipo PWM di arduino avendo cura di alimentare tutti i servo attraverso una pila esterna in grado di erogare 5v e almeno 1000mA per evitare il tremolio o la cattiva risposta in velocità da parte dei servo.

I pin che ho scelto per il progetto sono 5,6,9,10,11 rispettivamente per mignolo, anulare, medio, indice e pollice.

mano robotica collegamentiLa protoshield mano robot servo flex sensor

Puoi osservare la protoshield realizzata per il progetto sia dal lato alto:

protoshield mano frontesia dal suo lato inferiore:

protoshield mano retrolo sketch

#include <Servo.h> 

/****************************************************/

#define sensPollice A5
#define sensIndice A4
#define sensMedio A3
#define sensAnulare A1
#define sensMignolo A2

/****************************************************/

#define pinPollice 11
#define pinIndice 10
#define pinMedio 9
#define pinAnulare 6
#define pinMignolo 5

/****************************************************/

Servo police;
Servo indice;
Servo medio;
Servo anulare;
Servo mignolo;

/****************************************************/

int valuePollice = 0;
int valueIndice = 0;
int valueMedio = 0;
int valueAnulare = 0;
int valueMignolo = 0;

/****************************************************/

int rangePollice[] = {130,270};
int rangeIndice[] = {130,270};
int rangeMedio[] = {130,270};
int rangeAnulare[] = {130,270};
int rangeMignolo[] = {130,270};

/****************************************************/

int gradiPollice[] = {0,180};
int gradiIndice[] = {0,180};
int gradiMedio[] = {0,180};
int gradiAnulare[] = {0,180};
int gradiMignolo[] = {0,180};

/****************************************************/

void setup() {
  Serial.begin(9600);
  pinMode( sensPollice,INPUT );
  pinMode( sensIndice,INPUT  );
  pinMode( sensMedio,INPUT   );
  pinMode( sensAnulare,INPUT );
  pinMode( sensMignolo,INPUT );

  police.attach( pinPollice   );
  indice.attach( pinIndice    );
  medio.attach(  pinMedio     );
  anulare.attach( pinAnulare );
  mignolo.attach( pinMignolo  );

  police.write( gradiPollice[0]   );
  indice.write( gradiIndice[0]    );
  medio.write(  gradiMedio[0]     );
  anulare.write( gradiAnulare[0] );
  mignolo.write( gradiMignolo[0]  );

}

/****************************************************/

void loop() {

  valuePollice = map(analogRead(sensPollice), rangePollice[0], rangePollice[1], gradiPollice[0], gradiPollice[1]);
  valueIndice  = map(analogRead(sensIndice), rangeIndice[0], rangeIndice[1], gradiIndice[0], gradiIndice[1]);
  valueMedio   = map(analogRead(sensMedio), rangeMedio[0], rangeMedio[1], gradiMedio[0], gradiMedio[1]);
  valueAnulare = map(analogRead(sensAnulare), rangeAnulare[0], rangeAnulare[1], gradiAnulare[0], gradiAnulare[1]);
  valueMignolo = map(analogRead(sensMignolo), rangeMignolo[0], rangeMignolo[1], gradiMignolo[0], gradiMignolo[1]);

  police.write( valuePollice   );
  indice.write( valueIndice    );
  medio.write(  valueMedio     );
  anulare.write( valueAnulare  );
  mignolo.write( valueMignolo  );

  delay( 200 );
}

il principio di funzionamento della mano robot è semplice: ciascun sensore di flessione invia il segnale letto ad arduino a cui hai insegnato a riconoscere il valore a sensore disteso e piegato, in funzione di questo valore controlli la rotazione del servo dal grado minimo impostato al grado massimo, ecco nel dettaglio per ciascun dito:

linee 05-09: definisci i pin a cui hai collegato i sensori, un sensore per ciascun pin;

linee 13-17: definisci i pin a cui hai collegato i servo, seguendo lo schema sopra;

linee 21-25: definisci le istanze di tipo Servo per ciascun dito;

linee 29-33: imposta i valori di angolo iniziale dei servo;

linee 37-41: imposta il range di valori minimo e massimo che ciascun sensore può restituirti, come avrai notato sono distinti per ciascun sensore per consentirti di impostare i valori dettagliati;

linee 45-50: imposta i range di movimento per ciascun servo, in questo modo se un servo deve compiere un movimento inferiore alla massima escursione del servo puoi definirlo nella variabile corrispondente;

linee 55-71: inizializza i pin a cui sono connessi i sensori, i pin a cui sono attaccati i servo con il metodo attach() e posiziona i servo in posizione di partenza;

linee 79-88: leggi i valori analogici restituiti dai sensori e ricava con la funzione map() la corrispondenza tra valore minimo e massimo letto dal sensore e la rispettiva rotazione del servo in gradi;

linee 90-94: imposta il valore in gradi al servo che controlla il movimento del dito;

linea 96: attendi 200 millisecondi tra un movimento ed il successivo, puoi ridurre questo tempo fino al minimo tempo necessario dai tuoi servo a raggiungere la posizione desiderata.

Il video

Ecco il video della demo fatta prima di inviare tutto all’ITIS di Vorbano:

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/mano-robot-servo-flex-sensor.html

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.