HAM RADIO - ARDUINO/VB6 * CAMALEON * Interfaccia LOOP MAGNETICA
PRESENTAZIONE FIRMWARE ARDUINO APP CAMALEON SERVOMOTORI
Arduino ed i Servomotori
Il Servomotore è formato da un Motore in CC racchiuso in un contenitore, all’interno del quale troviamo anche una serie di ingranaggi che ne riducono il numero
di giri e che vincolano l’albero del Motore CC all’albero di un potenziometro. Inoltre all’interno del contenitore troviamo anche un circuito di controllo.
Il circuito di controllo, all’interno del Servomotore, riceve un impulso PWM ed ordina al Motore CC di ruotare. Il circuito di controllo si occuperà anche della
lettura del valore del potenziometro che, poiché vincolato al motore tramite gli ingranaggi, ruoterà di conseguenza. Così facendo il circuito di controllo saprà
esattamente la posizione dell’albero del Motore CC e farà in modo di tenerlo nella posizione indicata dall’impulso di PWM ricevuto.
Solitamente i Servomotori sono in grado di ruotare di 180° (ma esistono anche modelli che ruotano di 90°, 270° o 360°), hanno 3 fili, due per l’alimentazione e
uno per il segnale di controllo. I colori dei fili variano a seconda dei modelli:
– Il polo negativo solitamente è nero, o marrone
– Il polo positivo solitamente è rosso
– Il filo del segnale di controllo può essere bianco, giallo, arancio o blu.
Sono molto utilizzati nel modellismo e ne esistono di varie dimensioni, dai piccoli SG-90 con ingranaggi in plastica che possono sopportare piccoli carichi, fino
a quelli più grandi con ingranaggi in metallo che possono muovere carichi di alcuni Kg.
Il sistema di controllo sarà lo stesso per tutti, ma varierà naturalmente la tensione di alimentazione e la corrente di cui avranno bisogno per muoversi.
Necessitano di uno “speciale” impulso PWM perchè possano ruotare e non solo una normale tensione come per i motori in CC.
Solitamente per i Servomotori occorre inviare ogni 20 ms un impulso positivo di ampiezza variabile che va da un minimo di 1 ms ad un massimo di 2 ms.

Variando l’ampiezza dell’impulso si possono ottenere tutti i valori di posizione che variano da 0° fino al massimo supportato dal servo. (nell’esempio 180°).
La frequenza e l’ampiezza del segnale possono variare in base ai vari modelli di Servomotori.
Come Usare i Servomotori con Arduino
Con l’IDE di Arduino viene fornita una libreria dedicata all’uso dei Servomotori, la libreria Servo.h
Per l’uso con Arduino Uno si può utilizzare il seguente schema:

Sketch per provarne il funzionamento del servomotore:
#include <Servo.h> // Carica la libreria Servo
#define potenziometro A0 // Pin potenziometro
#define pinservo 9 // Pin dove collegato al servo
Servo myservo; // Crea l'oggetto myservo
int pos; // Dichiara una variabile per salvare la posizione del servo
void setup() {
myservo.attach(pinservo); // Attacca il pinservo all'oggetto myservo
}
void loop() {
pos = map(analogRead(potenziometro), 0, 1023, 0, 180); // Converte il valore del potenziometro in posizione del servo
myservo.write(pos); // Scrive il valore convertito in gradi sul pin 9
delay(500); // Attende 500 ms
}
* Nel Firmware CAMALEON verrà passata direttamente la posizione angolare da raggiungere senza potenziometri.
Note sulla libreria Servo.h:
E’ importante tenere conto che con la classe Servo possiamo utilizzare tutti i pin digitali e analogici di Arduino e non solo le uscite di tipo PWM.
La libreria Servo supporta fino a 12 motori sulla maggior parte delle schede Arduino e 48 su Arduino Mega. Su schede diverse dalla Mega, l’uso della libreria disabilita la funzionalità
analogWrite () (PWM) sui pin 9 e 10, indipendentemente dal fatto che ci sia o meno un Servo collegato su quei pin.
Sul Mega, è possibile utilizzare fino a 12 servo senza interferire con la funzionalità PWM. L’uso di motori dal 12° al 23° disabiliterà il PWM sui pin 11 e 12.
La libreria servo.h mette a disposizione alcuni metodi:
- attach(): permette di specificare su quale pin è connesso il nostro servo e legarlo all’oggetto Servo
- attached(): controlla che un oggetto di tipo Servo sia collegata ad un pin
- detach(): rimuove il collegamento tra l’oggetto Servo e il pin a cui era legata
- read(): legge la posizione angolare del nostro servo, restituisce l’ultimo valore passato con write()
- write(): impartisce al servo l’angolo a cui posizionarsi
- writeMicroseconds(): imposta la velocità di rotazione del servo, in un servo standard il valore va da 1000 a 2000;
I Servomotori a Rotazione Continua
I Servomotori a Rotazione Continua sono dei Servomotori modificati ai quali è stato tolto il potenziometro sostituendolo
con un trimmer non vincolato all’asse del Motore CC. Così facendo, possono ruotare all’infinito in un verso o nell’altro e possono essere utilizzati come i comuni Servomotori.
Sono molto utilizzati nei robot "rover" come motori per le ruote, in quanto hanno molta coppia per via degli ingranaggi interni che funzionano da
riduttori e non necessitano di elettronica esterna per funzionare.
- Inviando .write(0) ruoteranno al massimo della velocità in un senso.
- Inviando .write(90) il motore resterà fermo.
- Inviando .write(180) ruoteranno al massimo della velocità nell’altro senso.
- Con valori intermedi si può regolare la velocità di rotazione nei vari sensi.
Solitamente su un lato hanno un foro per la taratura del trimmer, questo serve a regolarne lo stop quando si invia il .write(90),
sono tarati di fabbrica, ma a volte dovrà essere eseguita una piccolissima taratura, fatelo delicatamente perchè basta poco a danneggiarlo!

Torna a ARDUINO →