BellBot Arduino. Control bàsic de la navegació

Per als robots dels Tecno-Lògics 1Batx utilitzem el xassís del Boe-Bot Parallax i el llenguatge de programació propi d’Arduino. Un cop fetes les primeres pràctiques de control de LEDs, estem treballant el control bàsic de la navegació amb servomotors de rotació contínua (veure esquema de connexió).

Utilitzem com a base de programació l’sketch Endavant 3 segons, adaptació del proposat al tutorial de programació del BOE Shield-Bot Parallax.

Senyals Servo
Els servos necessiten un tipus de senyals concretes: trens de polsos (senyals 0-1) de període 20 ms. L’amplada del pols (temps durant el qual està actiu, a 5V) determina el sentit de gir i la velocitat del servomotor. En el cas dels servos de rotació contínua Parallax: 1.300 µs → sentit horari, velocitat màxima / 1.500 µs → aturat / 1.700 µs → sentit antihorari, velocitat màxima. Velocitats intermitges es poden aconseguir aplicant polsos d’amplades intermitges entre 1.300 i 1.500 per al sentit horari, i entre 1.500 i 1.700 per al sentit antihorari.

Sobre el llenguatge de programació
Per tal de treballar amb servomotors cal incloure al programa la llibreria Servo, utilitzar la funció writeMicroseconds(); per definir l’amplada dels polsos, delay(); per definir la durada de les accions (en milisegons), i les funcions attach(); i detach(); per associar i deixar d’associar els senyals servo als pins especificats. Donat que la llibreria Servo deshabilita l’ús dels pins 9 i 10 com a sortides analògiques, es proposa utilitzar aquests pins per a connectar els servomotors.

Maniobres bàsiques
El moviment del robot depén del sentit de gir dels motors. Les instruccions corresponents a les quatre accions bàsiques de la navegació:

Endavant
servoDret.writeMicroseconds(1300);
servoEsquerre.writeMicroseconds(1700);
delay();

// Ample pols 1300 µs: gir horari
// Ample pols 1700 µs: gir antihorari
// Durada de l’acció (en ms)
Endarrere
servoDret.writeMicroseconds(1700);
servoEsquerre.writeMicroseconds(1300);
delay();

// Ample pols 1700 µs: gir antihorari
// Ample pols 1300 µs: gir horari
// Durada de l’acció (en ms)
Gir dreta
servoDret.writeMicroseconds(1700);
servoEsquerre.writeMicroseconds(1700);
deay();

// Ample pols 1700 µs: gir antihorari
// Ample pols 1700 µs: gir antihorari
// Durada de l’acció (en ms)
Gir esquerre
servoDret.writeMicroseconds(1300);
servoEsquerre.writeMicroseconds(1300);
delay();

// Ample pols 1300 µs: gir horari
// Ample pols 1300 µs: gir horari
// Durada de l’acció (en ms)

Funcionament
La tracció funciona correctament, però el robot té una certa tendència a “encabritar-se” cap endavant. Per solucionar-ho cal baixar i retrasar el centre de gravetat i, si cal, posar uns topes endavant.
El més important però no és la qualitat del resultat del primer dia sinó les reflexions que ens portaran a millorar-lo.

Recursos utilitzats
Learn.Parallax. BOE Shield-Bot Navigation
Arduino. Referencia del lenguaje