Coche robot 4×4 – Bluetooth para controlarlo desde el móvil

Llega un momento en el que una vez que tenemos cierto control en la creación de proyectos sencillos con Arduino, nos apetece ir un paso más allá y crear algún montaje que podamos gobernar desde nuestro smartphone. Para ello hay que tener en cuenta dos aspectos importantes:

  • Hardware: para comunicar nuestro móvil con el montaje tenemos que añadir un módulo bluetooth a nuestro Arduino.
  • Programación: habrá que crear código fuente tanto en el IDE de Arduino, como en la parte del dispositivo móvil, normalmente, Android. Para crear apps en Android de forma relativamente sencilla podemos usar entornos gráficos como AppInventor (http://appinventor.mit.edu/), que es una aplicación en entorno web muy similar a Scratch, pero con partes de creación de código mucho más complicadas que nos permitirán hacer aplicaciones potentes.

Los módulos más frecuentes en el mercado son los módulos HC-06 y HC-05.  el 06 (que es el que usamos nosotros). A simple vista poder ver que el 06 tiene 4 pines y el 05 tiene 6. La forma de programarlos es igual para ambos dispositivos.

La diferencia principal entre ambos es que el modulo HC-05 lo podemos configurar tanto maestro como esclavo, mientras que el 06 sólo podemos configurarlo como esclavo. Además, el 05 tiene otros parámetros de configuración en los cuales no vamos a entrar porque para otro tipo de desarrollos más avanzados.

A continuación podéis ver el esquema de montaje donde hemos hecho las siguientes conexiones:

  • vcc: simulamos los 5V con el pin 49 configurada a HIGH por programación
  • gnd: a gnd en arduino
  • TXD: al pin 51
  • RXD: al pin 50

El modo de funcionamiento de la app es muy sencillo. En primer lugar habrá que emparejar el bluetooth del montaje con nuestro dispositivo móvil. A partir de aquí hay que realizar la parte de programación para envío y recepción de señales en ambos dispositivos.

Al ser éste nuestro primer artículo sobre este tema, nos vamos a centrar exclusivamente en cómo añadir a nuestro código en Arduino lo necesario para recibir las señales que vamos a recibir desde la app en nuestro smartphone. En cuanto a la parte de la app para Android, vamos a utilizar una que podemos encontrar gratuita en el Play Store, y así nos evitamos programar nada en esta parte. La podéis descargar desde AQUÍ.

Aunque no sepamos como está programa la aplicación, lo que debemos de saber es que lleva una parte de programación que asocia a cada uno de los botones de la interfaz el envío de un carácter a través del módulo bluetooth, que finalmente acabará recibiendo e interpretando nuestro Arduino. Así se realizan el paso de mensajes entre los dos dispositivos, eligiendo nosotros qué queremos enviar, para posteriormente programar en Arduino qué queremos que haga al recibir unos caracteres u otros.

De esta forma, cada vez que en nuestra app estemos pulsando el botón de flecha hacia arriba, nuestro smartphone envía por bluetooth una señal (en este caso, la letra “F”, de forward) y nuestro programa en Arduino, recibirá la letra “F”, y ante tal evento, nosotros invocaremos a la función “ avance()”, que como ya sabemos era la función que hacía mover el coche hacia adelante. Y así haremos con el resto de movimientos. Cada botón de nuestra app será una señal que enviaremos a nuestro Arduino para que haga los diferentes movimientos que ya tenemos programados.

Veamos el código en detalle:

 

#include <SoftwareSerial.h>
#include <AFMotor.h>
SoftwareSerial BT(51,50); // TX,RX

AF_DCMotor Motor1(1);
AF_DCMotor Motor2(2);
AF_DCMotor Motor3(3);
AF_DCMotor Motor4(4);

int Vel = 130 ; // Define la velocidad base del Rover,130 si ponemos mas las pilas a tope de power!

void setup()
{

BT.begin(9600) ;
pinMode(49, OUTPUT) ; // Usaremos el pin 49 como VCC de 5V
digitalWrite(49, HIGH);

}

 

void loop()
{

Serial.write(BT.read());
if (BT.available()){

switch (BT.read())
{
case 'F':
Avance();
break;
case 'B':
Retroceso();
break;
case 'R':
giroDerecha();
break;
case 'L':
giroIzquierda();
break;
case 'S':
Paro();
break;

}

}

}

 

void SetVel(int v1, int v2, int v3, int v4)
{
Motor1.setSpeed(v1);
Motor2.setSpeed(v2);
Motor3.setSpeed(v3);
Motor4.setSpeed(v4);
}

void Avance()
{
SetVel(Vel,Vel,Vel,Vel);
Motor1.run(FORWARD) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(FORWARD);
}

void Retroceso()
{
SetVel(Vel,Vel,Vel,Vel);
Motor1.run(BACKWARD) ;
Motor2.run(BACKWARD);
Motor3.run(BACKWARD);
Motor4.run(BACKWARD);
}

void Paro()
{ Motor1.run(RELEASE);
Motor2.run(RELEASE);
Motor3.run(RELEASE);
Motor4.run(RELEASE);
}

void giroIzquierda()
{
SetVel( Vel, Vel, Vel, Vel) ;
Motor1.run(RELEASE) ;
Motor2.run(FORWARD);
Motor3.run(FORWARD);
Motor4.run(RELEASE);
}

void giroDerecha()
{
SetVel( Vel, Vel, Vel, Vel) ;
Motor1.run(FORWARD) ;
Motor2.run(RELEASE);
Motor3.run(RELEASE);
Motor4.run(FORWARD);
}

Vamos a detenernos sólo en las novedades puesto que el resto de código ya está comentado previamente en otros artículos del robot 4×4.

En la primera instrucción tenemos que añadir la librería necesaria para poder realizar comunicaciones serie con el módulo bluetooth:

#include <SoftwareSerial.h>

En la tercera línea creamos el objeto BT que es el que usaremos para comprobar que estamos recibiendo por el módulo bluetooth, y le decimos cuales son los pines de entrada y salida de información en el módulo:

SoftwareSerial BT(51,50); // TX,RX

En la función setup() abrimos el puerto serie para recibir datos y simulamos los 5V del VCC del bluetooth poniendo a HIGH el pin 49:

BT.begin(9600) ;
pinMode(49, OUTPUT) ; // Usaremos el pin 49 como VCC de 5V
digitalWrite(49, HIGH);

La función BT.read() la utilizamos para leer del módulo bluetooth.  La función BT.available() es para comprobar si está operativo.

Como principal estructura de programación introducir la estructura SWITCH que sirve para preguntar por diferentes “cases”, de tal forma que en función de si estamos leyendo un carácter u otro, invocaremos la función de movimiento del coche correspondiente.

El resto del código es igual al utilizado hasta ahora.

Para finalizar os dejamos con Jose Bonafonte que os explica con detalle todo el proceso de montaje, manejo de la app y la programación en Arduino

¡Nos vemos en quince días aprendices robóticos!

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *