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
}
}