sábado, 21 de noviembre de 2020

Control del coche robot con mando a distancia

 Hola a tod@s.

Vamos a ver en este tema como conseguir controlar nuestro coche robot mediante un mando a distancia que emitirá una señal que captaremos desde un receptor de infrarrojos conectado a arduino.

Parte de la programación la haremos directamente en el IDE de arduino y después veremos como llevarla a bitbloq usando los bloques verdes para insertar código directamente.

Lo primero que necesitamos es conocer los códigos que envía nuestro mando a distancia. Para ello vamos a seguir los pasos que nos explican con mucho detalle en esta web:

https://www.zonamaker.com/arduino/modulos-sensores-y-shields/control-a-distancia-mediante-mando-infrarrojo-ir

Para conectar el receptor infrarrojos he utilizado el PIN 13 de arduino. El receptor más sencillo que suele usarse es el TL1838 que lleva tres patillas, una de señal, la de en medio de ground GND y la otra de voltaje VCC a 5 voltios. 

Tenéis una descripción en detalle en este enlace: https://drive.google.com/file/d/1B6GwlxxNVdOOYvMR1qjzPHDHPy8blcWQ/view?usp=sharing

Existen otros modelos:

Esquema de conexión del ir gt1089 que ha venido con algunos de los modelos de coches:

En cada caso será importante saber las conexiones de señal: OUT, ground: GND, y voltaje: VCC para realizar las conexiones con arduino correctamente.

Una vez conectado correctamente el receptor el siguiente paso será cargar en nuestra placa un programa que reciba los datos y los envíe al puerto serie para poder visualizarlos.

El programa que usaremos será el siguiente:

#include <IRremote.h>  //Enlaza la librería del receptor IR

#define RECV_PIN 13

IRrecv irrecv(RECV_PIN);

decode_results results;

 void setup()

{

  Serial.begin(9600);  //Inicializa el puerto serie

  irrecv.enableIRIn(); //Inicializa el receptor

}


void loop() {

  if (irrecv.decode(&results)) //Si recibe un dato

  {

    Serial.println(results.value, HEX);  //Muestra el dato en el monitor serie

    irrecv.resume(); //Se prepara para recibir el siguiente valor

  }

}

Para poder compilarlo es necesario instalar la librería librería IRremote.h (versión antigua, que es la que funciona con esos comandos). El zip de la librería puede descargarse en este enlace: https://drive.google.com/file/d/127JTpZfRVIZd_N8xg9BqGgpGt6OsSPkl/view?usp=sharing

Para incluir la librería en arduino una de las formas es desde el IDE de arduino ir a Programas - Incluir librería - Añadir biblioteca ZIP. Buscar el archivo descargado y seleccionarlo:


Una vez tengamos el programa cargado en la placa y el receptor de infrarrojos bien conectado a nuestro arduino el siguiente paso será abrir el monitor serie para ver las señales que va recibiendo de nuestro mando a distancia. Una buena opción es hacerse una tabla con tantas filas y columnas como tenga el mando y rellenarla con los códigos de cada posición. En mi caso el resultado ha sido el siguiente:

En los coches que hemos comprado también tenemos esta otra modalidad de mando con estos códigos:


Con los códigos ya anotados el siguiente paso es usarlo en el programa de control del coche robot. Para ello vamos a hacer algo muy parecido a lo que hacemos con la recepción de bluetooth usando una variable a la que llamamos "datos" a la que vamos a dar un valor en función del código que haya llegado por el receptor infrarrojo. Incluso podemos juntar en un mismo programa la recepción por infrarrojos y por bluetooth y podrían funcionar respondiendo el coche a ambas simultáneamente sin ningún problema.

Las partes del código a añadir en cada apartado serían las siguiente: 

En la parte de VARIABLES Y FUNCIONES:

#include <IRremote.h>  //Enlaza la librería del receptor IR

 

#define RECV_PIN 13

IRrecv irrecv(RECV_PIN);

decode_results results;

 

En la parte de SETUP:

irrecv.enableIRIn(); //Inicializa el receptor

 

En la parte de LOOP:

if (irrecv.decode( & results)) //Si recibe un dato
    {
        puerto_serie.println(results.value, HEX); //muestra en el monitor serie el dato
        irrecv.resume(); //Se prepara para recibir el siguiente valor
        if (results.value == 0xFF18E7) datos = "A";
        else if (results.value == 0xFF38C7) datos = "B";
                   else if (results.value == 0xFF4AB5) datos = "C";
                   else if (results.value == 0xFF10EF) datos = "D";
                   else if (results.value == 0xFF5AA5) datos = "E";
                   else if (results.value == 0xFF30CF) datos = "F";
                   else if (results.value == 0xFF7A85) datos = "G";
                   else if (results.value == 0xFF42BD) datos = "H";
                   else if (results.value == 0xFF9867) datos = "N";
                   else if (results.value == 0xFFB04F) datos = "M";
                   else if (results.value == 0xFF6897) datos = "J";
       

    }

IMPORTANTE, este código es para el primero de los mandos vistos anteriormente, para el segundo, habría que poner los códigos hexadecimales correspondientes.

Para llevar esto a blitbloq la forma sería mediante bloques verdes cada uno en la parte correspondiente de bitbloq:

En la parte de VARIABLES Y FUNCIONES y de SEPUP:


 En la parte de LOOP:



Con esto ya tendremos incorporado el control de nuestro coche en el programa. Podemos usarlo para que realice movimientos, aumente o disminuya la velocidad o incluso que cambie el modo de funcionamiento. Las posibilidades son muchas e iremos viéndolas de manera conjunta tanto en control por bluetooth como por mando a distancia.

Saludos,

Raúl.

No hay comentarios:

Publicar un comentario