Introducció a la robòtica en trenta-una classes/Divuitè dia: controlar cotxe amb motors de contínua des del mòbil

Muntem els motors de contínua en el cotxe i preparem el programa del Arduino per tal que s’entengui amb el programa del telèfon.

Durant la classe hem agafat el programa de la setmana passada i hem canviat les lletres pels números que vam assignar fa dues setmanes en el programa del telèfon. En aquest punt, el nostre cotxe va endavant, endarrere, esquerra, dreta, si prenem respectivament 1, 2, 3 o 4 en el terminal sèrie. També hem fet que el zero para.

Per anar recordant conceptes, en un dels cotxes hi han posat un accessori que s’activa amb el servo, i que manarem amb la tecla 5. En un altre dels cotxes s’ha posat ell mateix servo per controlar la direcció. Això es va animant i és del que es tracta, que la imaginació de cadascú faci ampliar els projectes. Mirarem de penjar també els programes d’aquestes millores.

Aquí tenim com ha quedat el programa amb el servo afegit per a fer anar la direcció. Tal com s’ha muntat, demanant 90 graus les rodes queden rectes, demanat 60 graus queden girades a l’esquerra, i demanant 120 graus girades a la dreta.

Tal com teníem connectat el bluetooth, necessitàvem els pins 10 i 11, i el 10 el gastem per a un dels motors. Una altra manera de connectar el bluetooth, és connectant el pin TXD del bluetooth al RX del arduino, i el RXD del bluetooth al TX del arduino. Quan fem això, haurem de desconnectar el USB de l’ordinador i alimentar des de un carregador o una pila. D’aquesta manera el programa serveix tant per a l’ordinador com pel bluetooth sense canviar res.

char tecla; // definim una variable on desar les lletres que ens arribin
#include <Servo.h> // indiquem que volem emprar la biblioteca servo
Servo servo1; // construïm una estructura servo1 per a controlar el servo
void setup() {
  Serial.begin(9600);
  servo1.attach(A3);  // indiquem que el servo1 es controla amb el pin A3
}
void loop() {
  if (Serial.available()){
    tecla=Serial.read();
    if (tecla=='1'){
      analogWrite(5,255);
      analogWrite(6,0);
      analogWrite(9,255);
      analogWrite(10,0);
      servo1.write(90);
    }
    if (tecla=='2'){
      analogWrite(5,0);
      analogWrite(6,255);
      analogWrite(9,0);
      analogWrite(10,255);
      servo1.write(90);
    }
    if (tecla=='3'){
      analogWrite(5,0);
      analogWrite(6,0);
      analogWrite(9,255);
      analogWrite(10,0);
      servo1.write(60);
    }
    if (tecla=='4'){
      analogWrite(5,255);
      analogWrite(6,0);
      analogWrite(9,0);
      analogWrite(10,0);
      servo1.write(120);
    }
    if (tecla=='0'){
      analogWrite(5,0);
      analogWrite(6,0);
      analogWrite(9,0);
      analogWrite(10,0);
      servo1.write(90);
    }
    if (tecla=='5'){    // exemple d'accionament. Ajustar per a cada cas.
      servo1.write(150);// graus als quals cal girar per activar el nostre dispositiu
      delay(500);       // esperem mig segon
      servo1.write(180);// tornem a la posició de repòs
    }
  }
}