bclose

Grupo de 4 matrices LED 8×8 con SPI

Uniendo varias matrices led 8x8 SPI MAX7219

Objetivos

 

 

    • Presentar los grupos de 44 matrices LED de 8×8 controladas por MAX7219.
    • Descargar y aprender a usar las librerías necesarias.
    • Conectarlas y programarlas correctamente.
 

Material requerido.

 

 Tienda EspañaTienda Mexico
Vista principal de un arduino unoArduino UNOArduino UNO
conexionescables macho-hembra.cables macho-hembra.
Vista principalgrupo de 4 matrices LED 8×8 Con SPI

 

 

Grupo de 4 matrices LED 8×8 con SPI

 

Las matrices LED son displays que están formados por un grupo de LEDS formando normalmente cuadrados o rectángulos de diferentes tamaños, aunque cuando hablamos de Arduino suelen ser de 8×8.

Como ya vimos en la sesión que le dedicamos Matriz LED 8×8 con MAX7219 y SPI, para controlar este tipo de matrices directamente con Arduino se necesitarían muchos pines. Tendríamos que conectar uno a cada fila y columna (o sea 16 en total) y activaríamos un LED poniendo a HIGH y LOW a su respectiva fila y columna. Además, al aplicar HIGH y LOW a varias filas y columnas de forma simultánea se encenderían todos los LED de las intersecciones.

Si lo pensamos un poco, sería muy difícil generar gráficos, y tendríamos que recurrir a trucos que tienen que ver con como percibimos las imágenes a través de la vista.

Por eso estas matrices normalmente se usan junto a un controlador, que suele ser el MAX7219, por lo sencillo y lo económico que es. La comunicación de este módulo se realiza a través de SPI, por lo que sólo necesitaremos 3 pines de Arduino a parte de la alimentación.

Ampliacion que muestra el chip controlador

Lo mejor de estas matrices es que además nos permite combinar las que queramos de ellas, conectando la salida de una a la entrada de la siguiente. En lo que concierne a este tutorial vamos a usar 2 grupos que vienen ya con 4 de estas matrices unidas, aunque podemos unir a otros tantos grupos de estos como queramos, y en diferentes posiciones. Para unir los dos grupos lo que hemos hecho  nosotros ha sido doblar un poco los pines de entrada de uno y soldarlos en los de salida del otro, aunque es un poco chapucero y seguro que podéis hacerlo mejor.

grupo matrices led spi

 

Esquema de montaje y programación

 

Como ya hemos comentado un poco más arriba, la conexión de estas matrices a Arduino es muy sencilla. Nos basta con 5 pines, dos para la alimentación y 3 para el bus SPI. En este caso vamos a usar el Arduino UNO, pero si usáis otro tipo de Arduino tenéis que mirar qué pines son los que les corresponden al bus SPI: SS, MOSI  y SCK.

grupo de matrices arduino

En cuanto a la programación, tampoco va a ser nada del otro mundo gracias a un par de librerías que tendremos que descargar  e instalar como siempre hemos hecho: arduino-Max72xxPanel-master y Adafruit-GFX-Library-master.

El programa que vamos a utilizar nos servirá para mostrar textos desplazándose de izquierda a derecha a través de 8 matrices, pero podríais cambiarlo según vuestros propósitos. En particular vamos a mostrar de forma aleatoria 11 Strings que hemos cargado relacionados con nuestra página.

Lo primero que haremos será incluir las librerías y definir algunas variables que vamos a necesitar, el número de matrices verticales y horizontales y el pin CS. Además inicializamos el objeto con esos parámetros:

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
  
const int pinCS = 10;
const int numberOfHorizontalDisplays = 8;
const int numberOfVerticalDisplays = 1;

Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);

A continuación vamos a definir las variables que dictarán la velocidad de desplazamiento de los textos, el ancho de la fuente y el array donde guardaremos las strings que queramos mostrar. Recordad que no tienen por qué ser palabras simples, pueden ser frases completas. Podéis guardar tantas como quepan en la memoria de vuestro Arduino.

const int wait = 100; // En milisegundos
 
const int spacer = 1;
const int width = 5 + spacer; // Ancho de la fuente a 5 pixeles

String cadena[]= {"Prometec","Tutoriales de Arduino","Electronica","Robotica infantil","S4A","Raspberry Pi","Programacion","Arduino","Comunicaciones","Sensores","IoT"}; //textos

En el setup tenemos que definir el brillo que queremos que tengan las pantallas, así como las posiciones en las que hemos montado las matrices, que en nuestro caso quedaría de esta forma:

void setup() {
 matrix.setIntensity(7); // Ajustar el brillo entre 0 y 15
 
 // Ajustar segun las necesidades
 matrix.setPosition(0, 0, 0); // El primer display esta en <0, 0>
 matrix.setPosition(1, 1, 0); // El segundo display esta en <1, 0>
 matrix.setPosition(2, 2, 0); // El tercer display esta en <2, 0>
 matrix.setPosition(3, 3, 0); // El cuarto display esta en <3, 0>
 matrix.setPosition(4, 4, 0); // El quinto display esta en <4, 0>
 matrix.setPosition(5, 5, 0); // El sexto display esta en <5, 0>
 matrix.setPosition(6, 6, 0); // El séptimo display esta en <6, 0>
 matrix.setPosition(7, 7, 0); // El octavo display esta en <7, 0>
 matrix.setPosition(8, 8, 0); // El noveno display esta en <8, 0>
 
 matrix.setRotation(0, 1); // Posición del display
 matrix.setRotation(1, 1); // Posición del display
 matrix.setRotation(2, 1); // Posición del display
 matrix.setRotation(3, 1); // Posición del display
 matrix.setRotation(4, 1); // Posición del display
 matrix.setRotation(5, 1); // Posición del display
 matrix.setRotation(6, 1); // Posición del display
 matrix.setRotation(7, 1); // Posición del display
 matrix.setRotation(8, 1); // Posición del display
}

Y en el loop vamos a ir pasándole los strings para que los vaya mostrando en las pantallas como indica la librería:

 

Contenido solo disponible para suscriptores. ¡Accede al contenido!

Grupo 8 matrices prometec

 

Enviando cadenas por el puerto serie

 

Para completar vamos a incluir un programa que muestre las cadenas que le enviemos por el puerto serie, aunque visto el programa anterior no tiene mucho misterio. La diferencia vendrá en que no definiremos el array de strings, si no que los crearemos en el loop con lo que recojamos por el puerto serie (recordad también que hay que fijar la velocidad de comunicación en el setup):

 

Contenido solo disponible para suscriptores. ¡Accede al contenido!

Además os dejamos una idea para que la trabajéis vosotros, conectarle un módulo bluetooth y pasarle las cadenas desde un teléfono móvil.

 

Resumen de la sesión

 

En esta sesión hemos aprendido varias cosas importantes:

 
    • Hemos visto como funcionan las matrices de LED SPI basadas en el chip MAX7219.
    • Hemos aprendido a utilizar grupos de 4 de esas matrices.
    • Hemos aprendido a unir varios grupos y a programarlos.
 

 

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(42) Comments

    • Lumar61

    Hola a todos, soy lumar61, un nuevo suscriptor y quería presentarme. Soy nuevo en este apasionante mundo de Arduino, y gracias a estos Tutoriales de Prometec, y resto de suscriptores, espero obtener los conocimientos necesarios para sacar mis proyectos adelante. Muchas gracias y un saludo!!

      • Charly

      Un saludo lumar61 y bienvenido

    • Edwinchiguano

    como se puede poner las letras como la ñ

    • Carles Esteve

    Hola. Se puede quitar el random y que los mensajes salga sucesivamente por orden?.

      • Ivan Uriarte

      Claro Carles, en vez de usar int n = random(0,10); usa un for y vas en orden.

        • Carles Esteve

        Hola. Te envié un correo electrónico. Lo recibiste?

  • Con este programa ejemplo, las palabras empiezan y acaban en el mismo modulo ???
    Como puedo arreglarlo… Gracias.

    • Roger

    ¿Cuál es el máximo de chips MAX7219 que puedo poner en cascada? ¿Se podrían poner 17?
    ¿Si quiero tener varias líneas de matrices, podría conectar cada línea a un pin distinto y funcionaria?

    Gracias

      • Ivan Uriarte

      Me parece que son 8 en cascada el máximo, que son justo con lo máximo que he probado.

    • Arturo

    Estimados, en el programa no se menciona la declaración de los pines DIN y CLK

      • Ivan Uriarte

      Los gestiona la librería.

  • Hola.
    Tengo un grupo con 4 matrices y el mensaje corre en los 4 matrices en vertical y no en horizontal.
    Si modifico y pongo 1 horizontal y 4 vertical, corre el mensaje solo en el centro de los 4 matrices pero igualmente en vertical.
    No consigo que corra el mensaje en horizontal.
    Por que sucede esto??.
    Espero haberme explicado.
    Gracias

      • Ivan Uriarte

      Hola Juan José, debería correrte en horizontal, pero prueba a alterar también las posiciones aquí:

      // Ajustar segun las necesidades
      matrix.setPosition(0, 0, 0); // El primer display esta en <0, 0>
      matrix.setPosition(1, 1, 0); // El segundo display esta en <1, 0>
      matrix.setPosition(2, 2, 0); // El tercer display esta en <2, 0>
      matrix.setPosition(3, 3, 0); // El cuarto display esta en <3, 0>
      matrix.setPosition(4, 4, 0); // El quinto display esta en <4, 0>
      matrix.setPosition(5, 5, 0); // El sexto display esta en <5, 0>
      matrix.setPosition(6, 6, 0); // El séptimo display esta en <6, 0>
      matrix.setPosition(7, 7, 0); // El octavo display esta en <7, 0>
      matrix.setPosition(8, 8, 0); // El noveno display esta en <8, 0>

      matrix.setRotation(0, 1); // Posición del display
      matrix.setRotation(1, 1); // Posición del display
      matrix.setRotation(2, 1); // Posición del display
      matrix.setRotation(3, 1); // Posición del display
      matrix.setRotation(4, 1); // Posición del display
      matrix.setRotation(5, 1); // Posición del display
      matrix.setRotation(6, 1); // Posición del display
      matrix.setRotation(7, 1); // Posición del display
      matrix.setRotation(8, 1); // Posición del display

    • Ernesto

    Como aplicar todo esto conocimiento a una matrix con neopixel ws2812b

      • Ivan Uriarte

      Hola Ernesto, nunca los h probado. A ver si alguien te puede echar una mano.

  • En otros tutoriales usan una protoboard, acaso no es necesaria?

      • Ivan Uriarte

      Este no lo necesita ya que al tener interfaz SPI sólo necesitamos 5 cables para controlarlas.

  • Buenos días: muchas gracias excelente aporte con las librerías, llevaba mucho tratando de incluirlas en mi Arduino y era imposible, tenían virus, ya no estaban mejor dicho .. una semana perdida. pero a ustedes GRACIAS , MUCHAS GRACIAS por dar las cosas de forma correcta y actualizada. muy recomendados por mi
    atentamente
    Amadeo Triana

      • Ivan Uriarte

      Estupendo Amadeo! Muchas gracias a ti por este mensaje y por seguirnos. Un saludote!

  • Buenos días
    Me gustaría mostrar un string en un pack de 4 matrices de 8×8 unidas horizontalmente (todo similar al vídeo que ponéis). Pero no quiero que se vayan desplazando, mi objetivo es que se muestre un valor, que permanezca unos segundos y luego enviar otro, sin desplazamiento (como si de un voltímetro se tratase).
    Me podrías indicar que he de modificar en el código para evitar el desplazamiento.
    Gracias anticipadas

      • Ivan Uriarte

      En los ejemplos de la librería tienes el programa demo, que muestra texto estático.

    • Moni

    Hola!
    oye sabes como hacer eso, no en el lenguaje de arduino, sino en c? help me!

      • Ivan Uriarte

      Que dispositivo estás usando? Arduino utiliza c/c++.

    • Luis

    Hola, como podría guardar el mensaje recibido por puerto serie en la memoria eeprom de Arduino para que no se borre al desconectar el Arduino y cada que envié un mensaje nuevo se quede guardado?

      • Ivan Uriarte

      Hola Luis, tienes que guardarlo primero en una variable y luego usar la instrucción EEPROM.Put(direccion,variable).

    • WINIDEPU

    me da error de compilacion al verificarlo en el arduino.

      • Ivan Uriarte

      Has descargado las librerías? Qué error te da? Un poco más de información no vendría mal…

    • Gustavo Soto

    disculpa amigo todo esta muy bien solo que al final del texto me ilumina varios leds en forma de cuadro y no entiendo cual sea el error me podrias hechar la mano!!!

      • Ivan Uriarte

      Hola Gustavo, no hemos tenido ese problema. Puede ser que en el texto que muestras haya algún caracter especial que no reconozca? Un saludo.

  • Exelente! muy bueno lo probe y funciona de maravilla, pero la letra “ñ” no sale. Queria saber si hay alguna modificación para que aparezca, desde ya estoy muy agradecido.

      • Ivan Uriarte

      Hola Chess, no que yo sepa, las “ñ”, tildes y demás o se llevan bien con la programación. Un saludo.

    • Juanqui

    hola que es lo que tengo que modificar en el codigo para que se quede estatico y centrado el texto? quiero conectar 7 modulos de 4 matrices y no lo consigo.

      • Ivan Uriarte

      Hola Juanqui, creo que tendrías que eliminar el blucle for y cambiar esta línea. int x = (matrix.width() – 1) – i % width; Prueba un poco a ver si lo consigues y nos comentas.

    • Geovani rivera

    Hola quiero saber si puedo conectar 2 módulos de 4 matrices para para formar en un matriz de 16×32 si ese código sirve o que tengo q hacer.Gracias.

      • Ivan Uriarte

      Hola Geovani, no lo he probado pero en estas dos variable tienes que decirle las matrices que tienes en vertical y horizontal, así que supongo que deberías poder, adecuando estas dos variables a tu proyecto. Un saludo.

    • Errekaortu

    Disculpa. Como no puedo editar el post que ya puse, tan solo quiero decirte que no lei bien tu tutorial y ya se que los dos módulos van en serie. Gracias y disculpa por la pregunta tonta que te hice.
    La pregunta sobre quitar la sentencia random sigue en pié.
    Gracias.
    Lo que tal vez si quería preguntar y lo hice mal, es el poner dos módulos y cada uno que mostrara por separado mensajes diferentes. Habria que conectar el segundo modulo en pines diferentes?. Se podría o necesitaría un Arduino Mega, por ejemplo.?. Gracias de nuevo.

      • Ivan Uriarte

      Hola! Si quieres que saquen el mismo mensaje y que al llegar al final de uno siga en el otro sólo tienes que conectarlo como dice en la sesión, no hace falta que conectes la segunda matriz al Arduino. Si quieres que saquen mensajes diferentes sí tienes que conectar las dos al Arduino y no entre sí.

      Por otro lado, si quieres sacar las palabras en orden sólo tienes que hacer un bucle for de 0 hasta el número de palabras que tengas e ir incrementándolo de uno en uno. Dentro del bucle muestras la posición del array usando la variable que estás incrementando.

      Un saludo.

  • Hola, como se podria quitar el random y dejar que cada frase salga en el orden preestablecido?. La otra pregunta es: Tengo dos módulos de 4 matrices de 8×8. Uno de ellos lo tengo conectado y he metido tu programa y funciona muy bien. Mi pregunta es: Para poder conectar este segundo módulo en serie con el que ya tengo conectado, que puertos de Arduino deberia de conectar para hacer que los mensajes se deslicen por los dos módulos?. Es decir, en vez de tener 4 matrices de 8×8 para que salgan los mensajes, poder tener 8 matrices de 8×8 en serie.
    Gracias.

      • Ivan Uriarte

      Hola Ramón, para conectar el segundo grupo sólo tienes que soldar la última matriz del que ya tienes conectado al Arduino a la primera del otro y cambiar el número de matrices en el programa. En la sesión lo tienes explicado al final del primer apartado.

      Si no quieres que salgan aleatoriamente, haz un bucle for que vaya de 0 hasta el número de palabras que tienes y lo vas incrementando de uno en uno.

      Un saludo.

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login