Tutorial de Conexión de bluetooth con Arduino
Aprende a interconectar tu placa Arduino con dispositivos Bluetooth, abriendo un mundo de posibilidades para el control inalámbrico y la automatización.
Puntos Clave para una Conexión Bluetooth Exitosa con Arduino
- Divisor de Voltaje Crucial: Protege tu módulo Bluetooth (HC-05/HC-06) usando un divisor de voltaje (resistencias de 1kΩ y 2.2kΩ) en la línea TX del Arduino hacia el pin RXD del módulo, ya que el HC-05/HC-06 opera a 3.3V lógicamente mientras Arduino lo hace a 5V.
- SoftwareSerial para Flexibilidad: Utiliza la librería
SoftwareSerial
para asignar pines digitales como puertos seriales (RX, TX), evitando conflictos con los pines seriales hardware (D0, D1) usados por el Monitor Serial y para la carga de código. - Desconectar para Cargar Código: Siempre desconecta el módulo Bluetooth del Arduino (especialmente los pines RX y TX) antes de subir un nuevo sketch para evitar interferencias que puedan impedir la carga del programa.
Como experto en Arduino, te guiaré a través de un tutorial completo para establecer una comunicación Bluetooth entre tu placa Arduino y otros dispositivos. Este tutorial se centrará en el popular módulo Bluetooth HC-05 (o su similar HC-06), ampliamente utilizado por su economía y facilidad de integración. Al finalizar, serás capaz de controlar proyectos Arduino de forma inalámbrica, como encender un LED desde tu smartphone.
Fundamentos de la Comunicación Bluetooth con Arduino
El Bluetooth es una tecnología de comunicación inalámbrica de corto alcance que permite el intercambio de datos entre dispositivos. En el ecosistema Arduino, se emplea comúnmente para establecer una comunicación serial (UART) con smartphones, ordenadores u otras placas Arduino. Los módulos HC-05 y HC-06 son ideales para este propósito, ya que facilitan el envío y la recepción de datos a través de sus pines de transmisión (TX) y recepción (RX).
Es fundamental comprender que estos módulos operan a 3.3V lógicamente en sus pines de datos (aunque su VCC puede ser de 5V). Esto es crítico para la conexión con la mayoría de las placas Arduino (como el Uno), que operan a 5V. La protección adecuada del módulo mediante un divisor de voltaje es esencial para evitar daños.
Materiales para el proyecto Arduino del BLE
- Arduino Uno
- Módulo Bluetooth (AT-09 o HM-10)
- Kit de tablero, LED y resistencias
- Smartphone o tablet (con Bluetooth 4.0 o superior.)
- Apk de Bluetooth en serie.
- Protoboard: Opcional, pero muy recomendado para organizar las conexiones.
- Resistencias: Una resistencia de 1kΩ y otra de 2.2kΩ para el divisor de voltaje.
- LED: Un LED estándar.
- Resistencia para LED: Una resistencia de 220Ω para proteger el LED.
- Ordenador: Con el IDE de Arduino instalado.
- Smartphone: Un teléfono Android con una aplicación de terminal Bluetooth (ej. «Bluetooth Serial Terminal» o «Bluetooth Terminal»).
La mayoría de las aplicaciones de control GUI no funcionan con los módulos BLE.
Preparación del Hardware: Conexiones y Precauciones
El cableado es una etapa crítica. Presta especial atención a la sección del divisor de voltaje para proteger tu módulo Bluetooth. Desconecta siempre el Arduino de la alimentación antes de realizar cualquier conexión.
Entendiendo los Pines del Módulo HC-05/HC-06
Ambos módulos, HC-05 y HC-06, comparten pines similares para la comunicación básica:
- VCC: Alimentación (generalmente 5V del Arduino).
- GND: Tierra.
- TXD (Transmit Data): Envía datos desde el módulo Bluetooth.
- RXD (Receive Data): Recibe datos para el módulo Bluetooth.
- STATE (Opcional): Indica el estado de conexión del módulo (parpadeo rápido: no conectado; parpadeo lento: conectado).
- EN/KEY (Opcional): Permite entrar en modo de comandos AT para configuración avanzada (solo en HC-05).
La Importancia del Divisor de Voltaje
¡Advertencia Crucial! Aunque el pin VCC del módulo HC-05/HC-06 puede tolerar 5V, su pin RXD (recepción de datos) está diseñado para operar con señales de 3.3V. Conectar directamente el pin TX (transmisión) de 5V del Arduino al pin RXD del módulo puede dañarlo irreversiblemente. Por ello, es imprescindible usar un divisor de voltaje para reducir la señal de 5V del Arduino a aproximadamente 3.3V antes de que llegue al pin RXD del módulo Bluetooth.
Esquema de Conexiones Físicas
Para mantener los pines seriales hardware (D0 y D1) del Arduino libres para la carga de código y la depuración con el Monitor Serial, utilizaremos la librería SoftwareSerial
. Esto nos permite asignar cualquier otro par de pines digitales (por ejemplo, D10 y D11) para la comunicación serial con el módulo Bluetooth.
Conexiones Generales:
- HC-05/HC-06 VCC a Arduino 5V
- HC-05/HC-06 GND a Arduino GND
Conexiones Seriales (usando SoftwareSerial):
- HC-05/HC-06 TXD a Arduino Digital Pin 10 (Este será el RX del SoftwareSerial en Arduino).
- HC-05/HC-06 RXD a Arduino Digital Pin 11 (Este será el TX del SoftwareSerial en Arduino, conectado a través de un divisor de voltaje).
Configuración del Divisor de Voltaje para el pin RXD del HC-05/HC-06:
Este es el paso más importante para proteger tu módulo:
- Conecta el Pin Digital 11 del Arduino (TX del SoftwareSerial) a un extremo de una resistencia de 1kΩ.
- El otro extremo de la resistencia de 1kΩ se conecta a dos puntos: al pin RXD del HC-05/HC-06 y a un extremo de una resistencia de 2.2kΩ.
- El otro extremo de la resistencia de 2.2kΩ se conecta a GND.
Con esta configuración, la tensión que llega al pin RXD del módulo será aproximadamente 3.3V (5V * (2.2kΩ / (1kΩ + 2.2kΩ)) ≈ 3.33V), ideal para el módulo.
Conexión del LED de Prueba:
- Conecta el cátodo del LED (pata más corta) a GND a través de una resistencia de 220Ω.
- Conecta el ánodo del LED (pata más larga) al Pin Digital 13 del Arduino (donde se encuentra el LED integrado en la mayoría de las placas Uno).
Diagrama de cableado de Arduino BLE
Primero, conecta el módulo bluetooth en el tablero. El pin RXD del módulo bluetooth requiere 3.3V, mientras que el Arduino suministra una salida de 5V. Por lo tanto, crearemos un divisor de voltaje usando resistencias de 1K y 2K Ohm para ajustar este voltaje.
Cuando termines, haz las siguientes conexiones (Módulo Bluetooth -> Arduino):
VCC -> 5v
GND -> GND
TX -> RX
RX -> TX
Asegúrate de conectar las resistencias al módulo bluetooth como se muestra en la imagen. Luego, conecta un extremo de la resistencia (2 KΩ) a GND y el otro extremo (1 KΩ) a la clavija TX del Arduino. Los módulos BLE tienen diferentes pinouts, así que asegúrese de leer las etiquetas cuidadosamente antes de conectarlos.
Ahora, conecta dos LEDs en la placa base en serie con 1 KΩ resistencias. A continuación, conecte los LEDs a los pines 8 y 9 del Arduino. Así es como debería verse cuando termines.
Programación del Arduino: Código y Configuración
Una vez que el hardware está correctamente conectado (o al menos visualmente planificado antes de conectar el módulo Bluetooth al Arduino para la carga de código), es hora de preparar el software.
Código Arduino para Comunicación Bluetooth
Este código permitirá a tu Arduino recibir comandos a través de Bluetooth para encender o apagar el LED conectado al pin 13. También enviará confirmaciones de vuelta al dispositivo Bluetooth.
Ahora, vamos a escribir el código para controlar los LED’s usando el Smartphone por Bluetooth. Lo realizaremos usando la comunicación en serie. Primero, inicializa las variables y los pines como se muestra a continuación:
int led1 = 8; //First LED to Arduino pin 8 int led2 = 9; //Second LED to pin 9 int data; //Variable to store serial data int flag1 = 0; //Variable to store LED1 state int flag2 = 0; //Variable to store LED2 state
Entonces define el método setup() para poner los pines como salidas y habilitar la comunicación en serie.
void setup() { Serial.begin(9600); //Start serial communication pinMode(led1, OUTPUT); //Set pin 8 as output pinMode(led2,OUTPUT); //Set pin 9 as output }
Finalmente, necesitamos definir el método loop() para ejecutar la lógica principal de control.
void loop() { while(Serial.available()) //While bluetooth is receiving data { data == Serial.read(); //Accept & store data in the variable "data" if(data == '1') //If received data = 1 { if(flag1 == 0) //Check if flag = 0 { digitalWrite(led1,HIGH); //turn led1 on Serial.println("LED 1 is on"); //print message on serial monitor flag1 = 1; //set flag as 1 } else if(flag1 == 1) //If flag is already 1 { digitalWrite(led1,LOW); //Turn off led1 Serial.println("LED 1 is off"); //print message flag1 = 0; //set flag as 0 } } if (data == '2') //if data received is 2 { if(flag2 == 0) //if flag value is 0 { digitalWrite(led2,HIGH); //turn led2 on Serial.println("LED 2 is on"); //print message flag2 = 1; //set flag2 as 1 } else if(flag2 == 1) //if flag2 is already 1 { digitalWrite(led2, LOW); //turn led2 off Serial.println("LED 2 is off"); //print message flag2 = 0; //set flag as 0 } } } }
Con esto hecho, ahora podemos cargar el código a nuestro Arduino. Asegúrate de desconectar el módulo bluetooth antes de subir el código. (Los pines TX/RX son usados por la Comunicación Serial al subir el código).
Código definitivo:
/*
* Connect LEDs to pin 8 & 9.
* Connect Bluetooth as :-
* ACC -> 5v of arduino
* GND -> GND
* TX -> RX
* RX -> TX
* NOTE :- Antes de subir este código asegúrate de quitar los pines de TX y RX del arduino o de lo contrario obtendrás un error
*/
//Set Arduino pin no. 8 & 9 as LEDs
int led1 = 8;
int led2 = 9;
//Random variable to store input data
int data;
//Two variables to store LED state wheather On/Off
int flag1 = 0;
int flag2 = 0;
void setup()
{
Serial.begin(9600); //Set baud rate for serial communication
pinMode(led1,OUTPUT); //Set LED pins as output
pinMode(led2,OUTPUT);
}
void loop()
{
while(Serial.available()) //while data is available
{
data = Serial.read(); //read the input and store in variable data
if(data == '1') //Check if data is '1'
{
if(flag1 == 0) //check if flag is set to 0
{
digitalWrite(led1,HIGH); //if flag is 0 turns LED 1 on
Serial.println("LED 1 is On"); //prints on terminal
flag1 = 1; //sets flag to 1
}
else if(flag1 == 1) //checks if flag is 1
{
digitalWrite(led1,LOW); //if flag is 1 turns LED 1 off
Serial.println("LED 1 is off");
flag1 = 0; //sets flag to 0
}
}
if(data == '2') //checks if data is '2'
{
if(flag2 == 0) //checks if flag is 0
{
digitalWrite(led2,HIGH); //if flag is 0 turns LED 2 on
Serial.println("LED 2 is on"); //prints on terminal
flag2 = 1; //sets flag to 1
}
else if(flag2 == 1) //checks if flag is 1
{
digitalWrite(led2,LOW); //if flag is 1 turns LED 2 off
Serial.println("LED 2 is off");
flag2 = 0; //sets flag to 0
}
}
}
}
Pasos para Subir el Código al Arduino
- Desconecta el módulo Bluetooth: Antes de subir el código, es crucial desconectar los pines TXD y RXD del módulo Bluetooth (los que van a D10 y D11 del Arduino). Si no lo haces, la comunicación serial del Arduino con tu ordenador (usada para cargar el código) podría verse interferida.
- Abre el IDE de Arduino: Copia y pega el código proporcionado en una nueva ventana del IDE.
- Selecciona tu placa y puerto: Ve a
Herramientas > Placa
y elige tu modelo de Arduino (ej.Arduino Uno
). Luego, ve aHerramientas > Puerto
y selecciona el puerto COM al que está conectado tu Arduino. - Sube el código: Haz clic en el botón de «Subir» (el ícono de flecha hacia la derecha). Espera a que el IDE muestre «Subido correctamente».
- Reconecta el módulo Bluetooth: Una vez que el código se haya subido exitosamente, puedes volver a conectar los pines TXD y RXD del módulo Bluetooth a los pines D10 y D11 del Arduino, asegurándote de que el divisor de voltaje esté correctamente implementado en el pin RXD del módulo.
Usa tu Smartphone BLE con Arduino
Para conectar el teléfono a Bluetooth primero necesitas una aplicación de serie de Bluetooth. He usado la aplicación Terminal serial Bluetooth.
Una vez que se establezca la conexión, pulsa la tecla «M1» para asignarle un valor. Asigne «M1» = 1 y «M2» = 2.
Ahora enciende el Arduino y haz clic en M1 en la aplicación para Smartphone. Deberías ver que el primer LED se enciende. Haz clic en M1 de nuevo para apagar el LED. Repite este proceso con M2 para el segundo LED.
Emparejamiento y Prueba de Conexión Bluetooth
Con el Arduino programado y el módulo Bluetooth conectado correctamente, el siguiente paso es emparejar tu smartphone con el módulo y probar la comunicación.
Emparejando el Módulo Bluetooth con tu Smartphone
- Alimenta el Arduino: Una vez que el módulo Bluetooth esté conectado al Arduino y el Arduino alimentado (por USB o fuente externa), el LED del módulo Bluetooth debería empezar a parpadear rápidamente. Esto indica que está en modo de búsqueda o esperando una conexión.
- Activa Bluetooth en tu smartphone: Ve a la configuración de Bluetooth de tu teléfono.
- Busca dispositivos: Escanea en busca de nuevos dispositivos. Deberías ver un dispositivo llamado
HC-05
oHC-06
(este es el nombre predeterminado). - Empareja el dispositivo: Selecciona el módulo Bluetooth. Te pedirá una contraseña (PIN). El PIN predeterminado para el HC-05 y HC-06 suele ser
1234
o0000
. Introduce el PIN y empareja los dispositivos. - Verifica la conexión: Una vez emparejado y conectado, el LED del módulo Bluetooth debería cambiar su patrón de parpadeo (algunos parpadean más lento o se encienden de forma constante) para indicar que se ha establecido una conexión activa.
Probando la Comunicación
Para interactuar con el Arduino, necesitarás una aplicación de terminal Bluetooth en tu smartphone.
- Abre la aplicación de Terminal Bluetooth: En tu smartphone, abre la aplicación de terminal Bluetooth que descargaste (ej. «Bluetooth Serial Terminal»).
- Conecta a tu módulo: Dentro de la aplicación, busca tu módulo
HC-05
oHC-06
en la lista de dispositivos emparejados y conéctate a él. - Envía comandos:
- Envía el carácter
1
(y presiona enviar/send). Deberías ver el LED en tu Arduino encenderse. - Envía el carácter
0
(y presiona enviar/send). Deberías ver el LED en tu Arduino apagarse. - La aplicación de terminal también debería mostrar las confirmaciones «LED ON» o «LED OFF» enviadas por el Arduino.
- Envía el carácter
- Monitor Serial del Arduino IDE (Opcional para depuración): Si abres el Monitor Serial en el IDE de Arduino (asegurándote de que la velocidad de baudios esté configurada a
9600
), también podrás ver los caracteres que el Arduino recibe a través de Bluetooth («Recibido via Bluetooth: X») y los que envía al Bluetooth («Enviando a Bluetooth: Y»). Puedes incluso enviar caracteres desde el Monitor Serial al módulo Bluetooth, pero recuerda que el módulo Bluetooth y el monitor serial comparten el mismo puerto serial virtual, por lo que es mejor usar uno u otro a la vez para evitar conflictos.
Consideraciones Avanzadas y Solución de Problemas
Aunque el proceso básico es directo, hay aspectos adicionales y consejos para depuración que te ayudarán a dominar la comunicación Bluetooth.
Tabla de Problemas Comunes y Soluciones
A continuación, se presenta una tabla que resume los problemas más frecuentes y sus respectivas soluciones para ayudarte en la depuración.
Velocidad de Baudios
La velocidad de baudios (Baud Rate), configurada con Serial.begin()
y BTSerial.begin()
en el código Arduino, debe coincidir exactamente con la velocidad configurada en tu aplicación de terminal Bluetooth. Para los módulos HC-05 y HC-06, la velocidad predeterminada es comúnmente 9600 bps. Si necesitas cambiarla, deberás usar comandos AT (ver siguiente sección).
Modo AT (Configuración Avanzada del Módulo)
El módulo HC-05 puede configurarse en «Modo de Comando AT» para cambiar parámetros como su nombre, PIN, velocidad de baudios o para operar como maestro en lugar de esclavo. Este es un proceso más avanzado:
- Para entrar en modo AT, el HC-05 generalmente requiere mantener presionado el botón
EN
oKEY
mientras se energiza. El LED del módulo parpadeará más lentamente (aproximadamente cada 2 segundos) indicando el modo AT. - Luego, puedes enviar comandos AT a través del Monitor Serial del Arduino IDE (configurando una velocidad de baudios específica, a menudo 38400 bps para el modo AT).
- Ejemplos de comandos AT:
AT+NAME=MiArduinoBT
(cambia el nombre),AT+PSWD=9876
(cambia el PIN),AT+UART=115200,0,0
(cambia la velocidad de baudios).
El HC-06 es típicamente solo un dispositivo esclavo y sus opciones de configuración AT son más limitadas, a menudo solo permitiendo cambiar nombre y PIN con comandos AT directos sin un modo AT específico de entrada.
Ampliando tu Proyecto
Con esta base de comunicación Bluetooth, las posibilidades son infinitas:
- Control de Múltiples Actuadores: En lugar de un solo LED, puedes controlar relés para encender luces o electrodomésticos, motores para robots o ventiladores, o incluso servomotores para brazos robóticos.
- Lectura de Sensores: Envía datos de sensores (temperatura, humedad, distancia, luz) desde el Arduino a tu smartphone para monitorización remota.
- Automatización del Hogar: Integra el sistema en tu casa para controlar dispositivos de forma inalámbrica.
- Robot Controlado por Bluetooth: Construye un robot móvil y contrólalo con tu teléfono.
- Comunicación entre Arduinos: Configura dos módulos HC-05 (uno como maestro y otro como esclavo) para que dos placas Arduino puedan comunicarse entre sí de forma inalámbrica.