Esistono in commercio vari modelli di servo tester che permettono di verificare il funzionamento dei servomotori prima di essere utilizzati nei propri progetti.
Se non si dispone di questo strumento e non si intende realizzarne uno, si potrà utilizzare lo stesso Arduino che opportunamente programmato, permetterà di effettuare queste verifiche.
In questo articolo vedremo come realizzare con Arduino un servo tester che si occuperà di inviare il corretto valore di PWM per far ruotare l’albero del servo secondo l’angolo impostato. Questo è possibile premendo il relativo tasto.
Indice
Schema del servo tester con Arduino
Sotto è riportato lo schema dei collegamenti da effettuare. Da Arduino partono i cavi che raggiungono i tre pulsanti di comando e il servomotore. Sono poi presenti i cavi di alimentazione.
In questo caso i 5V non sono forniti da Arduino ma viene utilizzato un modulo regolatore installato sulla bread board.
Collegare l’alimentazione del servomotore direttamente ad Arduino potrebbe danneggiare la scheda, questo perché l’assorbimento di corrente del motore presente all’interno del servo, può superare la corrente fornita dal regolatore presente sulla scheda.
I tre tasti P1, P2 e P3 permetteranno si ruotate il perno del servo 90°, 0° e 180° rispettivamente.
Pin Arduino | Collegato a |
---|---|
D3 | Pin segnale servomotore |
D4 | Collegato al pulsante P1 - Servo in posizione centrale |
D5 | Collegato al pulsante P2 - Rotazione servo a DX |
D6 | Collegato al pulsante P3 - Rotazione servo a SX |
+5V | Alimentazione Arduino e servomotore |
GND | Contatto di massa Arduino e servomotore |
Materiale occorrente
Il materiale per realizzare il nostro servo tester con Arduino è formato da:
Scheda Arduino UNO |
Breadboard da 400 Punti |
Pulsante da Circuito stampato 6x6mm |
Connettore Strip Maschio 3×1 |
Jumper Dupont M/M |
Alimentatore per Breadboard |
Caratteristiche servo utilizzato
Nell’esempio si è utilizzato un mini servomotore, nella tabella sottostante le sue caratteristiche
Tipo servo | Micro servo Digital 9g - SG90 |
Ingranaggi | In plastica |
Tensione di esercizio | 4.8 v |
Intervallo di temperatura: | 0 ℃ _ 55 ℃ |
Larghezza banda morta: | 1us |
Lunghezza cavo | 25 cm |
Peso(g) | 9 |
Connettore | JR |
Coppia(kg/cm)(4.8v) | 1.8 |
Velocità(sec/60deg) | 0.1 |
A(mm) | 34.5 |
B(mm) | 22.8 |
C(mm) | 26.7 |
D(mm) | 12.6 |
E(mm) | 32.5 |
F(mm) | 16 |
Listato del programma
Il programma per testare i servo motori è molto semplice, utilizza la libreria #servo.h, che è presente di default nell’IDE di Arduino e non deve essere ricercata in rete. Vediamo in dettaglio il programma:
- Il programma comincia richiamando la libreria con il comando #include <Servo.h>.
- La seconda linea crea l’oggetto di tipo Servo cui è assegnato il nome myservo e sarà l’oggetto su cui opererà.
- Sono poi definite le porte utilizzate a cui è assegnato un nome per essere poi facilmente identificate nel programma.
- Viene creata la funzione setup() in cui sono presenti i comandi di inizializzazione, prima di tutto viene utilizzato attach(), questo metodo lega l’oggetto myservo al pin a cui abbiamo collegato il nostro servo.
- Sono poi definiti la funzione dei pin dei pulsanti impostati come input con attivazione della resistenza interna al chip come pullup.
- Si crea la funzione loop() utilizzata ciclicamente da Arduino.
- A seconda del tasto premuto, riconosciuto tramite l’istruzione if (digitaleRead() == LOW ) viene utilizzato il metodo write() che passa all’oggetto myservo la posizione che deve raggiungere. In questo caso indicato in gradi con valori che possono essere compresi tra 0 e 180, per cui l’albero del servo ruoterà sino a portarsi all’angolo indicato.
- Imposta un ritardo delay() pari a 500 millesimi di secondo, in modo da permettere al servo di raggiungere la posizione prima di proseguire il programma.
- Alla fine dei controlli attende ulteriori 20 millesimi di secondo prima di rieseguire il controllo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <Servo.h> Servo myservo; int servo = 3; //Porta a cui è collegato il servo int degree90 = 4; //Porta a cui è collegato il tasto P1 int degree0 = 5; //Porta a cui è collegato il tasto P2 int degree180 = 6; //Porta a cui è collegato il tasto P3 void setup() { myservo.attach(servo); pinMode(degree0, INPUT_PULLUP); pinMode(degree90, INPUT_PULLUP); pinMode(degree180, INPUT_PULLUP); } void loop() { if (digitalRead(degree0) == LOW) { myservo.write(5); delay (500); } if (digitalRead(degree90) == LOW) { myservo.write(90); delay (500); } if (digitalRead(degree180) == LOW) { myservo.write(175); delay (500); } delay(20); } |