Come usare un servomotore con Arduino: collegamenti, 180° e 360°

Descrizione

In questa lezione vedremo come funziona un servomotore con Arduino, quali sono i modelli più usati, come collegarlo e come controllare sia un servo da 180 gradi sia un servo a rotazione continua 360 gradi. È una guida rapida pensata per robot, bracci meccanici, sensori orientabili e piccoli progetti Arduino.

Componenti necessari:

  • 1x Arduino UNO
  • 1x Servomotore (consigliato SG90)
  • Cavi jumper (e breadboard opzionale)

Servomotore con Arduino: come funziona e come controllarlo

Cosa è un servomotore?

Un servomotore, spesso chiamato semplicemente servo, è un piccolo attuatore che integra motore, ingranaggi ed elettronica di controllo.
Arduino invia al servo un segnale di comando e il circuito interno regola automaticamente il movimento.
Nei servo posizionali questo permette di raggiungere un angolo preciso; nei servo a rotazione continua permette invece di controllare direzione e velocità.

Tipi di servomotore: SG90S, MG90S e MG996R

I principali tipi di servomotori più usati

I servo cambiano soprattutto per dimensioni, coppia, materiale degli ingranaggi e tipo di movimento.
Per Arduino i modelli più comuni appartengono alla famiglia dei micro servo oppure ai servo standard ad alta coppia.

SG90S: micro servo leggero

Lo SG90S è un micro servo piccolo e leggero, adatto a progetti semplici, sensori orientabili e piccoli meccanismi. È una buona scelta quando servono poco peso e poca coppia.

MG90S: micro servo con ingranaggi metallici

Il MG90S mantiene dimensioni compatte ma utilizza ingranaggi metallici. È generalmente più resistente di un micro servo con ingranaggi in plastica ed è utile per piccoli robot e meccanismi sottoposti a maggiore sforzo.

MG996R: servo standard ad alta coppia

Il MG996R è più grande e potente ed è usato quando il progetto deve muovere carichi maggiori, per esempio in bracci robotici o articolazioni. Richiede più corrente rispetto ai micro servo, quindi è consigliata un'alimentazione esterna adeguata.

Wiring: come collegare un servomotore ad Arduino

Collegamento di un servomotore ad Arduino UNO: segnale, alimentazione e massa Signal → pin 9 · VCC → 5V · GND → GND

Il filo di segnale controlla il servo e nel nostro esempio è collegato al pin digitale 9.
I colori dei fili possono cambiare tra i produttori, quindi controlla sempre le indicazioni del tuo modello.
Per servo potenti come MG996R è preferibile usare un'alimentazione esterna e collegare il GND dell'alimentatore al GND di Arduino.

Servo da 180 gradi: controllo della posizione con Arduino

Un servomotore da 180° è un servo posizionale: Arduino gli indica un angolo e il servo si sposta verso quella posizione.
Con la libreria Servo puoi utilizzare servo.write() con valori indicativamente compresi tra 0 e 180.
L'escursione reale può variare leggermente in base al modello.

servo_180.ino
// https://nemiatools.com
#include <Servo.h>

Servo myServo;

void setup() {
  myServo.attach(9); // Pin PWM del servo
}

void loop() {
  myServo.write(0);   // Muovi a 0 gradi
  delay(1000);

  myServo.write(90);  // Muovi a 90 gradi
  delay(1000);

  myServo.write(180); // Muovi a 180 gradi
  delay(1000);
}

In questo esempio il servo si sposta tra 0°, 90° e 180°. Puoi sostituire questi valori con l'angolo richiesto dal tuo progetto.

Servo da 360 gradi: controllo di direzione e velocità con Arduino

Un servo da 360° a rotazione continua funziona in modo diverso: non puoi chiedergli di raggiungere un angolo preciso.
Il comando determina invece direzione e velocità di rotazione.
Con molti modelli, un valore vicino a 90 arresta il servo, valori inferiori lo fanno ruotare in una direzione e valori superiori nell'altra.

servo_360.ino
// https://nemiatools.com
#include <Servo.h>

Servo myServo;

void setup() {
  myServo.attach(9); // Pin PWM del servo
}

void loop() {
  myServo.write(0);   // Ruota in una direzione
  delay(2000);

  myServo.write(90);  // Stop
  delay(1000);

  myServo.write(180); // Ruota nella direzione opposta
  delay(2000);

  myServo.write(90);  // Stop
  delay(1000);
}

Il punto di arresto di un servo 360° non è sempre esattamente 90.
Se il servo si muove lentamente quando dovrebbe essere fermo, prova valori vicini come 89, 90 o 91 fino a trovare il centro corretto.