⚙️ Arduino • Servo • Robotica

Servomotore con Arduino: controllo della posizione passo passo

Impariamo a collegare e comandare un servomotore con Arduino usando la libreria Servo.h, facendo ruotare l’albero in diverse posizioni con un semplice sketch completamente commentato.

Difficoltà Principiante
Componente Servomotore
Segnale Pin digitale 9
In poche parole: Arduino invia al servomotore il comando della posizione desiderata. Con la libreria Servo.h possiamo indicare direttamente l’angolo da raggiungere con write().

Cosa imparerai

  • che cos’è un servomotore e dove viene utilizzato;
  • come collegare alimentazione, massa e filo di segnale;
  • come includere la libreria Servo.h;
  • come creare un oggetto Servo;
  • come associare il servo a un pin con attach();
  • come impostare una posizione con write();
  • come creare una sequenza di movimenti temporizzati.

Che cos’è un servomotore

Un servomotore è un attuatore progettato per portare il proprio albero in una posizione precisa. A differenza di un normale motore DC, non viene usato semplicemente per girare continuamente: normalmente gli chiediamo di raggiungere un determinato angolo e di mantenerlo.

Per questo i servo sono molto diffusi nella robotica, nei modellini, nei piccoli bracci meccanici, nei sistemi di orientamento e in moltissimi progetti Arduino.

Concetto chiave: il comando non dice al servo “gira per mezzo secondo”, ma gli comunica una posizione da raggiungere.

Materiale necessario

🔌 Arduino Uno o compatibile
⚙️ 1 servomotore compatibile
🧩 Breadboard, se necessaria
🔗 Cavetti jumper

Kit Arduino consigliato

Se stai iniziando, un kit completo può essere comodo perché comprende molti dei componenti utilizzati nei progetti del sito.

🛒 Guarda il kit Arduino consigliato

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

Come si collega un servomotore ad Arduino

I piccoli servomotori utilizzano normalmente tre collegamenti: alimentazione, massa e segnale di controllo.

Collegamento servo Funzione Arduino
VCC Alimentazione 5V
GND Massa GND
Segnale Comando posizione Pin 9
Nota sull’alimentazione: per un piccolo servo da esperimento il collegamento mostrato nel tutorial può essere sufficiente. Servo più grandi o sotto carico possono richiedere una sorgente di alimentazione separata. In quel caso la massa dell’alimentatore e quella di Arduino devono essere in comune.
Schema di collegamento servomotore con Arduino

Schema di collegamento del servomotore ad Arduino.

La libreria Servo.h

L’IDE Arduino include la libreria Servo.h, che semplifica molto il controllo dei servomotori. Il primo passaggio consiste quindi nell’includerla nello sketch:

Inclusione della libreria
#include <Servo.h>

Successivamente creiamo un oggetto che rappresenta il nostro servo:

Creazione del servo
Servo servo1;

Codice Arduino commentato

Correzione importante rispetto al vecchio sketch: nel file originale erano presenti valori negativi come Servo1.write(-180). Per questo tutorial utilizziamo invece posizioni comprese tra 0° e 180°, coerenti con l’uso standard di Servo.write().
Servomotore con Arduino — movimento a passi
// ==========================================================
// SERVOMOTORE CON ARDUINO
// Movimento del servo tra diverse posizioni
// ==========================================================

// Include la libreria ufficiale per il controllo dei servomotori
#include <Servo.h>

// Crea un oggetto Servo chiamato servo1
Servo servo1;

// Pin digitale utilizzato per il segnale del servo
const int servoPin = 9;

// Tempo di pausa tra una posizione e la successiva
// 500 millisecondi = mezzo secondo
const int pausa = 500;

void setup() {

  // Associa l'oggetto servo1 al pin digitale 9
  servo1.attach(servoPin);

}

void loop() {

  // Porta il servo a 0 gradi
  servo1.write(0);
  delay(pausa);

  // Porta il servo a 30 gradi
  servo1.write(30);
  delay(pausa);

  // Porta il servo a 60 gradi
  servo1.write(60);
  delay(pausa);

  // Porta il servo a 90 gradi
  servo1.write(90);
  delay(pausa);

  // Porta il servo a 120 gradi
  servo1.write(120);
  delay(pausa);

  // Porta il servo a 150 gradi
  servo1.write(150);
  delay(pausa);

  // Porta il servo a 180 gradi
  servo1.write(180);
  delay(pausa);

  // Ritorna verso la posizione iniziale
  servo1.write(150);
  delay(pausa);

  servo1.write(120);
  delay(pausa);

  servo1.write(90);
  delay(pausa);

  servo1.write(60);
  delay(pausa);

  servo1.write(30);
  delay(pausa);

  servo1.write(0);
  delay(pausa);

}

Il codice spiegato passo passo

1

Importiamo Servo.h

La direttiva #include <Servo.h> rende disponibili le funzioni necessarie per controllare il servo.

2

Creiamo l’oggetto Servo

Servo servo1; crea l’oggetto che useremo per inviare i comandi al motore.

3

Colleghiamo il servo al pin 9 nel programma

Con servo1.attach(servoPin) comunichiamo alla libreria quale pin deve generare il segnale di controllo.

4

Impostiamo l’angolo

servo1.write(90), per esempio, chiede al servo di raggiungere la posizione di 90°.

5

Introduciamo una pausa

delay(500) mantiene una pausa di mezzo secondo prima di inviare la posizione successiva.

Cosa succede modificando delay()

La pausa non determina direttamente la velocità interna del servo: stabilisce semplicemente quanto tempo il programma aspetta prima di inviare il comando successivo.

  • delay(1000) → pausa di 1 secondo;
  • delay(500) → pausa di mezzo secondo;
  • delay(100) → nuovi comandi molto più ravvicinati.

Simulazione online

Puoi provare il progetto anche con la simulazione Tinkercad originale.

▶️ Apri la simulazione Tinkercad

Scarica lo sketch originale

Manteniamo disponibile anche il file storico associato alla pagina.

⬇️ Scarica servo.ino

Debug rapido

  • controlla che il filo di segnale sia collegato al pin 9;
  • verifica 5V e GND;
  • assicurati che la massa sia comune se utilizzi un’alimentazione esterna;
  • controlla che #include <Servo.h> sia presente;
  • se il servo vibra o Arduino si riavvia, verifica soprattutto l’alimentazione;
  • non forzare meccanicamente il servo oltre i suoi limiti.

Varianti del progetto

  • controllare il servo con un potenziometro;
  • comandarlo con due pulsanti;
  • muoverlo in base alla distanza rilevata da un sensore;
  • realizzare un piccolo braccio robotico;
  • creare una barriera automatica;
  • controllare la posizione dal Monitor Seriale.

Cosa devi ricordare

  • Servo.h semplifica il controllo del servomotore.
  • attach() associa l’oggetto Servo a un pin.
  • write() imposta la posizione desiderata.
  • delay() introduce una pausa tra i comandi.
  • l’alimentazione è importante soprattutto con servo più grandi o sotto carico.

Domande frequenti

Perché il servo vibra?

Può dipendere dall’alimentazione, dai collegamenti o dal carico meccanico. Controlla prima di tutto 5V, GND e la qualità dell’alimentazione.

Posso usare un pin diverso dal 9?

Sì, modificando il valore di servoPin e collegando il filo di segnale al pin scelto.

Perché non uso valori negativi?

In questo tutorial utilizziamo il comando Servo.write() con posizioni da 0° a 180°, evitando i valori negativi presenti nel vecchio sketch.

Il servo può ruotare continuamente?

Questo progetto è pensato per un servo posizionale. I servo a rotazione continua funzionano in modo diverso: il comando controlla il movimento anziché una posizione angolare assoluta.