Encender una matriz LED con Arduino y MAX7219


arduino-matriz-led-MAX7219

¿Qué es una matriz LED?

Una matriz LED es un display formado por múltiples LED en distribución rectangular. Existen distintos tamaños, siendo el más habitual los cuadrados de 8×8 LED.

Podemos combinar varios módulos para formar un display mucho mayor. En estos display podemos mostrar textos, dibujos o animaciones, como desplazar un texto (scroll).

Encender una matriz de LED directamente con Arduino requiere emplear una gran cantidad de pines, lo cuál supondría un gran desperdicio de recursos. Por este motivo, lo normal es que siempre empleemos un controlador específicamente diseñado para esta función.

Un controlador habitualmente empleado por ser barato y sencillo es el integrado MAX7219.

Anuncio:

Precio

Las matrices LED monocromo (rojas o verdes) son componentes baratos. Se venden tanto junto al controlador MAX7219, como ambos componentes por separado. Lo normal es que queramos comprarlos en conjunto.

Podemos encontrar un conjunto de Matriz LED de 8×8 + controlador MAX7129 por 1,27€ en vendedores internacionales de Ebay o Aliexpress.

matriz-led-MAX7219

Además estos módulos incorporan pines de entrada y salida, por lo que es sencillo unir varios módulos para formar un display mayor, simplemente usando unos jumpers de conexión.

¿Cómo funciona un matriz LED?

Una matriz de LED está formado por diferentes LED, cableados de forma conjunta por filas y columnas. Podemos encender un LED determinado de la matriz aplicando correctamente los valores HIGH y LOW a su respectiva fila y columna.

matriz-led

Existen dos posibles configuraciones, ánodo común en filas o en columnas. Aunque esto no afecta a la explicación, sí debéis tenerlo en cuenta en vuestro montajes.

Si aplicamos valores HIGH y LOW a varias filas y columnas de forma simultánea se encenderán todos los LED de las intersecciones. De esta forma, resulta casi imposible generar gráficos complejos.

Para poder hacer gráficos el procedimiento consiste en hacer un barrido por filas (o columnas). Encendemos todos los LED de una única fila (o columna), y a continuación cambiamos a la siguiente. Sólo una fila (o columna) está encendida cada instante pero, al hacerlo rápidamente, el efecto en nuestra visión es ver toda la imagen formada de forma simultánea.

Este efecto se denomina “Persistencia de visión” (POV), y es consecuencia de la forma en la que los humanos percibimos el movimiento. Es muy empleado en electrónica e informática.

Encender una matriz de 8×8 LED requeriría 16 señales digitales y un trabajo constante del procesador para refrescar la imagen. Eso es una cantidad enorme de recursos para cualquier autómata, que estaríamos mal aprovechando para simplemente encender un display.

Por este motivo, empleamos un controlador como el MAX7219 que está especialmente diseñado para encender displays de 7 segmentos y matrices de led, y libera a nuestro procesador para hacer tareas mucho más valiosas.

La comunicación con el MAX7219 se realiza a través de SPI por lo que sólo se requieren 3 pines de Arduino (SS, MOSI y SCK). Además ni siquiera “ocupamos” del todo estos pines, ya que con el mismo bus podemos controlar múltiples dispositivos.

Por último, las propias placas MAX7219 generalmente incorporan un puerto de entrada y salida, de forma que podemos combinar múltiples controladores sin ninguna dificultad.

Esquema montaje

El esquema eléctrico es sencillo. Alimentamos el módulo a través de Vcc y Gnd, y conectamos los pines correspondientes para la comunicación SPI.

En caso de usar más de un módulo, conectaríamos las salidas de cada módulo con las entradas del siguiente, y conectaríamos el primero a Arduino.

arduino-matriz-led-MAX7219-esquema

La conexión vista desde el lado de Arduino quedaría así.

arduino-matriz-led-MAX7219-montaje

Los números de Pin dependen del modelo concreto de Arduino. En Arduino Uno y Nano corresponden con los pines 10, 11, y 13. Consultar el esquema de patillaje para otros modelos.

Ejemplos de código

Existen varias librerías para comunicar Arduino con un controlador MAX7219. Por ejemplo, tenemos la librería Max72xxPanel, que requiere el uso de la librería Adafruit-GFX.

El siguiente código de ejemplo emplea estas dos librerías para mostrar un texto que se desplaza a lo largo de 9 matriz LED unidas. Modificar el código para adaptarse a vuestra configuración y necesidades.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino

Anuncio:

Previous Haz impresionantes Projection Mapping gratis con VPT7
Next Opciones para alimentar Arduino con baterías

¡Deja un comentario!...

1000
newest oldest

Hola Luis, me encantan tus tutoriales.

Queria preguntar acerca del WordPress… que modulo es el que usas para hacer esas “aclaraciones” o “resumenes” en un rectangulo verde (y he visto de mas colores)??

¿En que sentido no te ha funcionado? En realidad estas matrices son bastante sencillas. La única parte que te puede volver un poco loco es “configurar” las disposición de tus matrices. Es decir, cuantos tienes de alto, cuantos de ancho, y en que posición está cada uno (toda la parte que está antes del loop). Y luego, que según el tipo de matriz, y el controlador, alguna de ellas te puede aparecer como una simetría, o girado. Puede que cueste algún intento acertar hasta que todas las pantallas se muestran en orden correcto, pero es lo único que te puede… Read more »
Arturo Rangel Rodriguez
¡Hola Luis! Disculpa, quería preguntar: ¿Es posible proyectar varias variables en la matriz? Es decir, estoy realizando un proyecto y ya probé con muchísimas librerías y ningúna la e podido configurar adecuadamente. Verás, en mi proyecto utilizo un RTC DS1307 un Reloj en tiempo real, que se comunica a mi Arduino por I2C, el problema es que el RTC me da unas variables y esas variables necesito proyectarlas en mis matrices. No necesita efectos, ni nada, sólo que se actualice cada segundo (por lo del reloj) Tengo pensado que se muestre tanto la fecha como la hora en un conjunto… Read more »

He unido dos matrices led, pero cual es mi sorpresa que en las dos pone el mismo texto a la vez, no lo hace de forma continuada. que es lo que hago mal?

buenas tardes, primero que nada, muchas gracias por el tutorial, me has salvado la vida, pero al correr el mensaje, los primeros caracteres fueron cambiados por algunos símbolos que no entiendo, quería saber si hay posibilidad de corregir eso, GRACIAS

Hola Luís, buen ejemplo.
Tengo una matriz de 4×4 y con el ejemplo que has puesto funciona de maravilla.
Quería poner la matriz en vertical de forma que el desplazamiento fuese de abajo hacia arriba. El problema es que para hacer eso necesito girar los caracteres 90 grados. He intentado ver una función que lo haga, pero no la encuentro.
Otra opción que se me había ocurrido es pasar un array de 8 bytes con el “dibujo” que quiero visualizar, pero tampoco encuentro una función para hacerlo. ¿Existe alguna forma de hacer cualquiera de las dos opciones?
Gracias por tu trabajo.