viernes, 3 de septiembre de 2021

Proyecto Coche Robótico con Arduino (3/5)

 

Primeros pasos programación aplicación Android con Appinventor

Hola a tod@s.

Una vez hayamos conseguido conectarnos y desconectarnos al bluetooth de la placa y encender y apagar un solo led, tal y como vimos en los temas precedentes, podremos añadir más botones a nuestra apliación para así poder enviar las instrucciones necesarias que finalmente nos permitirán controlar los movimientos del coche.

En el siguiente ejemplo podemos ver una  aplicación con 3 botones que nos permiten mandar por bluetooth tres mensajes (letras A, B o C) diferentes a nuestro arduino.



En los dos imágenes siguientes vamos a ver como programar nuestra aplicación para que además de enviar datos a arduino sea capaz de recibir la información que mandemos desde arduino hacia nuestro teléfono.



Por último un ejemplo de como podríamos crear un comando de voz en nuestra aplicación para así poder controlar el coche mediante comando de voz:



Para terminar dejo el enlace a último un vídeo con un pequeño tutorial en el que enseñan paso a paso a realizar una aplicación muy parecida a las que nosotros estamos haciendo:




En la siguiente imagen podemos ver un ejemplo de como puede quedar la aplicación de control del coche robot:



Como puede verse en la imágen hemos incluido un slider que nos permitirá controlar el ángulo de giro del coche. Como programar esto lo veremos en los temas: "Envío de datos más complejos por bluetooth" y "Uso del slider para manejar el coche robot".

En próximas temas pondremos información sobre la parte de bitbloq y arduino de estos proyectos.

Un saludo,
Raúl

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:

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:

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";
       

    }

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.

  • Controlando el coche robot por bluetooth con una aplicación android

    Hola a tod@s.

    En este tema vamos a ver como ir añadiendo comandos a la programación del coche robótico controlado por bluetooth para empezar simplemente haciéndole avanzar y parar y terminar controlando todos sus movimientos.

    Empezaremos por realizar una aplicación móvil que mande diferentes letras a arduino mediante bluetooth que posteriormente nos servirán para decidir el modo de funcionamiento del coche.

    Un ejemplo de diseño de la aplicación con app inventor podría ser este. (Recordar que, si se ven demasiado pequeñas, pinchando en las imágenes se ven más grandes).


    Y el código de la misma el que ya hemos visto en temas anteriores con el listpicker de conectar al bluetooth y el botón de desconectar además del resto de botones que enviarán letras para cada acción:

    Aunque en la imagen del diseño se ha incluido un slider de control del giro en este tema no veremos todavía como usarlo.




    En arduino empezaremos por el programa más sencillo posible que hace simplemente avanzar al coche hacia adelante o pararlo.



    Es imprescindible saber que led activa cada una de las ruedas en su correspondiente sentido de giro. Y también es importante que conectemos los cables a los pines PWM de arduino (alguno de los siguientes: 3,5,6,9,10,11) que nos van a permitir controlar la potencia de encendido más adelante. Recordad que si conectáis los movimientos de las ruedas en los pines 5- izquierda adelante, 6 izquierda atrás, 9 - derecha delante y 10 - derecha atrás podremos intercambiar los programas entre nosotros sin necesidad de tener que cambiar nada en la conexión o programación.

    En el siguiente programa daremos un paso más allá añadiendo la posibilidad de que el coche vaya hacia atrás y gire a izquierda o derecha.




    En este punto es importante añadir la función "parar" que apaga los 4 leds y que usaremos antes de indicar cada movimiento ya que si del movimiento anterior arrastramos un encendido por ejemplo de derecha_atras y en el nuevo movimiento sin apagar ese led encendemos el de derecha_alante la rueda se quedará quieta ya que estará recibiendo esas dos señales al mismo tiempo.

    El siguiente paso será añadir giros no en redondo si no en arco, para ello aprovechamos la posibilidad que nos dan los pines PWM de encenderlos con un valor de intensidad entre 0 y 255. En el ejemplo encendemos una rueda al máximo de potencia y la otra a la mitad dándole un valor de encendido al pin digital de 127. Esto para los 4 giros amplios que nos quedan para controlar totalmente el robot.


    La programación del control mediante mando a distancia por infrarrojos es prácticamente igual en la parte de arduino/bitbloq únicamente será necesario averiguar los códigos que envía el mando a distancia para que al recibirlos el infrarrojo de un valor a la variable "datos".

    Saludos,

    Raúl.

  • Resumen de Programas de control del coche robótico


    Hola a tod@s.

    En este tema vamos a ver, en 5 fases, como ir añadiendo comandos a la programación del coche robótico controlado por bluetooth para empezar simplemente haciéndole avanzar y parar y terminar controlando todos sus movimientos además de la activación del modo autónomo de detección de obstáculos con ultrasonido y servomotor.

    Empezaremos por realizar una aplicación móvil que mande diferentes letras a arduino mediante bluetooth que posteriormente nos servirán para decidir el modo de funcionamiento del coche.

    Un ejemplo de diseño de la aplicación con app inventor podría ser este.


    Y el código de la misma el que ya hemos visto con el listpicker de conectar al bluetooth y el botón de desconectar además del resto de botones que enviarán letras para cada acción:

    Aunque en la imagen del diseño se ha incluido un slider de control del giro en este tema no veremos todavía como usarlo.




    En arduino empezaremos por el programa más sencillo posible que hace simplemente avanzar al coche hacia adelante o pararlo.



    Es imprescindible saber que led activa cada una de las ruedas en su correspondiente sentido de giro. Y también es importante que conectemos los cables a los pines PWM de arduino (alguno de los siguientes: 3,5,6,9,10,11) que nos van a permitir controlar la potencia de encendido más adelante.

    En el siguiente programa daremos un paso más allá añadiendo la posibilidad de que el coche vaya hacia atrás y gire a izquierda o derecha.




    En este punto es importante añadir la función "parar" que apaga los 4 leds y que usaremos antes de indicar cada movimiento ya que si del movimiento anterior arrastramos un encendido por ejemplo de derecha_atras y en el nuevo movimiento sin apagar ese led encendemos el de derecha_alante la rueda se quedará quieta ya que estará recibiendo esas dos señales al mismo tiempo.

    El siguiente paso será añadir giros no en redondo si no en arco, para ello aprochamos la posibilidad que nos dan los pines PWM de encenderlos con un valor de intensidad entre 0 y 255. En el ejemplo encendemos una rueda al máximo de potencia y la otra a la mitad dandole un valor de encendido al pin digital de 127. Esto para los 4 giros amplios que nos quedan para controlar totalmente el robot.



    El siguiente paso consistirá en añadir la posibilidad de que el coche se mueva de manera autónoma detectando obstáculos mediante el sensor de ultrasonidos colocado en la parte delantera.

    Para ello añadiremos dos componentes a nuestro arduino, el sensor de ultrasonidos y el servo motor sobre el que va instalado.



    Para poder programar este modo de funcionamiento tendremos que generar dos nueva variables, una que guardará la distancia y otra que guardará el modo de funcionamiento seleccionado. Se definen 5 modos de funcionamiento:

    El modo 0 es en el que no se usa el ultrasonido y se controla el robot con las funciones explicada antes.

    El modo 1 es en el que el coche al detectar un obstáculo a 20cm o menos gira siempre hacia la izquierda para evitarlo.

    El modo 2 es en el que el coche al detectar un obstáculo a 20cm o menos gira siempre hacia la derecha para evitarlo.

    El modo 3 es en el que el coche al detectar un obstáculo a 20cm o menos gira aleatoriamente a la izquierda o a la derecha para evitarlo.

    El modo 4 es en el que el coche al detectar un obstáculo a 20cm o menos utilizará el servo motor para mover el ultrasonido a un lado y a otro para saber hacia que lado tiene menos obstáculos y dirigirse hacia ese lado.




    Si el usuario manda un comando que activa alguna de las funciones que no son de modo ultrasonido es importante que añadamos en cada una de ellas el hecho de que el "ultra_mode" pasa a ser 0.


    Para el resto de letras enviadas por la aplicación activaremos los diferentes modos de funcionamiento que hemos comentado.

    Los modos 1 y 2 funcionan de manera sencilla:



    El 3 incluye el uso de número aleatorios y redondeo:


    Y por último el modo 4 nos llevará a crear dos nuevas variables para comparar las distancia y el uso del comando detach y attach del servo para evitar que este vibrando cuando no lo usamos. Como este comando no existe en bitbloq lo añadimos con el código verde que nos permite introducir código arduino directamente.




    Con esta última versión del programa tendremos un buen repertorio de formas de controlar el coche robot tanto de manera directa como autónoma.

    En temas posteriores veremos como poder modificar algunos parámetros como el ángulo de los giros para el modo dirigido o cambiar la distancia de detección de obstáculos para el modo autónomo.

    Un saludo,

    Raúl.


No hay comentarios:

Publicar un comentario