Enviar mensajes desde celular a matriz LED con Arduino y Bluetooth
Este tutorial explica cómo configurar un sistema que permite enviar mensajes desde tu teléfono móvil a una matriz LED utilizando comunicación Bluetooth. Además, se detalla el proceso de conexión del módulo Bluetooth al Arduino, la programación necesaria para interpretar y mostrar los datos en la matriz, y consejos prácticos para solucionar problemas comunes. Aprenderás a diseñar tanto la parte de hardware como la lógica del software, lo que te permitirá personalizar y expandir este proyecto para diferentes aplicaciones interactivas.
Componentes necesarios
- Arduino UNO
- Módulo Bluetooth HC-05
- Matriz LED 8×32 con controlador MAX7219
- Cables de conexión
- Smartphone Android con la aplicación «Serial Terminal Bluetooth»
- Cable USB para programar el Arduino
Conexiones del hardware
Según el esquema compartido, las conexiones son las siguientes:
Módulo Bluetooth HC-05 a Arduino
- VCC del HC-05 → 5V del Arduino
- GND del HC-05 → GND del Arduino
- TXD del HC-05 → Pin 3 del Arduino (RX)
- RXD del HC-05 → Pin 2 del Arduino (TX)
Matriz LED a Arduino
- VCC de la matriz → 5V del Arduino
- GND de la matriz → GND del Arduino
- DIN de la matriz → Pin 12 del Arduino (cable verde)
- CS de la matriz → Pin 10 del Arduino (cable amarillo)
- CLK de la matriz → Pin 11 del Arduino (cable magenta)
Configuración del Bluetooth y la aplicación
Pasos para conectar el smartphone con el HC-05:
- Emparejar el dispositivo Bluetooth:
- Ve a Configuración > Bluetooth en tu smartphone
- Activa el Bluetooth si no está activado
- Busca dispositivos nuevos
- Selecciona el módulo HC-05 cuando aparezca
- Ingresa el código PIN (generalmente «1234» o «0000»)
- Espera a que se complete el emparejamiento
- Configurar la aplicación Serial Terminal Bluetooth:
- Instala la aplicación «Serial Terminal Bluetooth» desde Google Play Store
- Abre la aplicación
- Ve a la sección «Devices» o «Dispositivos»
- Selecciona el HC-05 de la lista de dispositivos emparejados
- Espera a que se establezca la conexión (debería aparecer un indicador «Connected» o «Conectado»)
- Configurar los ajustes de envío:
- En la aplicación, ve a «Settings» o «Configuración»
- Luego a «Send» o «Enviar»
- Selecciona «LF» (Line Feed) como el terminador de línea
- Esta configuración es crucial para que Arduino reconozca correctamente el fin de cada mensaje
Código para Arduino
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <SoftwareSerial.h>
SoftwareSerial bt(3,2); // donde Rx = 3, Tx = 2
// Define the number of devices we have in the chain and the hardware interface
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN 11
#define DATA_PIN 12
#define CS_PIN 10
// SOFTWARE SPI
MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
// Scrolling parameters
uint8_t scrollSpeed = 75; // default frame delay value
textEffect_t scrollEffect = PA_SCROLL_LEFT;
textPosition_t scrollAlign = PA_LEFT;
uint16_t scrollPause = 5000; // in milliseconds
// Global message buffers shared by Serial and Scrolling functions
#define BUF_SIZE 75
char curMessage[BUF_SIZE] = { "" };
char newMessage[BUF_SIZE] = { "Listo para recibir..." };
bool newMessageAvailable = true;
void readSerial(void)
{
static char *cp = newMessage;
while (Serial.available())
{
*cp = (char)Serial.read();
if ((*cp == '\n') || (cp - newMessage >= BUF_SIZE-2)) // end of message character or full buffer
{
*cp = '\0'; // end the string
// restart the index for next filling spree and flag we have a message waiting
cp = newMessage;
newMessageAvailable = true;
}
else // move char pointer to next position
cp++;
}
}
void setup()
{
Serial.begin(57600);
bt.begin(9600); // 9600 es la velocidad de transferencia serial por defecto del módulo bluetooth HC05
Serial.print("\n[Parola Scrolling Display]\nType a message for the scrolling display\nEnd message line with a newline");
P.begin();
P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);
P.setIntensity(15);
}
void loop()
{
if (P.displayAnimate())
{
if (newMessageAvailable)
{
strcpy(curMessage, newMessage);
newMessageAvailable = false;
}
P.displayReset();
}
readSerial();
readBT();
}
void readBT(){
static char *cp = newMessage;
while (bt.available())
{
*cp = (char)bt.read();
if ((*cp == '\n') || (cp - newMessage >= BUF_SIZE-2)) // end of message character or full buffer
{
*cp = '\0'; // end the string
// restart the index for next filling spree and flag we have a message waiting
cp = newMessage;
newMessageAvailable = true;
}
else // move char pointer to next position
cp++;
}
}
Explicación del código
Este código realiza las siguientes funciones:
- Inicialización de bibliotecas y hardware:
- Configura la comunicación Bluetooth a través de SoftwareSerial en los pines 2 y 3
- Establece los parámetros para la matriz LED de 4 dispositivos MAX7219
- Define los parámetros de desplazamiento para el texto (velocidad, efecto, pausa)
- Funciones principales:
readSerial()
: Lee mensajes del monitor serial del Arduino (útil para pruebas)readBT()
: Lee mensajes enviados desde el smartphone a través del módulo Bluetooth- Ambas funciones almacenan el mensaje recibido en el buffer
newMessage
- Flujo del programa:
- En
setup()
, inicializa la comunicación serial, el Bluetooth y la matriz LED - En
loop()
, anima el texto en la pantalla y verifica si hay nuevos mensajes del serial o Bluetooth - Cuando se recibe un nuevo mensaje (terminado con ‘\n’), se copia al mensaje actual y se muestra
- En
Envío de mensajes
- Una vez conectado el HC-05 y configurada la aplicación:
- Escribe tu mensaje en el área de texto de la aplicación
- Presiona el botón «Send» o «Enviar»
- El mensaje aparecerá desplazándose en la matriz LED
- Puedes enviar múltiples mensajes, cada uno reemplazará al anterior
Solución de problemas comunes
El teléfono no detecta el módulo Bluetooth
- Verifica que el HC-05 esté correctamente alimentado (LED parpadeando)
- Asegúrate de que el módulo no esté ya emparejado con otro dispositivo
La matriz no muestra los mensajes
- Verifica todas las conexiones según el esquema
- Comprueba que estés usando las bibliotecas correctas
- Asegúrate de que la matriz esté correctamente alimentada
El mensaje se muestra con caracteres extraños
- Verifica la configuración de baudios (9600 para el Bluetooth)
- Comprueba que hayas seleccionado «LF» en los ajustes de envío
- Reinicia tanto el Arduino como la aplicación
Personalización
Puedes modificar varios aspectos:
- Cambiar la velocidad de desplazamiento ajustando el valor
scrollSpeed
- Ajustar el brillo de la matriz modificando el valor en
P.setIntensity()
- Cambiar los efectos de animación (PA_SCROLL_LEFT puede cambiarse por otros efectos disponibles en la biblioteca MD_Parola)
- Modificar el tiempo de pausa entre animaciones ajustando
scrollPause
Bibliotecas necesarias
Para este proyecto, debes instalar las siguientes bibliotecas desde el Gestor de Bibliotecas de Arduino:
- MD_Parola
- MD_MAX72xx
- SPI (incluida por defecto)
- SoftwareSerial