CONTROLLO SERVOMOTORE CON ARDUINO

Breve tutorial per Illustrare la Libreria Servo di Arduino, illustrando le diverse Funzioni e presentando un Semplice Esempio di Applicazione…

 
 
 



 

INTRO

Come illustrato nella guida sui servomotori (https://www.ne555.it/i-servomotori/) i servomotori hanno bisogno di un impulso di durata determinata per mettersi nella posizione desiderata. Arduino dispone di una libreria per il controllo dei servomotori e un singolo Arduino può controllare fino a 12 servi e fino a 48 sull’Arduino mega.

La libreria ha le seguenti funzioni:

  • #include <Servo.h>  //Stringa da inserire all’inizio del codice per richiamare le funzioni della libreria
  • servo servo1;  //Assegno il nome servo1 al mio servomotore.
  • servo1.attach(pin, min, max);  //Serve ad indicare a quale pin è collegato il servomotore, min indica il minimo impulso (500 per 0°) mentre max indica il massimo impulso (2000 per 180°).
  • write(angolo);  //sposto il servomotore all’angolo desiderato.
  • writeMicroseconds(numero_microsecondi);  //Simile al precedente ma invece di scrivere l’angolo si scrive la durata dell’impulso in microsecondi.
  • servo1.read();  //Ritorna il valore precedentemente scritto.
  • servo1.attached();  //Ritorna vero se il servo è connesso falso altrimenti.
  • servo1.detach();  //Stacca il servo e viene quindi permesso di utilizzare i pin di PWM normalmente.

A meno di applicazioni particolari si usano solo le prime 4 funzioni. La funzione di lettura ritorna semplicemente il valore scritto in precedenza, ma se il servo ha subito variazioni esterne non riesce a leggerle.

 



 

CODICE E SCHEMA DI ESEMPIO

Andiamo a realizzare un esempio semplice, un pulsante che controlla lo stato del servocomando. Se premuto il servo va in posizione 0° altrimenti sta in posizione 90°. Il tutto si aggiorna ogni secondo.

Prima di tutto con la funzione servo.attach(pin, min, max) vado a trovare i valori di minimo e massimo controllando il motore e il suo angolo. 500ms di impulso corrispondono a 0 gradi mentre per raggiungere i 180° l’impulso deve durare 2600ms.

Il codice è il seguente:

#include <Servo.h>            //richiama la libreria servo

Servo servo1;                 //ogetto servo1
const int pulsante =  2;      //variabile pulsante uguale 2
int statopulsante = 0;

void setup() {
  servo1.attach(9, 500, 2600);            //Servo connesso al pin9
  pinMode(pulsante, INPUT);              //Pin 2 assegnato come ingresso
}
void loop() {
  statopulsante = digitalRead(pulsante);     //Leggi stato pulsante
  if (statopulsante == HIGH) {               //Se il pulsante è premuto
    servo1.write(0);}                        //Servo impostato a 0°
  else{servo1.write(90);}                    //Altrimenti 180°
  delay(1000);                               //Aggiorna ogni secondo
}




Includo la libreria del servo, creo l’oggetto servo1, il pulsante e lo stato del pulsante. Nel setup inizializzo il servo sul pin9 e con minima e massima durata dell’impulso. Inizializzo il pin 2 come ingresso del pulsante.

Nel ciclo infinito controllo se il pulsante è premuto o no e in base allo stato del pulsante metto in posizione 0° se è allo stato alto, ovvero premuto, altrimenti 90°. Questo ciclo si ripete ogni secondo.

Lo schema è il seguente:

Il servo è connesso con il filo rosso alla tensione 5V, il marrone a GND e il giallo è connesso al pin 9 di Arduino. R1 è un resistore di pull-down che mantiene il pin 2 a GND quando il pulsante non è premuto. Premendolo avrò 5V sul pin 2 di Arduino.
 
DOWNLOAD

Potete scaricare la simulazione del circuito con PROTEUS e lo Sketch Arduino al seguente LINK!!!

 



 

[Voti Totali: 0 Media Voti: 0]
Segui la Nostra Pagina Facebook: Facebook

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *