Robotica educativa/Servomotore
Il servomotore SG90
[modifica | modifica sorgente]![](http://upload.wikimedia.org/wikipedia/commons/thumb/e/e8/Servo_Motor.jpg/220px-Servo_Motor.jpg)
Il servomotore SG90 viene utilizzato nei microcontrollori per la gestione di robot di vario genere. È in grado di compiere una rotazione di , semplicemente specificando il grado in formato numerico e intero.
Come visibile in figura l'uscita è composta da tre terminali: giallo, rosso e marrone.
Colore | Significato | Valori consentiti |
---|---|---|
giallo | Driver | |
rosso | Alimentazione positiva | |
marrone | Messa a terra |
Il controllo del motore avviene mediante tecnica PWM (Pulse Width Modulation), pertanto un Arduino Uno ne può controllare fino a sei, attraverso i pedini 3, 5, 6, 9, 10 e 11, quelli con il simbolo della tilde (~) vicino al loro numero.
La Pulse Width Modulation (modulazione a larghezza di impulsi) comunica attraverso la dimensione della parte alta del segnale, nota come ciclo utile, spesso espressa in percentuale, rende possibile inviare dati - anche complessi - con una singola linea.
Di seguito come viene controllato l'angolo del servomotore tramite un singolo impulso.
![SG90 PWM it](http://upload.wikimedia.org/wikipedia/commons/thumb/8/80/SG90_PWM_it.svg/600px-SG90_PWM_it.svg.png)
Da quanto precede, segue che sono necessari 20 millisecondi per comunicare al motore in quale angolo posizionarsi. Questo è uno dei valori minimi consigliati come tempo d'attesa tra una posizione e la successiva del motore.
Schema circuitale
[modifica | modifica sorgente]Di seguito lo schema circuitale. Lo schema è molto semplice perché, oltre all'alimentazione, è necessaria solo una connessione per la trasmissione dati relativi all'angolo che l'albero del servomotore deve assumere.
Naturalmente, se si vogliono controllare più servomotori (come detto si può arrivare fino a sei, con Arduino Uno) è opportuno prendere in considerazione l'utilizzo di un'alimentazione esterna, per non sovraccaricare il microcontrollore.
Nel codice che segue il servomotore viene identificato come ciaociao
, perché come si può notare dai parametri, viene utilizzato per collegarci una mano di cartone stilizzata ed effettuare un saluto.
![Connessione SG90 ad Arduino](http://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Connessione_SG90_ad_Arduino.svg/600px-Connessione_SG90_ad_Arduino.svg.png)
Nel caso di controllo di un robot antropomorfo i nomi potrebbero essere spalla
, avambraccio
, braccio
e mano
(ovvero la pinza o - più comunemente - end effector).
Codice
[modifica | modifica sorgente]#include <Servo.h>
#define pin_servo 6 // Pin a cui è collegato il servomotore
Servo ciaociao; // Nome del servomotore
int attesa = 0; // Tempo di attesa al termine di un'operazione
int velocitaservo = 20; // Tempo di attesa tra un comando e il successivo
int angoloiniziale = 15; // Posizione iniziale del servomotore
int angolofinale = 75; // Posizione finale del servomotore
void setup() {
ciaociao.attach(pin_servo); // Identificazione pin servo motore
ciaociao.write(angoloiniziale); // Si porta il motore all'angolo iniziale
}
void loop() {
// Le azioni vengono divise in due parti
// apertura e chiusura (es. di una finestra)
apri();
chiudi();
}
// Movimenta il motore in senso antiorario
void apri() {
// Conta da angoloiniziale fino a angolofinale - 1
for( int i = angoloiniziale; i < angolofinale; i++ ) {
// Assegna l'angolo al motore
ciaociao.write(i);
// Attende quanto specificato
delay (velocitaservo);
}
// Fa una pausa
delay (attesa);
}
// Movimenta il motore in senso orario
void chiudi() {
// Conta da angolofinale fino a angoloiniziale + 1
for( int i = angolofinale; i > angoloiniziale; i-- ) {
// Assegna l'angolo al motore
ciaociao.write(i);
// Attende quanto specificato
delay (velocitaservo);
}
// Fa una pausa
delay (attesa);
}
Espansioni suggerite
[modifica | modifica sorgente]- Come accennato, controllare più servomotori. Naturalmente l'utilizzo di un'alimentazione esterna è fortemente consigliato. In questo cosa, al microcontrollore va connessa la messa a terra;
- un semplice esempio potrebbe essere la simulazione dei tergicristalli, o simili.