El protocolo de comunicaciones Buetooth, nacido hace ya casi 20 años, está destinado a la transmisión de voz y datos en pequeñas redes inalámbricas. Ampliamente utilizado para evitar los cables en la conexión de dispositivos periféricos como parlantes o teclados a computadoras de escritorio y notebooks o para conectar una gran variedad de dispositivos a teléfonos móviles o tabletas, también puede ser aprovechado para el control inalámbrico de nuestros proyectos con Arduino gracias a módulos como el popular HC05, algunas de cuyas aplicaciones veremos en este artículo.

Antes de comenzar las conexiones, la habitual advertencia que siempre realizo cuando hago un análisis de un módulo para Arduino: asegurense de que el módulo que posean coincida con el que empleo en el artículo. Bajo la denominación “módulo bluetooth HC05” existe en realidad una amplia variedad de placas que varían en su conexión e incluso en la tensión de alimentación, por lo que una conexión inadecuada no sólo producirá un malfuncionamiento sino que incluso puede dañar irremediablemente el módulo. El módulo HC05 “original” consiste en una placa que funciona a 3,3 Voltios, tanto en su alimentación como en las señales de datos y control y que no cuenta con pines para su montaje, tal como se ve en la siguiente imagen.

Módulo HC05

Los módulos que se derivan de ella consisten en placas de adaptación sobre las que se suelda el HC05 y adaptan los valores de alimentación y/o señales a otros valores como 5 Voltios. Algunos pueden verse en la imagen de mas abajo, y este otro artículo recopila información sobre varios de ellos.

El HC05 en distintas placas adaptadoras

En este artículo voy a utilizar una placa denominada “CZ-HC-05” marcada como “gomcu” que contiene toda la circuitería para alimentar el módulo HC05 con 5V y permite su conexión en forma directa a placas que funcionen con esta tensión, como el Arduino UNO.

Módulo CZ-HC-05 gomcu

Conexionado

La conexión de este módulo a un Arduino es sumamente simple. Toda la complejidad del protocolo Bluetooth está resuelta por el HC05 que nos presenta un puerto serie con los típicos pines TX y RX para el envío y recepción de datos. La alimentación de 5 Voltios debe proveerse a través de los pines VCC y GND. KEY es una entrada que nos permite cambiar el modo de funcionamiento (según veremos mas adelante) y LED es una salida para conectar un led que indique la condición de trabajo del módulo, aunque éste ya cuenta con un led azul soldado sobre la placa en el lado inferior que cumple con esa función. El circuito mínimo para utilizar Bluetooth en nuestros proyectos es el siguiente:

Conexionado HC05-Arduino

Como se puede ver, el pin KEY se deja desconectado. En esta condición, todo lo que escribamos en el pin TXD es enviado por el HC05 a través de la conexión bluetooth a otro dispositivo (por ejemplo un teléfono) y los datos recibidos saldrán por el pin RXD, siempre a una velocidad de 9600 baudios, que es la preestablecida de fábrica. Si quisieramos realizar algún cambio en la configuración del HC05, como la velocidad de transmisión o modificar alguno de los muchos parámetros con que cuenta, debemos hacerlo entrar en el llamado “modo AT”, donde los datos que se envían al módulo no son transmitidos sino que son interpretados como comandos o instrucciones. En este artículo no voy a explicar esta funcionalidad, que quedará para un artículo futuro (de todos modos, no es imprescindible para dar los primeros pasos). El Arduino provee la alimentación al módulo a través de sus pines 5V y GND y las señales de datos se asignan a los pines 10 y 11, que funcionarán como un puerto serie por software para no interferir con el puerto serie del Arduino en los pines 0 y 1. Finalmente, se conecta un LED al pin 9, a través de una resistencia de 560 ohms, para realizar algunas pruebas.

El HC05 conectado al Arduino

Probando el circuito

Para comprobar que el Arduino es capaz de comunicarse con un dispositivo Bluetooth necesitamos dos cosas al menos: un dispositivo que envíe datos y un programa en el Arduino que los reciba. Para esto último, escribimos un programa simple que lee continuamente los datos recibidos por la interfaz serie por software en los pines 10 y 11 y los retransmite por el puerto serie del Arduino al programa Monitor en el IDE. De esa manera, cualquier dato recibido a través del módulo Bluetooth se copiará en la ventana del monitor. El programa es el siguiente:

Para enviar datos al Arduino usaremos un teléfono Android con una aplicación específica. Afortunadamente, si buscamos en la Play Store (Arduino Bluetooth, por ejemplo) hallaremos gran cantidad de apps que son capaces de transmitir datos, de muy variadas formas: terminales de texto, simuladores de controles de juego, controles remotos para autos, etc. Por su versatilidad, yo elegí la app llamada “Arduino Bluetooth Controller”, que tiene varias funciones y es muy configurable. Puede encontrarse en la Play Store.

Si alimentamos nuestro circuito, veremos que el led azul parpadea rápidamente, lo que indica que el HC05 no está conectado ni vinculado a otro dispositivo. ¿Qué significa esto? Dos dispositivos están conectados cuando están a una distancia mínima y operativos para que el bluetooth funcione y sea capaz de transmitir datos. Si el teléfono está apagado, por ejemplo, no puede existir conexión. Por otro lado, los dispositivos están vinculados (paired) cuando ya se han conectado y han intercambiado información de protocolo como la clave de conexión.

Al descargar e iniciar la app primero deberemos buscar el HC05 a través del Bluetooth. Para eso, tocamos el símbolo de lupa y luego de unos segundos nos aparecerá “HC-05” bajo el título de “Available” (disponible). Tocamos “HC-05” y se nos solicitará el PIN del dispositivo para vincularse. El pin por defecto es “1234” (es otra de las cosas que se puede modificar usando el modo comando que mencioné antes)

Una vez vinculados el teléfono y el HC05, ya podemos enviar datos. Podemos comprobar esta condición porque el led azul del HC05 parpadea lentamente, prendiendo dos veces (la tercera condición es cuando ya hay vinculación pero se pierde la conexión, lo que se evidencia porque el led parpadea lento, pero prende una sola vez). La app tiene cuatro modos de trabajo posibles: Controller, que simula un joystick, switch que funciona como un botón ON/OFF, Dimmer para realizar un control continuo, como el del brillo de una lámpara y Terminal para enviar y recibir texto. Para la primer prueba tocamos “Terminal Mode”

Una vez en el modo terminal, escribimos un texto y le damos al botón aceptar del teclado

Si todo está bien conectado, el Arduino recibirá este texto por el módulo HC05 y lo copiará a la terminal del IDE:


En todos los casos que querramos controlar algo con el Arduino (leds, luces, relés, motores, etc) debemos seguir un procedimiento similar: contar con una app que envíe datos por bluetooth y un programa en el Arduino que los reciba y actúe de acuerdo a los datos recibidos. Si el proyecto consiste en prender y apagar un motor, la app deberá contar con uno o dos botones que al ser pulsados envíen algo como “1” y “2”, según el caso, u “ON” y “OFF” y el programa del Arduino deberá esperar estos textos y activar o no la salida donde está conectado el motor (a través de un relé o cualquier otro elementos de control, por supuesto).

A modo de ejemplo, este sería un programa para prender y apagar el led conectado al pin 9. Espera permanentemente que llegue algo desde el HC05 y cuando llega, si es un caracter “1” prende el led y si es el caracter “0”, lo apaga

 

Para probarlo usamos la misma App, en “Switch mode” teniendo la precaución de configurarla primero para que al encender envíe “1” y al apagar envíe “0” (tocando el “engranaje” de la configuración en el Switch mode)

Y para terminar, otro programa de ejemplo para el Dimmer Mode, donde la app envía el valor del “slider” entre “0” y “255”.

Como decía antes, existen muchas apps para enviar datos a un Arduino y seguramente podrán encontrar la que mas se adapte a las necesidades de su proyecto. En última instancia, si sus requerimientos son muy específicos tienen la opción de diseñar su propia app usando App Inventor.

En otros artículos describiré algunos detalles de este módulo que quedaron pendientes, así como el procedimiento para enviar datos del Arduino al teléfono.

Como siempre, espero que les sea de utilidad y cualquier duda o sugerencia, en los comentarios!