Arduino per comandare due servo con i pulsanti

Alcuni appassionati di arduino mi hanno segnalato la volontà di usare arduino per comandare due servo con i pulsanti, in pratica utilizzando 3 pulsanti per ciascuno dei servo motori è possibile spostare questi ultimi nella posizione desiderata.

arduino servo pulsanti

il progetto in se non è molto complesso, devi procurarti il materiale seguente:

  • n.1 arduino uno, leonardo, mini ….
  • n.1 breadboard per le connessioni
  • n. 14 cavetti per breadboard
  • n. 6 ponticelli rigidi da breadboard, in alternativa usa 6 cavetti
  • n. 6 pulsanti NA
  • n.6 resistenze da 330ohm
  • n.2 servomotori modellistici

a questo punto assembla il tutto.

Montaggio arduino per comandare due servomotori con i pulsanti

per aiutarti nel collegamento dei cavi ho scelto di utilizzare delle foto:

arduino servo e pulsanti

posiziona i 6 pulsanti sulla breadboard collegando uno dei terminali di ogni pulsante al polo positivo di arduino ( +5v )  e l’altro terminale al polo negativo attraverso la resistenza da 330ohm:

connessione arduino servo pulsnati

ciascun cavetto che collega il pulsante ad arduino lo devi collegare sul pin del pulsante a cui hai collegato la resistenza da 330ohm, se non ti è chiaro questo passaggio puoi leggere l’articolo Tutorial: Arduino, i servo e i pulsanti

collega i pin provenienti dai pulsanti ad arduino:

arduino servo pulsanti connessioni

ho deciso di collegarli agli ingressi analogici per mostrati come si rileva un pulsante collegato all’ingresso analogico invece che al solito ingresso digitale. Avrai notato che i cavetti colorati li hai collegati ai pin A0,A1 ed A2 mentre quelli verdi ai pin A3,A4 ed A5 questa distinzione ti serve anche a capire quali pulsanti sono connessi al servomotore denominato X ( i colorati ) e quali al servo denominato Y ( i verdi ) la seguente figura può aiutarti:

arduino per comandare due servo con i pulsanti

Lo sketch del progetto

#include <Servo.h> 

#define servoPinX 10
#define servoPinY 11

Servo myservoX;
Servo myservoY;

int buttX[]    = { A0,A1,A2 };
int gradX[]   = { 0,90,180 };
int lengthX = 3;

int buttY[]    = { A3,A4,A5 };
int gradY[]   = { 0,90,180 };
int lengthY = 3;

int servoPosX = 0;
int servoPosY = 0;

void setup()
{
  myservoX.attach( servoPinX );
  myservoX.write( servoPosX );

  myservoY.attach( servoPinY );
  myservoY.write( servoPosY );

  for (int pin=0; pin<lengthX; pin++)
  {
    pinMode( buttX[pin],INPUT );
  }
  for (int pin=0; pin<lengthY; pin++)
  {
    pinMode( buttY[pin],INPUT );
  }

} 

void loop()
{
  for (int pin=0; pin<lengthX; pin++)
  {
    if ( analogRead(buttX[pin]) > 1000 ) { servoPosX = gradX[pin]; }
  }

  for (int pin=0; pin<lengthY; pin++)
  {
    if ( analogRead(buttY[pin]) > 1000 ) { servoPosY = gradY[pin]; }
  }

  myservoX.write( servoPosX );
  myservoY.write( servoPosY );
  delay( 15 );
}

partiamo dalle righe fondamentali:

linea 01: includi la classe Servo.h;

linee 03-04: definisci le due costanti servoPinX e servoPinY a cui sono connessi rispettivamente il pin di controllo;

linee 06-07: definisci due istanze dell’oggetto Servo;

linea 09: definisci un array di tipo integer i cui valori indicano i pin a cui sono collegati i pulsanti relativi al controllo del servo X;

linea 10: definisci un array di tipo integer i cui valori indicano i gradi che vuoi impostare alla pressione del pulsante corrispondente;

linea 11: imposta una variabile con la lunghezza dei due array definiti alle linee 09 e 10;

avrai notato che i due array corrispondono in numero di elementi, questo perchè userai un unico indice per entrambi in pratica alla pressione del pulsante corrispondente al pin A1 di arduino il servo si posizionerà a 90°, per A2 a 180°

linee 13-15: imposti le stesse variabili viste alle linee 09-11 per l’asse Y;

linee 17-18: imposta a 0 il valore dei gradi iniziali a cui il servo deve andare prima della pressione di un pulsante;

linee 22-23: imposta il pin a cui è connesso il servomotore X per l’istanza corrispondente e posizionlo al valore in gradi definito nella variabile servoPosX;

linee 25-26: esegui la stessa impostazione per l’istanza Y;

linee 28-31: imposta un ciclo for da 0 al valore massimo definito nella variabile lengthX e per ciascun valore di pin imposta a INPUT la modalità di funzionamento del pin corrispondente;

linee 33-35: esegui la stessa operazione vista alle linee 28-31 per i valori di Y;

linee 41-44: imposta un ciclo del tutto simile a quello impostato alla linea 28 con la differenza che per ciascun valore della variabile pin testi che il convertitore analogico-digitale di arduino ti restituisca un valore superiore a 1000. Come saprai il convertitore analogico digitale di arduino uno è a 10bit che vuol dire una risoluzione di 1024 bit da 0 a 5v, quando il pulsante è aperto il valore di tensione sul pin analogico è dato dalla corrente che transita attraverso la resistenza da 330ohm, alla pressione del pulsante al pin arriva +5v diretti ed il valore dell’ADC è di 1023 circa, per questo motivo puoi definire la condizione alla linea 43 testando che il valore analogico letto sul pin Ax ( 0 <= x < 3 ) sia superiore a 1000;

linee 46-49: imposta il ciclo visto alle linee 41-44 per la componente Y del progetto;

linee 51-52: sposta il servo alla posizione di angolo desiderata;

linea 53: attendi 15 millisecondi prima di ricominciare il loop per consentire l’eseguzione dei comandi precedenti;

Il video su come usare arduino per comandare due servo con i pulsanti

ecco il video mente testo il progetto ultimato:

Buon divertimento

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/arduino-servo-e-pulsanti.html

Lascia un commento

Your email address will not be published.

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