Controllo del Motore Servo: Una Guida Completa
Apprendimenti chiave:
Definizione del Controllo del Motore Servo: Il controllo del motore servo permette una manipolazione precisa della posizione, velocità e accelerazione del motore attraverso segnali elettronici.
Meccanismo di Feedback: Il sistema di feedback, spesso un potenziometro o un encoder, assicura che l'uscita del motore corrisponda con precisione all'ingresso di controllo.
Segnale PWM: La modulazione a larghezza d'impulso (PWM) è cruciale per impostare la posizione del servo variando la durata degli impulsi elettrici.
Arduino e Motori Servo: L'uso di una scheda Arduino è un modo popolare ed efficace per programmare e controllare i motori servo con un minimo setup hardware.
Applicazioni dei Motori Servo: I motori servo sono essenziali per progetti che richiedono un controllo posizionale accurato, come robotica e sistemi automatizzati.
Un motore servo è un motore progettato per alta precisione e accuratezza nella rotazione. Si differenzia da un tipico motore DC per la sua capacità di mantenere una posizione specifica piuttosto che ruotare in continuazione. Questa caratteristica rende i motori servo ideali per la robotica, l'automazione e i progetti hobbistici.
Questo articolo spiega come funziona il controllo del motore servo, i diversi tipi di motori servo e vari metodi e dispositivi di controllo. Fornisce anche esempi di applicazioni e progetti di motori servo.
Cos'è un Motore Servo?
Un motore servo è definito come un attuatore che consente un controllo preciso della posizione (angolo), velocità e accelerazione. Un tipico motore servo è composto da tre componenti principali: un motore DC, un circuito di controllo e un dispositivo di feedback.
Il motore DC alimenta il servo e si collega a ingranaggi che riducono la velocità e aumentano la coppia sull'albero di uscita.

L'albero di uscita è la parte del servo che ruota e muove il carico.
Il circuito di controllo è responsabile della ricezione e del trattamento dei segnali di ingresso da un controller esterno. Questi segnali indicano al servo quale posizione, velocità o direzione raggiungere. Il circuito di controllo invia anche energia al motore DC per farlo funzionare.
Il dispositivo di feedback è solitamente un potenziometro o un encoder che misura la posizione attuale dell'albero di uscita.

Il dispositivo di feedback rinvia i dati di posizione al circuito di controllo, che quindi regola l'energia del motore DC per allineare la posizione effettiva con la posizione desiderata dal segnale di ingresso.
Il loop di feedback tra il circuito di controllo e il dispositivo di feedback assicura che il servo possa muoversi e mantenere con precisione qualsiasi posizione all'interno del suo intervallo di movimento.
Come Controllare un Motore Servo?
I motori servo vengono controllati inviando un segnale PWM (modulazione a larghezza d'impulso) alla linea di segnale del servo. La PWM è una tecnica che commuta rapidamente un segnale per creare impulsi di ampiezze variabili. L'ampiezza degli impulsi determina la posizione dell'albero di uscita.
Ad esempio, quando invii un segnale PWM con un'ampiezza d'impulso di 1,5 millisecondi (ms), il servo si muoverà nella posizione neutrale (90 gradi).

Quando invii un segnale PWM con un'ampiezza d'impulso di 1 ms, il servo si muoverà nella posizione minima (0 gradi). Quando invii un segnale PWM con un'ampiezza d'impulso di 2 ms, il servo si muoverà nella posizione massima (180 gradi).
Il segnale PWM ha una frequenza di 50 Hz, il che significa che si ripete ogni 20 ms. L'ampiezza d'impulso può variare da 1 ms a 2 ms in questo periodo.
Ci sono molti modi per generare e inviare segnali PWM ai motori servo. Alcuni dei metodi più comuni sono:
Usando una scheda Arduino o un altro microcontrollore
Usando un potenziometro o un altro sensore analogico
Usando un joystick o un altro dispositivo di ingresso digitale
Usando un controller o driver dedicato per servomotori
Nelle sezioni seguenti, esploreremo ciascuno di questi metodi in maggior dettaglio e vedremo alcuni esempi di come funzionano.
Controllo di un Motore Servo con Arduino
Arduino è una delle piattaforme più popolari per il controllo dei motori servo. Le schede Arduino hanno uscite PWM integrate che possono essere utilizzate per inviare segnali ai servomotori. Arduino dispone anche di una libreria Servo che facilita la scrittura di codice per il controllo dei servomotori.
Per controllare un motore servo con Arduino, avrai bisogno di:
Una scheda Arduino (come Arduino UNO)
Un motore servo standard (come SG90)
Cavi jumper
Un breadboard (opzionale)
Il filo rosso dal servo si connette a 5V sulla scheda Arduino. Il filo nero dal servo si connette a GND sulla scheda Arduino. Il filo bianco dal servo si connette al pin 9 sulla scheda Arduino.
Per programmare la scheda Arduino, avrai bisogno di utilizzare l'IDE Arduino (online o offline). Puoi utilizzare uno degli esempi dalla libreria Servo o scrivere il tuo codice.
Il seguente codice mostra come far spazzare un motore servo avanti e indietro su 180 gradi utilizzando un ciclo for:
#include <Servo.h> // Includi la libreria Servo
Servo myservo; // Crea oggetto Servo
int pos = 0; // Variabile per la posizione
void setup() {
myservo.attach(9); // Collega l'oggetto Servo al pin 9
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Ciclo da 0 a 180 gradi
myservo.write(pos); // Scrivi la posizione all'oggetto Servo
delay(15); // Attendi 15 ms
}
for (pos = 180; pos >= 0; pos -= 1) { // Ciclo da 180 a 0 gradi
myservo.write(pos); // Scrivi la posizione all'oggetto Servo
delay(15); // Attendi 15 ms
}
}
Questo codice utilizza due cicli per incrementare e decrementare la variabile di posizione da 0 a 180 gradi e viceversa. Quindi scrive questo valore all'oggetto Servo utilizzando myservo.write(pos). Aggiunge anche un ritardo di 15 ms tra ogni passaggio per rallentare il movimento.
Carica questo codice sulla tua scheda Arduino utilizzando il pulsante Upload dell'IDE, e osserva mentre il tuo motore servo spazza avanti e indietro in modo fluido.
Controllo di un Motore Servo con Potenziometro
Un potenziometro è un sensore analogico che può variare la propria resistenza a seconda di quanto giri la manopola. Puoi utilizzare un potenziometro come dispositivo di input per controllare un motore servo.
Per controllare un motore servo con un potenziometro, avrai bisogno di:
Una scheda Arduino (come Arduino UNO)
Un motore servo standard (come SG90)
Un potenziometro (10k Ohm)
Cavi jumper
Un breadboard
Il diagramma di cablaggio per connettere un potenziometro e un motore servo a una scheda Arduino è mostrato di seguito:
Il filo rosso dal potenziometro si connette a 5V sulla scheda Arduino. Il filo nero dal potenziometro si connette a GND sulla scheda Arduino. Il filo verde dal potenziometro si connette al pin A0 sulla scheda Arduino.
Il filo rosso dal servo si connette a 5V su un'altra riga sul breadboard. Il filo nero dal servo si connette a GND su un'altra riga sul breadboard. Il filo bianco dal servo si connette al pin D9 su un'altra riga sul breadboard.
Per programmare la tua scheda Arduino, avrai bisogno di utilizzare lo stesso codice dell'esempio precedente ma cambiare alcune righe:
#include <Servo.h> // Includi la libreria Servo
Servo myservo; // Crea oggetto Servo
int potpin = A0; // Pin connesso al potenziometro
int val = 0; // Variabile per leggere il valore del potenziometro
void setup() {
myservo.attach(9); // Collega l'oggetto Servo al pin D9
}
void loop() {
val = analogRead(potpin); // Leggi il valore dal potenziometro (0 -1023)
val = map(val,0,1023,0,180); // Mappa l'intervallo di valori (0 -180)
myservo.write(val); // Scrivi il valore mappato all'oggetto Servo
delay(15); // Attendi 15 ms
}
Questo codice utilizza la funzione analogRead(potpin) per leggere il valore dal potenziometro connesso al pin A0. Quindi utilizza la funzione map(val,0,1023,0,180) per mappare l'intervallo di valori da 0 -1023 a 0 -180 gradi. Quindi scrive il valore mappato all'oggetto Servo utilizzando la funzione myservo.write(val). Aggiunge anche un ritardo, come nell'esempio precedente.
Puoi caricare questo codice sulla tua scheda Arduino utilizzando il pulsante Upload dell'IDE. Dovresti vedere il tuo motore servo muoversi in base alla posizione della manopola del potenziometro.
Controllo di un Motore Servo con Joystick
Un joystick è un dispositivo di input digitale che può rilevare la direzione e la magnitudine del movimento lungo due assi. Puoi utilizzare un joystick per controllare un motore servo mappando l'asse x del joystick all'angolo del servo.
Per controllare un motore servo con un joystick, avrai bisogno di:
Una scheda Arduino (come Arduino UNO)
Un motore servo standard (come SG90)
Un modulo joystick (come KY-023)
Cavi jumper
Un breadboard
Il diagramma di cablaggio per connettere un modulo joystick e un motore servo a una scheda Arduino è mostrato di seguito:
!https://www.makerguides.com/wp-content/uploads/2019/01/Servo-motor-control-with-Arduino-and-joystick-wiring-diagram.png
Il filo rosso dal modulo joystick si connette a 5V sulla scheda Arduino. Il filo nero dal modulo joystick si connette a GND sulla scheda Arduino. Il filo verde dal modulo joystick si connette al pin A0 sulla scheda Arduino.
Il filo rosso dal servo si connette a 5V su un'altra riga sul breadboard. Il filo nero dal servo si connette a GND su un'altra riga sul breadboard. Il filo bianco dal servo si connette al pin D9 su un'altra riga sul breadboard.
Per programmare la tua scheda Arduino, avrai bisogno di utilizzare lo stesso codice dell'esempio precedente ma cambiare alcune righe:
#include <Servo.h> // Includi la libreria Servo
Servo myservo; // Crea oggetto Servo
int joyX = A0; // Pin connesso all'asse x del joystick
int val = 0; // Variabile per leggere il valore del joystick
void setup() {
myservo.attach(9); // Collega l'oggetto Servo al pin 9
}
void loop() {
val = analogRead(joyX); // Leggi il valore dall'asse x del joystick (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Mappa l'intervallo di valori (0 - 180)
myservo.write(val); // Scrivi il valore mappato all'oggetto Servo
delay(15); // Attendi 15 ms
}