Ya tenemos nuestro robot ensamblado, soldado y preparado para comenzar a experimentar con él. En esta sección revisaremos los componentes y programaremos pequeñas funciones que nos ayudarán a controlar de una manera más fácil los elementos del robot.

Primero que todo, veamos el esquemático.

Ver esquemático

Peripherals

Partamos por lo más simple. Los periféricos (en inglés «peripherals»). Los peripherals son todos los elementos del robot, cuya función son interactuar con el «sistema operativo», como por ejemplo, los botones y los buzzer).

El botón nos servirá para ir cambiando funciones en el robot, y el buzzer nos ayudará como feedback de la ejecución del programa.

La primera función que haremos, nos ayudará a «detener» la ejecución del programa, hasta que apretemos el botón. A esta función le llamaremos «WaitBoton«.

Ver código

Si experimentas un rato los peripherals, podrás hacer lo que se te ocurra .

Sensores de línea y laterales

Los sensores de línea, como el que utiliza Open Lamborghino, son muy simples de utilizar. Solo se debe hacer una lectura analógica de los sensores.

Recordemos el orden de los sensores:

De izquierda a derecha

Como pueden observar, solo utilizaremos 6 de los 8 sensores de la matriz (No se preocupen, porque con un buen sistema de control, el tener 6 sensores no debería afectar).

Ahora con una simple lectura analógica, podemos acceder a los valores de cada sensor, de manera independiente. Recuerde que también debes activar el pin LEDON (D11 en Arduino), para activar los led infrarrojos.

Con este simple código podemos obtener el valor de todos los sensores.

Ver código
#define PINBUZZER 10
#define PINBOTON 2


void setup() {
  WaitBoton();
  Serial.begin(115200);
  pinMode(11, OUTPUT);
  digitalWrite(11, HIGH);
}

void loop() {

  int HL = analogRead(A7);
  int s1 = analogRead(A6);
  int s2 = analogRead(A5);
  int s3 = analogRead(A4);
  int s4 = analogRead(A3);
  int s5 = analogRead(A2);
  int s6 = analogRead(A1);
  int HR = analogRead(A0);

  Serial.print(HL);
  Serial.print("\t");
  Serial.print(s1);
  Serial.print("\t");
  Serial.print(s2);
  Serial.print("\t");
  Serial.print(s3);
  Serial.print("\t");
  Serial.print(s4);
  Serial.print("\t");
  Serial.print(s5);
  Serial.print("\t");
  Serial.print(s6);
  Serial.print("\t");
  Serial.println(HR);




  delay(1);
}


void Peripherals_init() {
  pinMode(PINBOTON, INPUT);
  pinMode(PINBUZZER, OUTPUT);
}


void WaitBoton() {  // Entra en un bucle infinito de espera.
  while (!digitalRead(PINBOTON))
    ;                          // Se sale del bucle cuando se aprieta el botón
  tone(PINBUZZER, 2000, 100);  // Cuando sale del bucle, suena el buzzer
}



Motores

Para mover los motores, necesitamos hacerlo con 3 pines por motor. (2 digitales y 1 digital con pwm). El funcionamiento es muy fácil, y pueden leerlo en la hoja de datos del proveedor. Acá, para facilitar las cosas, creamos una función que nos ayudará a mover los motores con una simple función.

Ver código

Como puedes ver, ahora solo necesitamos utilizar la función Motores() para mover nuestro robot.

void Motores(int left, int right) {
  MotorIz(left);
  MotorDe(right);
}

Esta función debe recibir dos valores (left,right), donde «left y right» deben ser valores enteros con un rango de -255 hasta 255. Cuando el número es negativo, el sentido de giro cambia.

Con este paso dominado, es hora de comenzar con la robótica pura y dura. Nuestro objetivo ahora es hacer que lamborghino siga la línea.