Conexión de pantalla LED matriz MAX7219 con Arduino
¡Hola equipo! Bienvenidos a otra práctica en Ingtelecto Pro. Si alguna vez has querido que tu proyecto "hable" pero una pantalla LCD se te queda pequeña (o aburrida), hoy traemos la solución definitiva: la Matriz de LEDs MAX7219.
Estas pantallas son el estándar para crear letreros pasantes (scrolling text), relojes digitales gigantes o incluso videojuegos sencillos como el Tetris o Snake. Lo mejor de todo es que son modulares: puedes conectar una tras otra para hacer una pantalla tan larga como quieras, ¡usando solo 3 cables de tu Arduino!
En este tutorial dominaremos el chip MAX7219, aprenderemos a encadenar módulos y usaremos la librería profesional MD_Parola para crear efectos de texto asombrosos. ¡Vamos a iluminar el taller! 💡🔴
Analogía del Mundo Real: El Cine de la Vieja Escuela
Piensa en una película de cine antigua. En realidad, son fotos estáticas que pasan muy rápido frente a una luz. Tu cerebro une esas imágenes y cree ver movimiento.
La matriz LED hace lo mismo con la luz. No puede encender los 64 LEDs a la vez sin quemarse. Lo que hace es encender una fila a la vez, pero cambia tan rápido (miles de veces por segundo) que tus ojos ven una imagen completa y brillante. A este truco de magia lo llamamos Multiplexación.
Materiales Necesarios
Vamos a montar nuestro propio letrero luminoso.
Lista de Componentes ✅
- 1 x Placa Arduino UNO (o Nano/Mega).
- 1 x Módulo Matriz LED 8x8 con MAX7219 (Recomendado: El módulo "4 en 1" tipo FC-16).
- 5 x Cables Jumper (Hembra-Macho).
- 1 x Fuente de alimentación externa de 5V (Opcional pero recomendada si usas muchos módulos).
Fundamentos Técnicos: El Cerebro Detrás de las Luces
Antes de conectar, entendamos qué estamos manejando para no cometer errores de novato.
MAX7219
Controlador de Display
Daisy Chain (Cadena de Margarita)
- DIN (Data In): Por aquí entran los datos del Arduino.
- DOUT (Data Out): Por aquí salen los datos hacia el siguiente módulo.
Gracias a esto, puedes controlar 4, 8 o 16 matrices como si fueran una sola pantalla gigante.
Conexiones y Diagramas ⚙️
Vamos a conectar el módulo al Arduino usando el protocolo SPI por hardware, que es el más rápido para animaciones fluidas.
Advertencia de Energía ⚡
Un solo módulo de 4 matrices puede consumir hasta 1 Amperio si enciendes todos los LEDs al máximo brillo. El regulador del Arduino UNO solo soporta unos 500mA.
Recomendación: Para pruebas rápidas con brillo bajo, el Arduino aguanta. Para proyectos finales o brillo alto, conecta el VCC de la pantalla a una fuente de 5V externa (y une las tierras GND).
Tabla de Conexiones (SPI Hardware)
| Módulo MAX7219 | Arduino UNO | |
| VCC | 5V | |
| GND | GND | |
| DIN | Pin 11 (MOSI) | |
| CS / LOAD | Pin 10 (SS) | |
| CLK | Pin 13 (SCK) |
Nota: Si usas Arduino Mega, los pines cambian (DIN=51, CLK=52). Pero el pin CS (10) puede ser cualquiera que tú definas en el código.
Instalación de la Librería MD_Parola 📚
Para efectos profesionales, no reinventaremos la rueda. Usaremos la librería estándar de la industria maker.
- Abre Arduino IDE.
- Ve a Herramientas > Administrar Bibliotecas.
- Busca "MD_Parola". Instala la versión de MajicDesigns.
- Automáticamente te pedirá instalar "MD_MAX72XX". ¡Dile que SÍ (Install All)! La necesitamos para el control de hardware de bajo nivel.
Ejemplo 1: Texto Estático y Alineación
Vamos a probar que todo funcione. Este código muestra texto a la izquierda, centro y derecha.
¡IMPORTANTE ANTES DE SUBIR!
Fíjate en la línea #define HARDWARE_TYPE.
- Si tu módulo es el común de 4 piezas unidas (azul), usa
MD_MAX72XX::FC16_HW. - Si tienes módulos sueltos cuadrados verdes, prueba
MD_MAX72XX::GENERIC_HW. - Si el texto sale al revés o en espejo, ¡solo cambia esta línea!
#include
#include
#include
// 1. CONFIGURACIÓN DEL HARDWARE
// Prueba FC16_HW primero, es el más común hoy en día.
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW
// ¿Cuántas matrices de 8x8 tienes conectadas? (El módulo largo tiene 4)
#define MAX_DEVICES 4
// Pines de conexión
#define CS_PIN 10 // Chip Select
// Crear el objeto de control
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
void setup() {
// Iniciar la pantalla
myDisplay.begin();
// Ajustar brillo (0 a 15). ¡Usa 0 si alimentas desde Arduino!
myDisplay.setIntensity(0);
// Limpiar basura visual
myDisplay.displayClear();
}
void loop() {
// Alineación Izquierda
myDisplay.setTextAlignment(PA_LEFT);
myDisplay.print("Izq");
delay(2000);
// Alineación Centro
myDisplay.setTextAlignment(PA_CENTER);
myDisplay.print("Centro");
delay(2000);
// Alineación Derecha
myDisplay.setTextAlignment(PA_RIGHT);
myDisplay.print("Der");
delay(2000);
// Efecto Invertido (Letras oscuras, fondo iluminado)
myDisplay.setTextAlignment(PA_CENTER);
myDisplay.setInvert(true);
myDisplay.print("Hola");
delay(2000);
// Volver a normal y mostrar números
myDisplay.setInvert(false);
myDisplay.print(1234);
delay(2000);
}Análisis del Código
MD_Parola myDisplay(...): Crea la instancia. Nota que no definimos CLK ni DIN aquí porque la librería asume que usas los pines SPI por defecto del Arduino para máxima velocidad.myDisplay.setIntensity(0): Control vital. Aunque el rango es 0-15, el nivel 0 ya es bastante brillante en interiores. Subirlo a 15 consumirá mucha corriente.myDisplay.setTextAlignment(PA_CENTER): Esta función calcula automáticamente la posición para que el texto quede centrado en tus 4 módulos. ¡Magia matemática!
Ejemplo 2: Texto en Movimiento (Scrolling) 📜
Ahora sí, lo que todos queríamos: el letrero pasante.
El truco aquí es entender que la animación no ocurre en el delay(), sino que debemos actualizar la pantalla constantemente.
#include
#include
#include
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CS_PIN 10
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
void setup() {
myDisplay.begin();
myDisplay.setIntensity(0);
myDisplay.displayClear();
// Configurar el scroll
// (Texto, Alineación, Efecto Entrada, Velocidad)
// PA_SCROLL_LEFT hace que el texto venga desde la derecha hacia la izquierda
myDisplay.displayScroll("Suscríbete a Ingtelecto", PA_CENTER, PA_SCROLL_LEFT, 100);
}
void loop() {
// Esta es la función "latido de corazón"
// Debe ejecutarse lo más rápido posible en el loop
if (myDisplay.displayAnimate()) {
// La animación terminó (el texto pasó completo)
// Aquí reiniciamos la animación para que sea un bucle infinito
myDisplay.displayReset();
}
}Secretos del Scrolling
- La función
displayScroll(): Solo configura el mensaje. No lo mueve. Define qué va a pasar. - La función
displayAnimate(): Es la que realmente mueve los LEDs. Devuelvetruesolo cuando el texto ha terminado de pasar por completo. - El parámetro de velocidad (
100): Son milisegundos entre cada paso.- Número menor = Texto más rápido.
- Número mayor = Texto más lento.
Solución de Problemas Comunes
¿Tu pantalla se ve rara?
- El texto está al revés o en espejo: Tienes mal configurado el
HARDWARE_TYPE. CambiaFC16_HWporGENERIC_HW(o viceversa) y vuelve a subir el código. Existen 4 tipos de hardware posibles (`ICSTATION_HW`, `PAROLA_HW`), prueba hasta que uno se vea bien. - Solo funciona la primera matriz, las otras están apagadas: Revisa la conexión entre módulos. A veces los pines del conector están doblados. Asegúrate de que
MAX_DEVICESsea 4. - La pantalla parpadea o se reinicia el Arduino: Falta de potencia. Baja la intensidad a 0 o usa una fuente externa.
Conclusión
¡Proyecto Iluminado! 🌟
Acabas de dominar una de las interfaces visuales más llamativas de Arduino. Con el módulo MAX7219 y la librería Parola, puedes crear desde relojes NTP hasta notificadores de correo electrónico.
Tu próximo reto:
¿Te atreves a conectar un módulo Bluetooth HC-05 (que vimos en el tutorial pasado) y enviar el mensaje que quieres que aparezca en el letrero desde tu celular?
¡Sigue experimentando y nos vemos en el próximo tutorial!
Deja una respuesta

Estos temas te pueden interesar