Progetto

Generale

Profilo

Muoviamo un motore servo RC con Arduino

Utilizzando la funzione write() della libreria Servo di Arduino possiamo muovere un motore servo standard indicando l'angolo di rotazione dell'albero in gradi.

I motori standard possono ruotare da 0° a 180°, quindi il valore che utilizziamo nella funzione deve essere compreso tra 0 e 180.

Portiamo il motore standard in posizione centrale

Per portare un motore standard in posizione centrale dobbiamo inserire nella funzione il valore 90.
Nel nostro esempio porteremo un motore collegato al pin D2 in posizione centrale:

#include <Servo.h> // importiamo la libreria per controllare i motori servo

Servo servo1;     // creiamo un'istanza di Servo e la nominiamo  servo1

void setup() 
{ 
  servo1.attach(2);  // colleghiamo l'istanza al pin D2
  servo1.write(90);  // portiamo il servo in posizione centrale
} 

void loop() {} 

Muoviamo il motore

Utilizzando ripetutamente la funzione write() possiamo muovere il motore dalla posizione centrale ad altre angolazioni.

È da notare l'utilizzo della variabile pausa, che introduce un'attesa tra un comando e il successivo: è importante utilizzare una pausa poiché un motore impiega un certo tempo per spostarsi da una posizione all'altra e se riceve un nuovo comando prima di aver raggiunto la posizione può cominciare ad avere problemi di funzionamento.
Per determinare il valore minimo della pausa è opportuno consultare la scheda tecnica del motore e verificare la sua velocità operativa.
Il valore della variabile è espresso in millisecondi.

#include <Servo.h> // importiamo la libreria per controllare i motori servo

Servo servo1;      // creiamo un'istanza di Servo e la nominiamo servo1
int pausa = 800;   // creiamo una variabile che useremo come valore della pausa

void setup() 
{ 
  servo1.attach(2);   // colleghiamo servo1 al pin D2
  servo1.write(90);   // portiamo il servo in posizione centrale
} 

void loop() 
{ 
  delay(pausa);      // inseriamo una pausa prima del comando successivo
  servo1.write(175); // portiamo il servo a 175°
  delay(pausa);
  servo1.write(85);  // portiamo il servo a 85°
  delay(pausa);
  servo1.write(10);  // portiamo il servo a 10°
  delay(pausa);
  servo1.write(90);  // portiamo il servo in posizione centrale
} 

Riferimenti

Arduino - Servo write()

Make: Arduino Bots and Gadgets, by Kimmo Karvinen and Tero Karvinen (O’Reilly). Copyright 2011 O’Reilly Media, 978-1-449-38971-0.

Make: Arduino Bots and Gadgets

Download