Vai al contenuto

Robotica educativa/Servomotore

Wikibooks, manuali e libri di testo liberi.
Indice del libro


Il servomotore SG90

[modifica | modifica sorgente]
Servomotore SG90

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

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

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).

#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.