Introducció a la robòtica en trenta-una classes/Vint-i-dosè dia: ampliem prestacions app control FPV

Salta a la navegació Salta a la cerca

Ja vam veure el dia passat, com podem controlar la posició on premem dins d’un objecte canvas, i com ho passàvem per bluetooth a l’arduino per transformar-ho en un angle del motor servo.

Ja que tenim informacó tan de la posició horitzontal (X), com de la vertical (Y) per on passa el dit, aprofitarem per controlar els dos motors alhora, i orientar la montura cap on es vulgui amb un sol dit.

Hem canviat la imatge de la fletxa per una creueta. La mida de la imatge cal que sigui relativament petita, per tal que es pugui moure dins del canvas: la fem per exemple, de 40×40 píxels. La mida del canvas hauria de ser 180 píxels d’alt (height), mantenint també els 180 píxels d’ample(width) que ja teníem, però per tal que el punter es pugui moure d’un cap a l’altre, i que es vegi tot ell, ampliarem el canvas amb les mides de la imatge, i el deixarem a 220 x 220 píxels.

Després farem que transmeti la x per al servo de girar, tal com teníem, amb la ‘g’ al davant, i la y per al servo d’alçada amb la ‘a’ al davant. Els blocs per al canvas han quedat:

Controlcanvas.png

Com que ara transmetem números per a dir quants graus volem a cadascun dels servos, podria haver-hi confusió amb els números que transmetíem per a les ordres dels motors(endavant, endarrera,…). Per a solventar-ho, farem que les ordres als motors també siguin amb lletres. El controls dels motors ha quedat:

Controlscotxelletres.png

Hem connectat el servo de rotació a A3 i el d’alçada a A4. Hem modificat el programa de l’arduino en correspondència, per tal que ara els motors de les rodes es controlin amb lletres, i les ordres als dos servos siguin interpretades. El codi:

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 un servo
Servo servo2; // construïm una estructura servo2 per a controlar l'altre servo

void setup() {
  Serial.begin(9600);
  servo1.attach(A3);  // indiquem que el servo1 es controla amb el pin A3
 servo2.attach(A4);  // indiquem que el servo1 es controla amb el pin A3
 }

void loop() {
  if (Serial.available()){
    tecla=Serial.read();
    if (tecla=='b'){
      analogWrite(5,255);
      analogWrite(6,0);
      analogWrite(9,255);
      analogWrite(10,0);
    }
    if (tecla=='c'){
      analogWrite(5,0);
      analogWrite(6,255);
      analogWrite(9,0);
      analogWrite(10,255);
    }
    if (tecla=='d'){
      analogWrite(5,0);
      analogWrite(6,0);
      analogWrite(9,255);
      analogWrite(10,0);
    }
    if (tecla=='e'){
      analogWrite(5,255);
      analogWrite(6,0);
      analogWrite(9,0);
      analogWrite(10,0);
    }
    if (tecla=='x'){
      analogWrite(5,0);
      analogWrite(6,0);
      analogWrite(9,0);
      analogWrite(10,0);
    }
    if (tecla=='g'){ 
      servo1.write(Serial.parseInt());
    }
    if (tecla=='a'){   
      servo2.write(Serial.parseInt());
    }
  }
}