1. El Octavo Bit
  2. / Arduino
  3. / Modulos y sensores
  4. / Matrix LED MAX7219

Matrix LED MAX7219

| Actualizado:
Comentarios: 0

Matrix LED MAX7219
Matrix LED MAX7219

En este post conoceremos el módulo matriz led de 8×8 controlado por el circuito integrado MAX7219, que nos permitirá mostrar números, caracteres o simples dibujos y animaciones.

¿Qué es una matriz LED? Es un display compuesto por múltiples LEDs en distribución rectangular. El más habitual es el de 8×8 y se suele combinar para formar matrices mayores, aunque existen matrices de diferentes tamaños. Se podría controlar la matriz LED a través de sus 16 terminales, pero normalmente, va acompañado de un controlador integrado, el MAX7219, que facilita la conexión con Arduino y el control de la matriz LED.

Las matrices LEDs están fomadas por una serie de filas y columnas donde en cada intersección se encuentra un LED. Para encender o apagar un LED se requiere aplicar los valores HIGH y LOW a su correspondiente fila y columna.

Esquema LED 8x8 matrix 3mm 1088AS. De cátodo común

Como se puede observar en la figura, todos los cátodos de los LEDs que forman una fila de la matriz se encuentran conectados entre sí, a igual que lo están los ánodos de una columna. ¿Cómo activamos un led determinado? Por ejemplo, el primero de la esquina superior a la izquierda, debe recibir una señal LOW (0) sobre la fila 1 y un HIGH (1) en la columna 1, si fuera el el LED 5º de la primera fila, mantendríamos la señal LOW sobre la fila 1 pero un HIGH en la columna 5.

Para facilitar el control de la matriz se utiliza el circuito integrado MAX7219, diseñado para el manejo de matrices de LEDS y para displays de 7 segmentos. La comunicación con el MAX7219 se realiza a través de SPI por lo que solo se necesitan 3 pines de Arduino.

Esquema LED 8x8 matrix 3mm 1088AS. De cátodo común

Conexión con Arduino

Esquema

Conectaremos el pin VCC a los 5V de Arduino, el pin GND al GND de Arduino, el pin denominado DIN al pin digital 11 de Arduino, CLK al pin digital número 13 y el pin CS al pin digital 10 de Arduino.

Esquema de Arduino con un matriz LED de 8x8

Ejemplo 1

Con este primer ejemplo iremos encendiendo y apagando cada LED de la matriz sucesivamente.

#include "LedControl.h"
LedControl matrizLed=LedControl(11,13,10,1);

Primero incluimos la librería LedControl.h que se encargará del manejo de la matriz y creamos un objeto del tipo LedControl llamado matrizLed en el que estableceremos los siguientes parámetros:

LedControl( DIN, CLK, CS, nº de matrices)

En la función setup():

void setup() {
  matrizLed.shutdown(0,false);
  matrizLed.setIntensity(0,4);
  matrizLed.clearDisplay(0);
}

Utilizamos la función shutdown(), con la cual indicamos que habilitamos la matriz. Tiene dos parámetros: el número de dispositivos y el estado en que se encuentra. El número de dispositivos se indica de 0 a 7. (Una sola matriz sería indicada con el 0, 4 dispositivos lo indicaríamos con un 3). El estado en que se encuentra puede ser true o false; nosotros lo configuraremos en false, encendido.

shutdown( nº dispositivo, estado)

Con la función setIntensity() indicamos el nivel de intensidad del LED. Requiere dos parámetros, el número de dispositivos y la intensidad con un valor comprendido entre 0 y 15.

setIntensity( nº dispositivo, intensidad)

La función clearDisplay() apaga todos los LEDs de la matriz. Solamente indicaremos el número de dispositivo.

clearDisplay( nº dispositivo)

En la función loop() tenemos dos bucles for anidados para ir recorriendo las filas y columnas:

void loop(){
  for(int fila = 0; fila < 8; fila++) {
    for(int columna = 0; columna < 8; columna++) {
      matrizLed.setLed(0,fila,columna,true);
      delay(100);
      matrizLed.setLed(0,fila,columna,false);
      delay(100);
    }
  }
}

La función setLed() es la que va a indicar si el led de la fila y columna correspondiente estará encendido o apagado. Esta función tiene 4 parámetros: el número del dispositivo, la fila, la columna y si estará encendido (true) o apagado (false).

setLed( nº dispositivo, fila, columna, valor)

Código completo:

#include "LedControl.h"
LedControl matrizLed=LedControl(11,13,10,1);

void setup() {
  Serial.begin(9600);
  matrizLed.shutdown(0,false);
  matrizLed.setIntensity(0,4);
  matrizLed.clearDisplay(0);
}

void loop(){
  for(int fila = 0; fila < 8; fila++) {
    Serial.print(fila);
    Serial.println("------");
    for(int columna = 0; columna < 8; columna++) {
      Serial.println(columna);
      matrizLed.setLed(0,fila,columna,true);
      delay(100);
      matrizLed.setLed(0,fila,columna,false);
      delay(100);
    }
  }
}

Ejemplo 2.

En este segundo ejemplo visualizaremos los números del 0 al 9 en la matriz. Primero realizamos un boceto para diseñar cómo queremos que muestre los números.

Representación del cero y el uno para la matriz LED de 8x8

En la imagen superior, están representados el 0 y el 1 en una matriz de 8×8. Si nos fijamos a la derecha de la representación del 0, comprobaremos que estamos ante un array de 8 elementos formado por ceros y unos, donde el cero es el cuadro vacío y el uno es el cuadro lleno. Y como existe la posibilidad de indicar al compilador de Arduino que el número está en binario colocando una B delante, esto nos facilita mucho el trabajo, ya que vemos visualmente la matriz de LEDs tal como la queremos. Por ejemplo, el array para indicar que queremos mostrar el cero sería:

byte cero[8]= {
  B00111000,
  B01000100,
  B01000100,
  B01000100,
  B01000100,
  B01000100,
  B01000100,
  B00111000
}

Código para mostrar del 0 al 9:

#include "LedControl.h"

LedControl lc=LedControl(11,13,10,1);

#define espera 1000

byte cero[8]= {B00111000,B01000100,B01000100,B01000100,B01000100,B01000100,B01000100,B00111000};
byte uno[8]= {B00010000,B00110000,B00010000,B00010000,B00010000,B00010000,B00010000,B00111000};
byte dos[8]= {B00111000,B01000100,B00000100,B00000100,B00001000,B00010000,B00100000,B01111100};
byte tres[8]= {B00111000,B01000100,B00000100,B00011000,B00000100,B00000100,B01000100,B00111000};
byte cuatro[8]= {B00001000,B00011000,B00101000,B01001000,B01001000,B01111100,B00001000,B00001000};
byte cinco[8]= {B01111100,B01000000,B01000000,B01111000,B00000100,B00000100,B01000100,B00111000};
byte seis[8]= {B00111000,B01000100,B01000000,B01111000,B01000100,B01000100,B01000100,B00111000};
byte siete[8]= {B01111100,B00000100,B00000100,B00001000,B00010000,B00100000,B00100000,B00100000};
byte ocho[8]= {B00111000,B01000100,B01000100,B00111000,B01000100,B01000100,B01000100,B00111000};
byte nueve[8]= {B00111000,B01000100,B01000100,B01000100,B00111100,B00000100,B01000100,B00111000};

void setup() {
  lc.shutdown(0,false);
  lc.setIntensity(0,4);
  lc.clearDisplay(0);
}

void loop(){
  mostrar(cero);
  delay(espera);
  mostrar(uno);
  delay(espera);
  mostrar(dos);
  delay(espera);
  mostrar(tres);
  delay(espera);
  mostrar(cuatro);
  delay(espera);
  mostrar(cinco);
  delay(espera);
  mostrar(seis);
  delay(espera);
  mostrar(siete);
  delay(espera);
  mostrar(ocho);
  delay(espera);
  mostrar(nueve);
  delay(espera);
}

void mostrar(byte numero[]){
  for (int i = 0; i < 8; i++){
    lc.setRow(0,i,numero[i]);
  }
}

La función nueva que vamos a utilizar es setRow(), con ella vamos a mostrar los caracteres. Se encuentra dentro del blucle de la función mostrar(). Requiere de 3 parámetros: el número del dispositivo, la fila y un valor de 8 bits, que corresponde con la secuencia de unos y ceros de cada fila para formar el número que queremos.

setRow( nº dispositivo, fila, valor)

Artículos que te pueden interesar

Buzzer pasivo y activo
Buzzer pasivo (KY-006) y activo (KY-012)

Buzzer pasivo (KY-006) y activo (KY-012)

| Actualizado:
Comentarios: 0

El zumbador o buzzer es un dispositivo electrónico que actúa como un transductor. Su función es producir un sonido agudo o zumbido mientras se le está suministrando corriente. Se pueden encontrar de dos tipos: Los que integran oscilador, por ejemplo…

Resistencias cerámicas

Resistencias cerámicas

| Actualizado:
Comentarios: 0

Aunque existen varios tipos de resistencias, las más comunes son las resistencias cerámicas. Son los componentes más usados en los circuitos electrónicos, y su finalidad es la de limitar la corriente que circula por un circuito, así como dividir la…

Servo SG90, Micro Servo 9G

Servo SG90, Micro Servo 9G

| Actualizado:
Comentarios: 0

Los servos son motores de corriente continua (CC) con dos características especiales: en lugar de tener un giro continuo, están preparados para moverse en un ángulo fijo como respuesta a una señal de control y mantenerse fijos en la posición…

Modulo sensor de agua
Sensor de agua

Sensor de agua

| Actualizado:
Comentarios: 0

Módulo que detecta el nivel de agua del recipiente donde se sumerge. Para usar en tus proyectos Arduino. El nivel de agua es detectado por las bandas paralelas que tiene en la placa, y según el nivel de agua, genera…

Comentarios - 0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *