Arduino - Parte 7 - Servomotore e ciclo for



L’istruzione for usa una variabile detta contatore che cambia valore ogni volta che viene ripetuto il gruppo di istruzioni e viene usata per stabilire se continuare il ciclo o meno. Nell’istruzione for troviamo tre elementi separati da un punto e virgola:

l’init del contatore
la condizione che deve essere vera per continare il ciclo
l’incremento del contatore


Questa e’ la sintassi:

for(int contatore = valore; test; incremento del contatore) {
"codice da eseguire"

Il contatore viene usato solo all’interno del ciclo for e di solito ha un nome molto semplice (ad esempio “x” o “i”). L’esempio seguente esegue un gruppo di istruzioni 9 volte:

for(int x = 0; x < 10; x++) {
"codice da eseguire"
}
In questo caso il blocco di istruzioni viene ripetuto finché x è minore di 10 – cioè 9 volte – e la variabile x viene incrementata usando l’operatore++ che corrisponde all’espressione:
x = x + 1
cioè assegna ad x il suo valore aumentato di uno. 



Vediamo ora come applicare questo ciclo for all'utilizzo di un servomotore.
In questo tutorial vi mostrerò come comandare un Servomotore con Arduino. Il servomotore è un dispositivo capace di eseguire dei movimenti meccanici in funzione del segnale applicato al suo ingresso. Sostanzialmente un servo è composto da un motore elettrico, un motoriduttore ed un circuito di feedback per la gestione della posizione. In commercio, esiste una vasta scelta di servi (così comunemente chiamati), ciascuno caratterizzabile per valore di coppia e precisione. Quindi le caratteristiche comuni tra i servo sono principalmente, l’angolo di rotazione, la velocità di rotazione e la coppia motrice.
I comuni servomotori hanno un angolo di rotazione di circa 180° (la rotazione effettiva è un pò inferiore), inoltre esistono altri tipi di servi che hanno una rotazione continua e, anzichè pilotarne la posizione, ne possiamo gestire la velocità. Qualunque sia il servo scelto, ci troveremo davanti sempre 3 contatti di cui due servono per l’alimentazione (5V e GND) mentre il terzo è il pin di controllo che nel nostro caso andrà collegato in un pin di arduino.
Se vuoi pilotare dei servo prima di tutto devi utilizzare una libreria, che traduca angoli in segnali e ti eviti di dover impazzire con i duty-cycle e i calcoli dei tempi; la libreria in questione è la Servo spiegata molto dettagliatamente sulla pagina ufficiale presente sul sito. Questa classe ti mette a disposizione alcuni metodi che semplificano di molto l’obiettivo:
attach(): permette di specificare su quale pin è connesso il nostro servo e legarlo all’oggetto Servo;
attached(): controlla che un oggetto di tipo Servo sia collegata ad un pin;
detach(): rimuove il collegamento tra l’oggetto Servo e il pin a cui era legata;
read(): legge la posizione angolare del nostro servo, restituisce l’ultimo valore passato con write();
write(): impartisce al servo l’angolo a cui posizionarsi, su servo a rotazione continua imposta la velocità di rotazione 0=velocità massima in un senso, 90=fermo, 180=velocià massima nella direzione inversa;
writeMicroseconds(): imposta la velocità di rotazione del servo, in un servo standard il valore va da 1000 a 2000, in un servo a rotazione continua si comporta allo stesso modo della write().
Ora dovresti avere le idee più chiare su cosa poter fare con questa libreria, passiamo a realizzare lo sketch. 




Come si collega?
Il servomotore è fornito di 3 pin: il rosso va al 5V, il marrone va al GND e l'arancione va ad un pin digitale.

Sketch
Ora ci manca soltanto il codice di programmazione:

#include "Servo.h" // include la Libreria Servo.h
Servo myservo; // crea l’oggetto di tipo Servo, myservo sarà l’oggetto su cui opererai
int pos = 0; // inizializza una variabile di tipo intero pos il cui valore sarà la posizione da impartire al servo

void setup()
{
myservo.attach(8); // lega l’oggetto myservo al pin a cui abbiamo collegato il nostro servo, in questo caso il pin 8
}

void loop()
{
for(pos = 0; pos < 180; pos += 1) // imposta un ciclo con valori che vanno da 0 a 180, sarano i gradi di spostamento del nostro servo
{
myservo.write(pos); // con il metodo write() passi all’oggetto myservo la posizione che deve raggiungere,
// il servo si sposterà gradualmente dalla sua posizione 0° alla posizione 180°
delay(15); // imposta un ritardo di 15 millesimi di secondo per ogni ciclo del for.
// Più sarà alto il ritardo più il servo sarà lento.
}
for(pos = 180; pos>=1; pos-=1) // In questo caso imposta un ciclo con valori che vanno da 180 a 0 così il servo torna indietro 
{
myservo.write(pos);
delay(15);
}
}

Video

 
Share on Google Plus

About Pi Key

0 commenti:

Posta un commento