Controllo del Motore Servo: Una Guida Completa
Punti 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 esattamente 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 setup hardware minimo.
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 invece di ruotare continuamente. Questa caratteristica rende i motori servo ideali per la robotica, l'automazione e i progetti di hobby.
Questo articolo spiega come funziona il controllo del motore servo, i diversi tipi di motori servo e vari metodi e dispositivi di controllo. Fornisce inoltre esempi di applicazioni e progetti con 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 elaborazione 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 corrente dell'albero di uscita.

Il dispositivo di feedback rileva i dati di posizione al circuito di controllo, che quindi regola l'energia del motore DC per allineare la posizione effettiva con quella 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 on/off per creare impulsi di varia larghezza. La larghezza degli impulsi determina la posizione dell'albero di uscita.
Ad esempio, quando si invia un segnale PWM con una larghezza d'impulso di 1,5 millisecondi (ms), il servo si muoverà nella posizione neutra (90 gradi).

Quando si invia un segnale PWM con una larghezza d'impulso di 1 ms, il servo si muoverà nella posizione minima (0 gradi). Quando si invia un segnale PWM con una larghezza 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. La larghezza d'impulso può variare da 1 ms a 2 ms all'interno di questo periodo.
Ci sono molti modi per generare e inviare segnali PWM ai motori servo. Alcuni dei metodi più comuni sono:
Utilizzare una scheda Arduino o un altro microcontrollore
Utilizzare un potenziometro o un altro sensore analogico
Utilizzare un joystick o un altro dispositivo di input digitale
Utilizzare un controller o driver dedicato per servomotori
Nelle sezioni successive, esploreremo ciascuno di questi metodi in dettaglio e vedremo alcuni esempi di come funzionano.
Controllare un Motore Servo con Arduino
Arduino è una delle piattaforme più popolari per controllare i 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 cavo rosso dal servo si collega a 5V sulla scheda Arduino. Il cavo nero dal servo si collega a GND sulla scheda Arduino. Il cavo bianco dal servo si collega 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 oscillare 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); // Scrive la posizione all'oggetto Servo
delay(15); // Attende 15 ms
}
for (pos = 180; pos >= 0; pos -= 1) { // Ciclo da 180 a 0 gradi
myservo.write(pos); // Scrive la posizione all'oggetto Servo
delay(15); // Attende 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 passo per rallentare il movimento.
Carica questo codice sulla tua scheda Arduino utilizzando il pulsante Upload dell'IDE, e osserva mentre il tuo motore servo si muove avanti e indietro in modo fluido.
Controllare un Motore Servo con Potenziometro
Un potenziometro è un sensore analogico che può variare la propria resistenza a seconda di quanto si gira 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 collegamento per connettere un potenziometro e un motore servo a una scheda Arduino è mostrato di seguito:
Il cavo rosso dal potenziometro si collega a 5V sulla scheda Arduino. Il cavo nero dal potenziometro si collega a GND sulla scheda Arduino. Il cavo verde dal potenziometro si collega al pin A0 sulla scheda Arduino.
Il cavo rosso dal servo si collega a 5V su un'altra riga del breadboard. Il cavo nero dal servo si collega a GND su un'altra riga del breadboard. Il cavo bianco dal servo si collega al pin D9 su un'altra riga del breadboard.
Per programmare la tua scheda Arduino, avrai bisogno di utilizzare lo stesso codice dell'esempio precedente ma cambiare alcune linee:
#include <Servo.h> // Includi la libreria Servo
Servo myservo; // Crea oggetto Servo
int potpin = A0; // Pin collegato 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); // Legge il valore dal potenziometro (0 -1023)
val = map(val,0,1023,0,180); // Mappa l'intervallo di valori (0 -180)
myservo.write(val); // Scrive il valore mappato all'oggetto Servo
delay(15); // Attende 15 ms
}
Questo codice utilizza la funzione analogRead(potpin) per leggere il valore dal potenziometro collegato 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.
Controllare 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 collegamento 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 cavo rosso dal modulo joystick si collega a 5V sulla scheda Arduino. Il cavo nero dal modulo joystick si collega a GND sulla scheda Arduino. Il cavo verde dal modulo joystick si collega al pin A0 sulla scheda Arduino.
Il cavo rosso dal servo si collega a 5V su un'altra riga del breadboard. Il cavo nero dal servo si collega a GND su un'altra riga del breadboard. Il cavo bianco dal servo si collega al pin D9 su un'altra riga del breadboard.
Per programmare la tua scheda Arduino, avrai bisogno di utilizzare lo stesso codice dell'esempio precedente ma cambiare alcune linee:
#include <Servo.h> // Includi la libreria Servo
Servo myservo; // Crea oggetto Servo
int joyX = A0; // Pin collegato 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); // Legge 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); // Scrive il valore mappato all'oggetto Servo
delay(15); // Attende 15 ms
}