Introducció a la robòtica en trenta-una classes/Dotzè dia: controlar servos de modelisme

Avui hem agafat un servo petit, dels que es fan servir en radiocontrol, i hem fet que es

mogui. Aquests tipus de motors es fan servir per posicionar la direcció d’un cotxe, per

moure les ales d’un avió... Per tant, no giren continu com els altres motors, sino que son

capaços de posicionar-se en un angle concret, i mantenir-lo amb força. Normalment,

tenen 180 graus de moviment.

Nosaltres hem agafat un servo molt petit, el SG90, que és molt econòmic, però que es

connecta i programa de la mateixa manera.

Aquest servo, funciona amb 5V, per tant, el podem connectar a l’arduino directament.

El fil marró és negatiu, el connectarem a un pin GND de l’arduino. El vermell és positiu, el

connectem a un pin 5V de l’arduino. El taronja és senyal, i l’hem de connectar a un pin de control de l’arduino (en el nostre exemple, el connectem al pin A3).

La manera que té de controlar en quin angle volem que es posi, és mitjançant un impuls, que ha de durar des de 1ms per a 0 graus, fins a 2ms per a 180 graus. Qualsevol temps entre 1 i 2 ms, demanarà una posició proporcional, entre 0 i 180 graus. Aquest impuls cal repetir-lo cada 20ms. Adjuntem gràfic per a clarificar.

Si fem el programa com els que hem anat fent, només podrem estar pendents de la

posició del servo, i no podrem fer res més alhora. Per a poder fer més coses, hauríem de

fer el programa de manera que mentre espera per al següent impuls, anés fent altres

feines. Això ja ho ha fet altra gent, i ho ha deixat a disposició de la comunitat en forma

de biblioteques. Les biblioteques son trossos de programa que fan feines concretes. Hi

ha una biblioteca concreta per a manegar servos, que es diu Servo. En lloc de picar el

programa per a gestionar el servo, emprarem aquesta biblioteca.

Per a fer-la servir:

1. Hem de dir-li al programari que la inclogui en el projecte (#include <Servo.h>).

2. Hem de crear un objecte per a cadascun dels servos que volguem controlar, fins a

un màxim de vuit. En el nostre cas, creem un objecte de nom servo1, per a gestionar un servo (Servo servo1;).

3. En el setup, hem de dir a quin pin connectem cada servo que tinguem

(servo1.attach(A3);)

4. Finalment, cada vegada que volguem canviar-li la posició, hem de cridar-ne la

funció write. Per a 90 graus: servo1.write(90);

A continuació el programa que hem fet per tal que apunti a esquerra, centre o dreta,

segons piquem la lletra e, c o d en el monitor sèrie:

#include <Servo.h> // indiquem que volem fer servir la biblioteca Servo
Servo servo1; // creem l’objecte servo1 per a controlar el servo

void setup()
{
    servo1.attach(A3); // indiquem que el servo1 es controla amb el pin A3
    Serial.begin(115200); // inicializem comunicacions a 115200
}

void loop() {
    if (Serial.available()){ // esperem que arribi un caràcter
        char rebut=Serial.read(); // el desem amb el nom rebut
        if (rebut==e) {servo1.write(0);} // si demanen esquerra, anem a 0 graus
        if (rebut==c) {servo1.write(90);} // per al centre, anem a 90 graus
        if (rebut==d) {servo1.write(180);} // per a dreta, 180 graus
    }
}