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 sapere che la complessità dell’opera nasce dalla necessità di utilizzare un duty-cycle per impartire comandi a questi meravigliosi oggetti in grado di trasformare la volontà elettronica in movimento. Arduino dispone, secondo i modelli, di uscite PWM ossia pin digitali in grado di generare un duty-cycle utilizzabile per far muovere un servo.
Il modo più semplice per pilotare i servomotori è 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 alcuni esempi.

Esempio 1

In questo esempio vedremo il servomotore compiere una rotazione da 0 a 180° e viceversa.

Incominciamo collegando il nostro servo come nella figura seguente:

Servo e Arduino

Schema :

Servo e Arduino schema

E’ importante che tu tenga conto che con la classe Servo puoi utilizzare tutti i pin digitali e analogici di Arduino e non solo le uscite di tipo PWM, questo disabilita la funzione analogWrite() normalmente utilizzabile con le uscite PWM di Arduino.

Sketch:

Esempio 2

Nel secondo esempio comanderemo la rotazione di un servomotore con un potenziometro o trimmer.

Schema:

Servo e potenziometro Servo e potenziometro schema

Sketch:

 

Ciao, se ti è piaciuto il mio blog e se qualche articolo ti è stato d’aiuto, se te la senti e se vuoi, incentiva il mio lavoro offrendomi un caffè o qualunque altra cosa preferisci farmi ricevere. Cercherò di dare il meglio di me e di inserire articoli sempre più interessanti e utili 🙂 . Clicca QUI per la donazione!