Saludos controleras y controleros en el día de hoy vamos a aprender a realizar una comunicación bluetooth con Arduino empleando los módulos HC-05 o HC-06 y darle asi nuevas funcionalidades a nuestros proyectos con Arduino. Veremos la conexión al módulo empleando el puerto físico UART y también creando un puerto virtual UART.
Antes de comenzar te invito a darle un vistazo a nuestro Curso Gratuito de Arduino desde Cero.
Y a que te suscríbas al canal de YouTube si te gusta la programación de dispositivos embebidos, la teoría del control, modelado de sistemas y programación en general.
Protocolo de Comunicación Bluetooth
Existen diversas maneras de realizar una comunicación inalámbrica, como por ejemplo emplear comunicación NRF, ZigBee, Wi-Fi y Bluetooth.
Para este caso, veremos que el protocolo Bluetooth es un método de comunicación asequible en la red PAN (red de área personal), con una velocidad de datos máxima de 1Mb/S, que funciona hasta un rango nominal de 100metros usando una frecuencia de 2,4G es una forma común de comunicación inalámbrica.
Cuando deseamos integrar una comunicación Bluetooth con Arduino, el módulo HC-05 (que puede ser configurado como Maestro o Esclavo) y el módulo HC-06 (Que solo puede ser empleado como esclavo) son los más empleados para ofrecer esta comunicación a nuestra tarjeta de desarrollo.
Por lo tanto, si solo deseamos entablar una comunicación entre el arduino y nuestro celular, puedes usar cualquiera de los dos módulos, sin embargo si deseas realizar una comunicación inhalambrica entre dos arduinos, será obligatorio que por lo menos uno de estos arduinos tenga el módulo HC-05 que pueda ser configurado como Master.
Envío de datos a Arduino a través de Bluetooth
Si bien el módulo HC05 posee un regulador interno de 3.3v pudiendo conectarlo entonces a un voltaje de 5v se recomienda realizar una conexión de voltaje de 3,3 V, ya que la lógica de los pines de comunicación serial del HC-05 es de 3,3 V y suministrar 5V directamente al módulo puede existir la posibilidad de dañarlo.
Una de las formas de conseguir el voltaje de 3,3 V para el módulo es empleando un circuito divisor de voltaje (5v a 3.3v) entre el pin TX de arduino y el pin RX del módulo.
Puedes comprar todos los componentes de este proyecto en el portal chino aliexpress el cual tiene envios a todas partes del mundo y donde podras encontrar los componentes a un precio mucho más economicos:
Divisor de voltaje
El divisor de voltaje se compone de dos resistencias en serie:
Para este caso el Vin son 5v provenientes del TX del Arduino y el Vout son los 3.3v que conectaremos al RX del HC05. Existen muchas configuraciones de resistencias que logran este resultado, basta con aplicar la siguiente ecuación:
V_{out}=\dfrac{R_2}{R_1+R_2}V_{in}
En este caso se establece una resistencia de cualquier valor y de esa forma se puede encontrar cual debe ser el valor de la segunda resistencia.
Vamos a suponer en este caso, que colocaremos una resistencia , sustituyendo valores tenemos que:
3.3v=\dfrac{2.2k\Omega}{R_1+2.2k\Omega}5v
Despejando :
(R_1+2.2k\Omega)3.3v=(2.2k\Omega)(5v)
3.3vR_1+(2.2k\Omega)(3.3v)=(2.2k\Omega)(5v)
3.3vR_1=(2.2k\Omega)(5v) - (2.2k\Omega)(3.3v)
R_1=\dfrac{(2.2k\Omega)(5v) - (2.2k\Omega)(3.3v)}{3.3v}
R_1=\dfrac{11k\Omega - 7.26k\Omega}{5}
R_1=1.1333k\Omega
Por lo tanto, la resistencia
HC-05
Este módulo lo podemos diferenciar porque posee 6 pines:
Funciones de los Pines
Pin | Descripción |
---|---|
State | se puede conectar a la entrada de Arduino para conocer el estado de la conexión. Emparejado o desconectado. |
Rx | Pin de recepción del módulo. Se recomienda utilizar un divisor de voltaje como se muestra en la conexión. |
Tx | Pin de Transmisión. Se puede conectar directamente al Pin Rx del Arduino |
GND | conectado al pin GND de Arduino |
5v | Esta placa de conexión tiene un regulador interno de 3,3 V integrado. |
ES | Habilita o deshabilita el módulo. Raramente usado. |
Puerto serial fisico o puerto serial por software
El intercambio de datos entre el módulo bluetooth y el arduino se dá a través de una comunicación serial la cual puede ser una comunicación UART física empleando los pines del Arduino específicos para dicha comunicación serial de Arduino convensional o también se puede generar o crear pines de comunicación serial artificial por software empleando la biblioteca SoftwareSerial.
#include <SoftwareSerial.h>
La biblioteca SoftwareSerial tiene las siguientes limitaciones conocidas:
- Si utiliza varios puertos seriales por software, solo uno puede recibir datos a la vez.
- No todos los pines de Mega y Mega 2560 admiten interrupciones de cambio, por lo que solo se pueden usar los siguientes para RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 ( 63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
- No todos los pines de Leonardo y Micro admiten interrupciones de cambio, por lo que solo se pueden usar los siguientes para RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
- En Arduino o Genuino 101, la velocidad RX máxima actual es de 57600 bps
- En Arduino o Genuino 101 RX no funciona en el Pin 13
Estos pines de comunicación serial por software pueden crearse por ejemplo en el caso que nuestro proyecto ya esté empleando los pines físicos de la comunicación serial por hardwares (ejemplo los pines 1 y 2 del arduino uno).
Finalmente se debe emparejar el módulo con el dispositivo movil o cualquier otro con el que se desee realizar la comunicación.
Módulo Bluetooth Arduino UNO HC-05 (UART por Hardware)
Vamos a realizar esta práctica con el módulo HC-05 que es el módulo más completo pero puedes emplear el módulo HC-06 si es con el que cuentas en estos momentos.
Inicialmente vamos a emplear el Arduino UNO el cual únicamente posee un solo puerto serial en los PINES 0 y 1 y el cual se encuentra en paralelo con la comunicación USB CDC, por lo tanto es importante que antes de programar el Arduino, debes desconectar el HC05 de los pines 0 y 1 para que no haya conflicto.
La conexión del módulo HC05 en los pines 0 y 1 del Arduino UNO solo sería útil si en tu proyecto no requieres emplear el monitor serial del arduino. Por lo tanto vamos a construir el siguiente circuito:
Lista de Materiales
- Arduino UNO
- HC05
- 1 resistencia de 1k
- 1 resistencia de 2.2k
- 3 resistencias de 220
- 3 leds
- cables
NOTA: Todos los códigos están disponibles al final de este post para descarga de forma gratuita.
Aplicación Bluetooth
Para conectarnos al arduino será necesario emplear algún dispositivo que cuente con una comunicación serial. Para este caso, se emplea el celular en el cual se puede instalar diversas aplicaciones que la comunidad ya ha creado para ser usado en nuestro proyecto.
En este caso vamos a instalar la APP Arduino Bluetooth by Giumig Apps que ya incorpora un control remoto, un encendido de lampara y un terminal de chat. Pero tu eres libre de instalar el app que desees o crear tu propio app.
Nota de Configuración
Dado que no estamos empleando el monitor serial debemos conocer de antemano cual es la configuración inicial del módulo HC-05 como por ejemplo su velocidad en Baudios que por defecto puede estar en 9600 o en 38400.
Veremos como se pueden alterar estas configuraciones en los próximos ejemplos cuando incorporemos el monitor serial al proyecto.
Módulo Bluetooth + Serial Monitor con Arduino
Para NO perder la funcionalidad del Monitor Serial con Arduino, lo más conveniente es emplear un puerto serial virtual (por software) en el caso que estemos usando la placa de Arduino UNO o emplear alguna placa de Arduino que posea más de un UART por Hardware, como por ejemplo el Arduino Leonardo o Arduino MEGA.
Arduinos con más de un puerto UART
Para este caso, se emplea un Arduino Leonardo que posee dos puertos seriales UART (Serial, Serial1) donde la conexión USB CDC y los pines 0 y 1 NO están en paralelo y corresponen a dos puertos UART por hardware diferentes. Esto también puede ser empleado con cualquier otra placa que tenga más de un UART.
En este ejemplo, se incorpora un Relé con Arduino para encender un bombillo y adicionalmente vamos a usar un chat para enviar mensajes desde el celular para poderlos visualizar en el monitor serial. El circuito a implementar es:
Lista de Materiales
- Arduino Leonardo o Arduino MEGA
- HC05
- 1 resistencia de 1k
- 1 resistencia de 2.2k
- 3 resistencias de 220
- 3 leds
- Módulo Relevador
- Bombillo 110v
- cables
Configuración del HC-05 por comandos AT
Como ya disponemos del Monitor Serial, podremos configurar el módulo HC-05 a través de comandos AT. Para eso es necesario colocar nuestro dispositivo en modo configuración.
Esto se logra desenergizando el módulo y presionando el botón del mismo y sin soltar el botón energizamos nuevamente el módulo y esperamos 5 segundos antes de soltar el botón.
Veremos que la luz led comenzará a parpadear más lentamente. En ese momento podremos abrir el Monitor Serial el cual deberemos verificar que que el final del mensaje esté habilitado la opción Both NL & CR como lo vemos a continuación:
Los comandos AT que pueden ser empleados pueden ser vistos en el siguiente PDF (click para abir) donde los más importante son:
AT | Retorna un OK, es un saludo inicial |
AT+ORGL | Resetea el dispositivo de fabrica |
AT+NAME=Nombre | Establece un nombre para el dispositivo |
AT+NAME? | Pregunta cual es el nombre del dispositivo |
AT+ROLE=Parametro | Establece el ROL del dispositivo donde parámetro puede ser 0 para esclavo o 1 para Maestro |
AT+PSWD=Contraseña | Establece una contraseña o PIN al dispositivo |
AT+PSWD? | Pregunta cual es la contraseña del dispositivo |
AT+UART=Param1, Param2, Param3 | Configura la velocidad de la comunicación UART del disposotivo |
AT+UART? | Pregunta cual es la velocidad en baudios configurada en el dispositivo. |
UART Virtual (por Software)
El UART por Software puede ser empleado en CUALQUIER Arduino donde queramos ocupar otros pines diferentes a los pines dedicados al UART por Hardware empleando la biblioteca SoftwareSerial explicada al comienzo de este post.
El UART virtual es la mejor opción cuando NO disponemos del UART físico diferente al empleado en la comunicación con el monitor serial como es el caso del Arduino UNO.
Realicemos el mismo ejemplo anterior pero en un Arduino UNO creando un UART Virtual en los pines 10 y 11 que serán el RX y TX virtuales respectivamente:
Lista de Materiales
- Arduino UNO
- HC05
- 1 resistencia de 1k
- 1 resistencia de 2.2k
- 3 resistencias de 220
- 3 leds
- Módulo Relevador
- Bombillo 110v
- cables
Códigos
Todos los códigos vistos en esta entrada relacionados a la comunicación bluetooth empleando la tarjeta de prototipado del arduino pueden ser descargados gratuitamente dando click en el siguiente botón de descarga:
Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:
👉 Invitar a Sergio a un Café ☕️
Que esten muy bien, nos vemos en la siguiente entrada.
Mi nombre es Sergio Andres Castaño Giraldo, y en este sitio web voy a compartir una de las cosas que mas me gusta en la vida y es sobre la Ingeniería de Control y Automatización. El sitio web estará en constante crecimiento, voy a ir publicando material sobre el asunto desde temas básicos hasta temas un poco más complejos. Suscríbete al sitio web, dale me gusta a la página en Facebook y únete al canal de youtube. Espero de corazón que la información que comparto en este sitio, te pueda ser de utilidad. Y nuevamente te doy las gracias y la bienvenida a control automático educación.