Sei sulla pagina 1di 3

Contro||o de||a pos|z|one d| un Servo (servo 1)

A coto Jel ptof. Closeppe 5polletoo - 01-09-2012



Si vuole controllare la posizione di un servo utilizzando il valore di un angolo inserito nel proprio
sketch. Ad esempio, si desidera che un sensore di un robot oscilli entro un arco o si muova ad una
posizione da te selezionata.
Il programma realizzato usa la libreria Servo distribuita con Arduino. Il servo presenta tre cavetti di
connessione: alimentazione, massa ed ingresso. Pu, quindi, essere collegato completamente ad
Arduino o si pu avvalere di una alimentazione esterna purch la massa sia collegata anche a quella
di Arduino. In questo esempio si far oscillare il servo tra 0 e 180 e viceversa.

Si riporta il listato:

#include <Servo.h>
Servo mioservo; // crea un oggetto servo di nome 'mioservo'per controllare un servomotore
int angolo = 0; // variabile per memorizzare la posizione del servo
void setup()
{
mioservo.attach(9); // collega il servomotore sul pin 9 all'oggetto 'mioservo'
}
void loop()
{
for(angolo = 0; angolo < 180; angolo += 1) // va da 0 gradi a 180 gradi
{ // con passo di 1 grado
mioservo.write(angolo); // dice al servo di andare in posizione 'angolo'
delay(20); // attende 20ms tra i servo comandi
}
for(angolo = 180; angolo >= 1; angolo -= 1) // va da 180 gradi a 0 gradi
{
mioservo.write(angolo); // dice al servo di andare in posizione 'angolo'
delay(20); // attende 20ms tra i servo comandi
}
}
La sintassi della istruzione mioservo.attach prevede un parametro obbligatorio, il pin, a cui
collegato il servo, e due parametri opzionali min e max:
mioservo.attach(pin, min, max) ove min rappresenta la posizione minima e max la posizione
massima espresse in micrsecondi. Esempio:
mioservo.attach(9, 1000, 2000); indica che utilizza il pin 9, imposta il minimo a 1000s ed il
massimo a 2000s. Poich la maggior parte dei servo rispondono ad impulsi misurati in
microsecondi e non in gradi, gli argomenti che seguono il pin devono informare la libreria del servo
quanti microsecondi utilizzare per 0 o per 180. Non tutti i servo hanno una corsa di 180 per cui
occorre accertarsi sperimentalmente del range supportato. Omettendo i campi min e max per default
viene assunto il valore minimo di 544 per 0 e 2400 per 180.
Per far compiere la rotazione di un angolo desiderato si utilizza listruzione mioservo.write(angolo);
ove angolo langolo, in gradi, che si vuole far realizzare al servo. Nel listato si fornito, ogni
20ms, un angolo crescente da 0 a 180 e successivamente da 180 a 0. In pratica una corsa dura 3,6s
e quella opposta pure 3,6s. Luscita sul pin collegato al servo non in PWM.

Approfondimenti sul servomotore

Il servo costituito da un motore completo di riduzione meccanica, un sistema di feedback per la
posizione dellasse di uscita e tutta lelettronica di controllo racchiusi in un unico contenitore.
Tramite un sistema di comando opportuno possibile far ruotare lasse di uscita del servo e
posizionarlo in una precisa posizione voluta.



Dalla scatola del servo fuoriescono lasse della riduzione meccanica al quale collegare il dispositivo
da mettere in movimento, i due fili per lalimentazione del servo e un filo per il controllo.
Lalbero di uscita del servo pu ruotare soltanto di 180.
Lelettronica del servo confronta il valore dato dal potenziometro collegato al sistema di riduzione
del moto rotatorio, con il segnale di comando del convertitore tempo-tensione alimentato dal dal
filo di controllo e, dal confronto, decide se deve far muovere il motore, in che direzione e, in
qualche caso, con quale velocit.




La durata dellimpulso pu variare tra un minimo di 1 ms ad un massimo di 2 ms.
A seconda della durata di questo impulso, il servo far ruotare il suo perno di uscita fino ad
assumere una posizione ben precisa.
Le durate minimo e massimo dellimpulso corrisponderanno alle posizioni estreme dellasse del
servo e, ovviamente, limpulso di durata 1,5 ms porter il servo ad assumere la posizione centrale.
Questo impulso va continuamente ripetuto, altrimenti il servo si metter a riposo e non raggiunger
la posizione desiderata.
La durata della pausa tra un impulso e laltro deve essere maggiore di 10 ms ma non deve superare i
40 ms.
La durata tipica della pausa tra gli impulsi di 20 ms che corrisponde alla frequenza di 50Hz.
Alla fine, per comandare un servo, si va a generare un treno di impulsi che ha una fortissima
somiglianza con un segnale PWM ma non ha nulla a che vedere con esso.