
Servo Motori e Arduino
Avrai sicuramente sentito parlare di braccia robotiche, robottini che camminano, sistemi di apertura porte o rotazione. Ecco per poter sviluppare alcuni di questi sistemi può essere fondamentale l’utilizzo di servomotori.
Ne esistono di diversi tipi e dimensioni. Grazie ad una serie di ingranaggi e ad una elettronica interna riescono a pilotare il perno in modo da garantirne una rotazione di precisione generalmente tra 0° e 180°.
In questo articolo andremo a descrivere il funzionamento di uno dei servomotori più comuni abbinato ad Arduino.
Il Micro Servo 9g SG90 è un servomotore dalle contenute dimensioni, generalmente con un case in plastica trasparente blu utile per i progetti casalinghi come i nostri. Io ad esempio lo ho usato sulla macchinina telecomandata per ruotare il sensore ad ultrasuoni a piacimento, oppure per ruotare la telecamera collegata al Raspberry Pi.

Viene venduto generalmente con le due viti di fissaggio, alcune alette da montare sopra l’albero a seconda dell’utilizzo e una vite per fissare l’aletta scelta all’albero.
Come cavetteria è fornito di 3 cavi per gestire il meccanismo. Il cavo marrone è per il polo negativo (GND), quello rosso è per il positivo (VCC 5V) e quello arancio è per il segnale(PWM) che viene convertito in rotazione.
Ma passiamo ad Arduino e vediamo come pilotare questo servomotore.
Apriamo la IDE e creiamo un nuovo sketch che chiameremo Servo_test.ino (lo trovate su github).
Come prima cosa andremo ad includere la libreria Servo.h che ci consentirà di utilizzare il servomotore in maniera semplice.
#include <Servo.h>
Diamo quindi un nome al nostro Pin che piloterà il servomotore, nel mio caso il Pin Digitale 9.
#define PIN_SERVO 9 // Arduino PIN9
Dichiariamo una variabile di tipo Servo che inizializzerà il servomotore.
Servo servo;
Nel Setup inizializziamo il nostro servo con la attach, passando come input il nostro pin. Questo servirà a creare la connessione tra il pin fisico di Arduino ed il nostro oggetto di tipo Servo.
void setup() {
// attaches the servo on pin 9 to the servo object
servo.attach(PIN_SERVO);
}
Ora possiamo definire il nostro loop. In questo caso andremo semplicemente a modificare la posizione del nostro servomotore a intervalli regolari di 1 sec.
void loop() {
// move to pos 0
servo.write(0);
// wait 1 sec
delay(1000);
// move to pos 45
servo.write(45);
// wait 1 sec
delay(1000);
// move to pos 90
servo.write(90);
// wait 1 sec
delay(1000);
// move to pos 180
servo.write(180);
// wait 1 sec
delay(1000);
}
Questo sketch è quanto basta per capire il funzionamento base del servomotore.
Ora che abbiamo capito come è semplice il funzionamento di questo utilissimo componente, possiamo sbizzarrirci nell’utilizzarlo nei nostri progetti.
Nessun commento