noviembre 6, 2018

VARIOS-Tutorial de uso de módulos bluetooth HC-05

Written by

En esta publicación vamos a repasar nuestra forma de hacer funcionar las comunicaciones bluetooth con los módulos más ampliamente usados (porque son los más baratos) HC-05 ó HC-06, y los que más problemas dan a la hora de conectarlos con Arduino.

Después de ‘batallar’ bastante con distintos módulos, comprobamos que aunque se compren en un proveedor chino, pueden ser bastante distintos, y hay variantes que funcionan (sobre todo a la hora de programarlos) con recursos distintos.

En esta publicación, vamos a tratar con los últimos que hemos comprado, que son módulos HC-05 (aunque sse podría hacer igualmente con los HC-06) que van soldados sobre unos adaptadores con la referencia ‘ZS-040’ grabada en la parte posterior. Llevan por la parte delantera 6 patillas de conexión (STATE, RXD, TXD, GND, VCC, EN) y un pequeño pulsador de reset.

Módulo bluetooth HC-06

Ahora vamos a comentar distintas formas de hacerlos funcionar, desde la más simple a la más compleja, para adaptar la que más convenga a los proyectos.

1) COMUNICACIÓN TELÉFONO ANDROID-MÓDULO HC-05

En este caso vamos a conectar un Arduino UNO a unos LED y un módulo BT para, por medio de un teléfono con una aplicación específica, poder encender o apagar los LED individualmente.

La aplicación que vamos a usar es una app pública y gratuita creada por Yusuf Elosman y llamada Arduino LED Control. Se puede encontrar fácilmente en la tienda ‘Google Play’. Es una aplicación que explica interiormente cómo debe ser el circuito y el programa de Arduino para controlarlo. Los añadimos a continuación, por comodidad:

Circuito de prueba de Bluetooth nº 1

Componentes:

    • LEDs verde, rojo, amarillo.
    • 3 Resistencias 200 ohm.
    • Módulo bluetooth HC-05.

Código:

int data;
int led1=11;
int led2=12;
int led3=13;

void setup()
{
 pinMode(led1,OUTPUT);
 pinMode(led2,OUTPUT);
 pinMode(led3,OUTPUT);
 Serial.begin(9600);
}

void loop()
{
 if (Serial.available())
 {
  data=Serial.read();
  delay(100);
  if(data=='1')
    digitalWrite(led1,1);
  if(data=='2')
    digitalWrite(led1,0);
  if(data=='3')
    digitalWrite(led2,1);
  if(data=='4')
    digitalWrite(led2,0);
  if(data=='5')
    digitalWrite(led3,1);
  if(data=='6')
   digitalWrite(led3,0);
  delay(100);
 }
}

La forma de hacerlo funcionar es la siguiente:

1. Emparejar el módulo bluetooth con el teléfono.
2. Conectar en la aplicación con el módulo bluetooth.
3. Activar Arduino con el circuito conectado.
4. Usar los botones de la aplicación para encender o apagar los LED.

Montamos el circuito sin problemas y éste es nuestro resultado:

Prueba 1 de comunicación bluetooth

2) COMUNICACIÓN TELÉFONO ANDROID-MÓDULO HC-05 CON APLICACIÓN PROPIA

Ahora vamos a conectar otro circuito, más parecido al necesario para controlar un robot, y vamos a probar con una aplicación propia, hecha con Android App Inventor. Lo hacemos así porque hemos probado varias aplicaciones y ninguna otra nos funciona correctamente. El circuito electrónico es similar al anterior, solo que con 4 LEDs.

Circuito de prueba de Bluetooth nº 2

Componentes:

    • 4 LEDs verdes.
    • 4 Resistencias 200 ohm.
    • Módulo bluetooth HC-05.

Código:

int data;
int ledDE=10; // Derecha
int ledIZ=11; // Izquierda
int ledAB=12; // Abajo
int ledAR=13; // Arriba

void setup()
{
 pinMode(ledDE,OUTPUT);
 pinMode(ledIZ,OUTPUT);
 pinMode(ledAB,OUTPUT);
 pinMode(ledAR,OUTPUT);
 Serial.begin(9600);
}

void loop()
{
 if (Serial.available())
 {
  data=Serial.read();
  delay(100);
  if(data=='q') // Arriba
    digitalWrite(ledAR,1);
  if(data=='e')
    digitalWrite(ledAR,0);
  if(data=='z') // Abajo
    digitalWrite(ledAB,1);
  if(data=='c')
    digitalWrite(ledAB,0);
  if(data=='a') // Izquierda
    digitalWrite(ledIZ,1);
  if(data=='d')
    digitalWrite(ledIZ,0);
  if(data=='s') // Derecha
    digitalWrite(ledDE,1);
  if(data=='f')
    digitalWrite(ledDE,0);
  delay(100);
 }
}

Para crear la aplicación, usamos el siguiente tutorial, creado por Robo India:
https://roboindia.com/tutorials/sending-receiving-with-hc05-mit-app-inventor

y hacemos una aplicación con cuatro botones que son las flechas para mover un robot en todas las direcciones.

Aplicación creada en App Inventor

Bloques de código de la aplicación

La forma de hacerlo funcionar es la siguiente:

1. Emparejar el módulo bluetooth con el teléfono.
2. Conectar en la aplicación con el módulo bluetooth.
3. Activar Arduino con el circuito conectado.
4. Usar los botones de la aplicación para encender o apagar los LED, que se encienden cuando las flechas están pulsadas y se apagan al dejar de pulsar.

Tras montar el circuito y la aplicación, mostramos en el vídeo cómo funciona todo:

Prueba 2 de comunicación bluetooth

3) COMUNICACIÓN ENTRE MÓDULOS HC-05

Esta forma de comunicación es la más difícil, porque requiere emparejar dos módulos bluetooth entre sí, y para ello hay que programar previamente los módulos. Esta operación se facilita enormemente con el teléfono Android, porque el sistema operativo se encarga de programar la comunicación, pero con los módulos aisladamente, la operación se complica. Dividimos la tarea en dos pasos.

a) Emparejar los módulos HC-05

Para emparejar los módulos BT hay que programarlos. Esta operación exige activar y desactivar una patilla determinada del módulo. Gracias al adaptador ZS-040 se simplifica un poco, porque disponen de un botón para programarlos:

Botón de programación en el módulo HC-05

Para acceder al modo de programación del módulo lo que hay que hacer es pulsar ese botón en el momento de encender el módulo. De esta forma, el LED que tiene parpadea más lentamente. Montamos el circuito que aparece en la figura:

Circuito para la programación del módulo bluetooth

Ahora no se puede conectar el módulo HC-05 a las patillas 0 y 1 porque las necesitamos para comunicarnos con Arduino a través del cable USB, que usa esas mismas patillas para la comunicación. Cargamos el siguiente programa:

#include <SoftwareSerial.h>

// Conectar HC-05 TX a patilla 2 de Arduino
// Conectar HC-05 RX a patilla 3 de Arduino con un divisor de tensión
SoftwareSerial BTserial(2,3); // RX | TX

char c =' ';
void setup()
{
 Serial.begin(9600);
 Serial.println("Arduino preparado");
 Serial.println("Seleccionar '9600 baudio' y 'Ambos NL & CR' en el monitor serie");

 // Módulo HC-05 se conectaa por defecto a velocidad 38400
 BTserial.begin(38400);
}

void loop()
{
 // Lee lo que recibe de HC-05 y lo envía al Monitor Serie
 if(BTserial.available())
 {
  c = BTserial.read();
  Serial.write(c);
 }

 // Lee lo que recibe del Monitor Serie y lo envía al HC-05
 if(Serial.available())
 {
  c = Serial.read();
 BTserial.write(c);
 }
}

Ahora, al conectar la alimentación al módulo HC-05, hay que mantener pulsado el botón mencionado antes, para que entre en el modo de programación. Inicialmente, el LED del módulo parpadea rápidamente, a 5 veces por segundo más o menos. Al entrar en modo programación la intermitencia es una cada 2 segundos. Se puede ver en el siguiente vídeo:

El modo de programación del módulo HC-05 también se llama modo AT, porque la programación se hace a través de comandos escritos que empiezan por la palabra AT. La lista completa de comandos se puede ver en el siguiente documento:

ComandosAT

Los pasos que tenemos que dar para tener el módulo listo son:

  1. Conectar el circuito según la figura anterior.
  2. Pulsar el botón del módulo HC-05 y conectar el cable de alimentación.
  3. Abrir al monitor de comunicaciones de Arduino.
  4. Escribir AT y esperar la respuesta OK.

Módulo HC-05 en modo AT

Para programar el módulo bluetooth hay que enviar los siguientes comandos:

Módulo esclavo

  • AT+ADDR? (y anotar la dirección que aparezca, que será parecida a 56:23:37128)
  • AT+ROLE=0
  • AT+UART=38400,0,0

Módulo maestro

  • AT+ROLE=1
  • AT+CMODE=0
  • AT+UART=38400,0,0
  • AT+BIND=dirección del esclavo cambiando ‘:’ por ‘,’ (por ejemplo AT+BIND=56,23,37128)

Cuando tengamos los dos módulos configurados hacemos una prueba. Necesitamos dos ordenadores distintos. Conectamos los Arduino y los módulos con el mismo circuito y cargamos el mismo programa que aparece más arriba. Al encender los módulos y transcurridos unos segundos se puede ver que la intermitencia del LED cambia a un par de veces seguidas cada dos segundos más o menos, lo que indica que están conectados. Se abren los monitores de comunicaciones en los dos ordenadores y lo que se escriba en uno aparece en el otro y viceversa. Se puede comprobar en el siguiente vídeo:

b) Aplicación con comunicación entre los dos Arduinos

Una vez que ya se han emparejado los módulos HC-05 y se ha probado que la comunicación en los dos sentidos funciona, lo usamos con un circuito de prueba que encienda LEDs. El circuito receptor que vamos a usar es el mismo del ejemplo 2. El circuito emisor lo vamos a montar con los siguientes elementos:

  • 4 micro pulsadores.
  • 4 Resistencias 1 K.
  • Módulo bluetooth HC-05.

Circuito emisor de prueba con pulsadores

El código que usamos en el emisor es:

// Definiciones de botones
int btARR = 13;
int btABJ = 12;
int btIZQ = 11;
int btDER = 10;
int estadoARR=-1,estadoABJ=-1,estadoIZQ=-1,estadoDER=-1,estadonue;
char data;

void setup() {
Serial.begin(38400);

// Activa patillas para botones
pinMode(btARR, INPUT);
pinMode(btABJ, INPUT);
pinMode(btIZQ, INPUT);
pinMode(btDER, INPUT);
}

void loop() {
estadonue = digitalRead(btARR);
if(estadoARR!=estadonue)
{
estadoARR=estadonue; 
if(estadonue==1) data='q';
else data='e';
Serial.println(data);
}

estadonue = digitalRead(btABJ);
if(estadoABJ!=estadonue)
{
estadoABJ=estadonue;
if(estadonue==1) data='z';
else data='c';
Serial.println(data);
}

estadonue = digitalRead(btIZQ);
if(estadoIZQ!=estadonue)
{
estadoIZQ=estadonue;
if(estadonue==1) data='a';
else data='d';
Serial.println(data);
} 

estadonue = digitalRead(btDER);
if(estadoDER!=estadonue)
{
estadoDER=estadonue;
if(estadonue==1) data='s';
else data='f';
Serial.println(data);
} 
delay(10);
}

En la siguiente imagen vemos el montaje realizado con el emisor:

Montaje del emisor bluetooth

Y en la imagen están los dos montajes, unidos solamente por el enlace bluetooth.

Conjunto emisor + receptor

El montaje permite pulsar los botones en el emisor, y por bluetooth se trnsmiten esas pulsaciones al receptor, que enciende los LED correspondientes.

Finalmente, este montaje puede permitir controlar un robot a distancia, cambiando los LED por direcciones de motores. También se podrían poner más botones para realizar funciones más complejas.

Category : VARIOS

Deja un comentario

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

Proudly powered by WordPress and Sweet Tech Theme