Matriz LED Con Arduino MAX7219
Matriz LED Con Arduino MAX7219
Control de una matriz LED con Arduino y el integrado MAX7219 que permite utilizar unos
pocos pines del microcontrolador para su funcionamiento.
Interfaz de la pantalla de matriz de puntos LED MAX7219 con Arduino
https://lastminuteengineers.com/max7219-dot-matrix-arduino-tutorial/
Una pantalla de matriz de puntos de 8x8 normalmente tiene 16 pines, 8 para cada fila y 8 para cada
columna. Todas las filas y columnas están conectadas entre sí para reducir la cantidad de pines. Si este
no fuera el caso, una pantalla de matriz de puntos de 8x8 necesitaría 65 pines, uno para cada LED y uno
para un conector de ánodo o cátodo común. Al conectar filas y columnas, solo se necesitan 16 pines
para controlar toda la matriz. Esta técnica de controlar una gran cantidad de LED con menos pines se
conoce como Multiplexación. En esta técnica, cada columna se activa durante un tiempo muy breve y, al
mismo tiempo, los LED de esa columna se encienden al dirigirse a la fila correspondiente. Como
resultado, no se encienden más de ocho LED al mismo tiempo. Las columnas se encienden tan rápido
(cientos o miles de veces por segundo) que el ojo humano percibe la pantalla como completamente
iluminada.
El único problema con la multiplexación es que hay que actualizar la pantalla todo el tiempo para
mantener la imagen estable. Para eso está el chip MAX7219, que se encarga de todo el trabajo de
control y actualización. Todo lo que tienes que hacer es enviarle comandos seriales a través de la
interfaz SPI de 4 pines y él se encargará del resto.
Puede controlar completamente 64 LED individuales manteniendo su brillo constante. Una vez que el
microcontrolador ha actualizado la pantalla, el MAX7219 se encarga de actualizar la pantalla a 800 Hz.
Esto libera al microcontrolador para hacer otras cosas importantes.
El MAX7219 tiene un modo de ahorro de energía en el que se puede apagar la pantalla para ahorrar
energía. También apaga los LED durante el inicio, lo que evita que se muestren pantallas extrañas
durante los primeros segundos de funcionamiento.
El MAX7219 se comunica a través de la interfaz SPI, por lo que solo necesita 3 pines de datos para
conectarse a un microcontrolador. Además, podemos conectar en cadena varios módulos para obtener
una pantalla más grande utilizando los mismos 3 cables.
Configuración de la corriente máxima y el brillo
El MAX7219 le permite ajustar el brillo de la pantalla mediante hardware o software (o ambos). El
módulo incluye la resistencia RSet para ajustar el brillo por hardware, como se observa en la siguiente
imagen. Esa resistencia controla la corriente máxima hacia los LED y, por lo tanto, el brillo general de la
pantalla.
VCC está conectado a 5 V. Debido a que la pantalla consume mucha corriente (hasta 1 A con el brillo
máximo), es mejor utilizar una fuente de alimentación externa en lugar de la fuente de 5 V de Arduino.
Si desea utilizar la fuente de 5 V de Arduino, mantenga el brillo por debajo del 25 % para evitar el
sobrecalentamiento del regulador de voltaje.
GND es el pin de tierra común.
DIN es el pin de datos. Conéctelo a cualquier pin digital del microcontrolador.
CS es Chip Select (a veces denominado LOAD). Conéctelo a cualquier pin digital del microcontrolador.
CLOCK significa pin de reloj. Conéctelo a cualquier pin digital del microcontrolador.
Como la pantalla consume mucha corriente, utilizaremos una fuente de alimentación externa en lugar
de la fuente de alimentación de 5 V de la placa Arduino. Si solo utilizas un módulo MAX7219, puedes
alimentarlo directamente desde Arduino, pero debes evitar hacerlo si es posible.
Conectando los pines SPI
Tenga en cuenta que cada placa Arduino tiene un conjunto único de pines SPI que deben conectarse
como corresponde. Para las placas Arduino como la UNO/Nano V3.0, estos pines son digitales 13 (SCK),
12 (CIPO), 11 (COPI) y 10 (CS).
Instalación de la biblioteca
Controlar el módulo MAX7219 es mucho trabajo. Afortunadamente, la biblioteca MD Parola se escribió
para ocultar las complejidades del MAX7219, lo que nos permite controlar la pantalla con comandos
simples.
Para instalar la biblioteca, navegue a Sketch > Incluir biblioteca > Administrar bibliotecas… Espere a que
el Administrador de bibliotecas descargue el índice de bibliotecas y actualice la lista de bibliotecas
instaladas.
Filtra tu búsqueda ingresando ' max72xx' . Busca MD_MAX72XX de MajicDesigns . Haz clic en esa
entrada y luego elige Instalar. La biblioteca MD_MAX72XX es una biblioteca específica de hardware que
maneja funciones de nivel inferior. Debe utilizarse junto con la biblioteca MD_Parola para crear una
variedad de animaciones de texto, como efectos de texto de desplazamiento y sprites. Instale también
esa biblioteca.
Veamos un EJEMPLO:
#include <MD_Parola.h> // Including the required Arduino libraries
#include <MD_MAX72xx.h>
#include <SPI.h>
// Uncomment according to your hardware type
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW
// Create a new instance of the MD_Parola class with hardware SPI connection
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
void setup() {
myDisplay.begin(); // Intialize the object
myDisplay.setIntensity(0); // Set brightness of display (0-15)
myDisplay.displayClear(); // Clear the display
}
void loop() {
myDisplay.setTextAlignment(PA_LEFT);
myDisplay.print("Left");
delay(2000);
myDisplay.setTextAlignment(PA_CENTER);
myDisplay.print("Center");
delay(2000);
myDisplay.setTextAlignment(PA_RIGHT);
myDisplay.print("Right");
delay(2000);
myDisplay.setTextAlignment(PA_CENTER);
myDisplay.setInvert(true);
myDisplay.print("Invert");
delay(2000);
myDisplay.setInvert(false);
myDisplay.print(1234);
delay(2000);
}
Si lo que se desee mostrar permanecerá sin cambios pero en movimiento hacia un lado, podría incluirse
en el código el uso de arrays para incorporar el desplazamiento, como se observa:
#include <LedControl.h>
// Configura el pin del MAX7219
const int dataIn = 2; // Pin de datos
const int clk = 3; // Pin de reloj
const int cs = 4; // Pin de selección de chip
// Número de dispositivos en la cadena (solo 1 para un 8x8)
const int numDevices = 1;
LedControl lc = LedControl(dataIn, clk, cs, numDevices);
// Definir el patrón de la flecha
byte arrow[8] = {
B00001000,
B00011000,
B00111111,
B01111111,
B00111111,
B00011000,
B00001000,
B00000000,
};
void setup() {
for (int i = 0; i < numDevices; i++) {
lc.shutdown(i, false); // Despertar el display
lc.setIntensity(i, 2); // Ajustar el brillo (0-15)
lc.clearDisplay(i); // Limpiar el display
}
}
void loop() {
for (int pos = 0; pos < 8; pos++) { // Mueve la flecha de izquierda a derecha
lc.clearDisplay(0); // Limpia el display
for (int row = 0; row < 8; row++) {
byte pattern = arrow[row];
lc.setRow(0, row, pattern << pos |
(pattern >> (8 - pos)));
}
delay(200); // Ajusta la velocidad del movimiento
}