Tutorial: Arduino, i servo e i pulsanti

In passato hai pilotato i servo per modellisti con Arduino ed uno o più potenziometri, ma potrebbe non essere il metodo migliore per il tuo progetto.

servo arduino e pulsanti

Una prima controindicazione viene dal fatto che un potenziometro potrebbe non essere di tipo lineare ma di tipo logaritmico, per comprendere la differenza ti invito a leggere la pagina di wikipedia relativa: potenziometro.

Una seconda controindicazione è che un potenziometro col tempo perde la sua risposta, questo è dovuto al deterioramento naturale del materiale resistivo che con l’uso ed il tempo si deteriora. Esistono differenti tipi di potenziometri costruiti per durare nel tempo e mantenere invariate le proprie caratteristiche per anni, questo tipo di potenziometri sono di solito impiegati negli impianti audio, hanno di contro il prezzo e la difficoltà di reperimento in ambienti hobbistici.

Tralasciando queste informazioni, il tuo progetto potrebbe non avere necessità di comandare un servo con un potenziometro ma con due pulsanti che ad ogni pressione incrementino o decrementino di un grado l’angolo in cui è posizionata la leva del servo.

Iniziamo dallo schema dei collegamenti:

servo e pulsanti

Ed ecco lo sketch:

// Controlling a servo position using two button
// by Alfieri Mauro <https://www.mauroalfieri.it> 

#include <Servo.h> 

Servo myservo;  // create servo object

int grado = 0;
int minGrad = 0;
int maxGrad = 180;
int pinServo = 3;
int prev = A1;
int next = A0;

void setup()
{
  myservo.attach( pinServo );
  myservo.write( grado );

  pinMode( prev, INPUT );
  pinMode( next, INPUT );
} 

void loop()
{
  if ( analogRead( prev ) > 1000 ) { grado--; }
  if ( analogRead( next ) > 1000 ) { grado++; }

  if ( grado > maxGrad ) { grado = maxGrad; }
  if ( grado < minGrad ) { grado = minGrad; }

  myservo.write( grado );
  delay(15);
}

Come avrai già notato usi la libreria Servo.h per pilotare il servo, in questo modo tutta la parte di comando del server è demandata alla libreria e ti puoi concentrare sulla gestione dei pulsanti.

inizia dalla linea 04: includi la libreria Servo.h;

linea 06: inizializza un oggetto di tipo Servo che chiami myservo;

linea 08: definisci la variabile grado in cui memorizzare il grado a cui vuoi che il servo si posizioni, ad esempio se vuoi che il servo parta dalla posizione di 90° non dovrai far altro che impostare questa variabile a 90, nell’esempio è impostata a 0° considerando che sia questa la posizione iniziale del servo;

linea 09: definisci la variabile minGrad in cui memorizzi il limite minimo a cui vuoi che il servo arrivi, se ad esempio il servo non deve ami scendere sotto i 10° imposta a 10 questo valore, l’impostazione dipende dal tuo progetto e dal tipo di movimento che il servo deve avere;

linea 10: analoga alla linea precedente a meno del fatto che la variabile maxGrad definisce il limite in gradi superiore del movimento.

linea 11: definisci la variabile pinServo in cui memorizzi il valore del pin a cui colleghi il servo, in questo modo se per tue esigenze di progetto vuoi collegare il servo ad un altro pin puoi farlo e basta cambiare solo questa variabile;

linee 12-13: definisci in queste linee due variabili prev e  next ripettivamente legate ai pin A1 e Ao, ossia gli input analogici, questa configurazione permette di utilizzare i pin analogici A0 e A1 per impartire i comandi, anche se li utilizzi come input di tipo digitale, vedrai in seguito perchè;

linea 17: imposti l’oggetto myservo indicandogli il pin a cui è collegato il servo;

linea 18: con il metodo write() decidi dove posizionare il servo, in gradi, essendo questa la funzione setup() imposta il grado di partenza del servo all’accensione del progetto o alla pressione del pulsante reset di Arduino;

linee 20-21: imposta i pin collegati ad A0 ed A1 come INPUT mediante il comando pinMode di Arduino;

linea 26: contiene alcuni comandi in cascata il primo è l’if di controllo, la condizione che se verificata decrementa il valore attribuito alla varibile grado posizionando il servo un grado in meno rispetto alla precedente posizione; la condizione if verifica che il pulsante connesso al pin A1 sia stato premuto per farlo utilizzi la funzione analogRead() di arduino, leggendo il valore di prev. Cosa avviene in pratica: prev indica il pin A1 a cui è connesso il pulsante con cui decrementi i gradi del servo, ad ogni pressione del pulsante il valore letto dal comando analoRead( prev )  è 1023, valore superiore a 1000, che è il valore di controllo con cui lo confronti, la condizione è quindi verificata e il valore di grado è decrementato.

linea 27: è una condizione identica a quella della linea 26, l’unica differenza è nella variabile verificata da analogRead che in questo caso è next collegata al pin A0;

linea 29: definisci una condizione di verifica del raggiungimento del valore massimo, serve a evitare che il servo vada oltre il valore massimo che hai impostato alla linea 10, in pratica ogni volta che la pressione del pulsante connesso ad A0 viene premuto la linea 27 incrementa di 1 il valore di grado, questa condizione verifica che se grado è arrivato a superare il valore impostato come grado massimo   ( maxGrad ) il valore della variabile grado resti identico a quello massimo impostato;

linea 30: è una condizione identica a quella definita alla linea 29, la cui differenza è quella di reagire al valore minimo dei gradi e non massimo;

linea 32: utilizza il metodo write dell’oggetto servo per impostare il grado definito alle linee precedenti e spostare il servo in quella posizione;

linea 33; imposta un tempo di 15 millisecondi un cui il servo può raggiungere il grado impostato, puoi diminuire questo valore se hai un servo con una risposta maggiore in velocità o puoi aumentarlo se vuoi che la pressione prolungata di un pulsante abbia un effetto rallentato sul raggiungimento della posizione desiderata da parte del servo.

Questo è l’effetto dello sketch:

Buon divertimento.

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

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

202 pings

Skip to comment form

  1. […] 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 […]

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.