Control de 4 Matrices 8x8 con Arduino mediante UART

Este proyecto es uno de los mas simples de llevar a cabo ya que no requiere de muchas conexiones y con solo cargar el firmware en el Arduino podremos controlar la Matriz de 8x32, podremos escribir mensajes con desplazamiento Scroll de forma indeterminada (para que quede pasando continuamente a modo propaganda) también podremos enviarle mensajes a demanda para que la misma pueda mostrar estos.
El proyecto requiere de un Arduino (puede ser cualquiera, yo he implementado el UNO porque lo tenia aquí, pero puede ser cualquier otro) y matrices con controlador MAX7219, en mi caso he utilizado un modulo de 4 matrices interconectadas, pero es posible utilizar mas matrices o menos.
En este proyecto los mensajes podemos enviarlos por puerto serie del mismo arduino, pero podríamos emplear un modulo bluetooth serial, y de esta manera no necesitamos la PC conectada, solo un terminal bluetooth.

El programa utiliza la biblioteca de Adafruit GFX y la de MAX7219, debemos descargarlas, las dejare en mi sitio de GitHub para mayor facilidad.
Luego el resto viene por defecto en ArduinoIDE (como la de puerto SPI "Wire.h").

https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/markruys/arduino-Max72xxPanel

El programa es el Siguiente: 

  1. #include <SPI.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Max72xxPanel.h>
  4. //Vcc - Vcc
  5. //Gnd - Gnd
  6. //Din - Mosi (Pin 11)
  7. //Cs  - SS (Pin 10)
  8. //Clk - Sck (Pin 13)
  9. const int pinCS = 10;
  10. const int numberOfHorizontalDisplays = 8;
  11. const int numberOfVerticalDisplays = 1;
  12. Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
  13. const int wait = 50; // Velocidad a la que realiza el scroll
  14. const int spacer = 1;
  15. const int width = 5 + spacer; // Ancho de la fuente a 5 pixeles
  16. void setup(){
  17.    Serial.begin(9600);
  18.    matrix.setIntensity(1); // Ajustar el brillo entre 0 y 15
  19.    matrix.setPosition(000); // El primer display esta en <0, 0>
  20.    matrix.setPosition(110); // El segundo display esta en <1, 0>
  21.    matrix.setPosition(220); // El tercer display esta en <2, 0>
  22.    matrix.setPosition(330); // El cuarto display esta en <3, 0>
  23.    matrix.setPosition(440); // El quinto display esta en <4, 0>
  24.    matrix.setPosition(550); // El sexto display esta en <5, 0>
  25.    matrix.setPosition(660); // El séptimo display esta en <6, 0>
  26.    matrix.setPosition(770); // El octavo display esta en <7, 0>
  27.    matrix.setPosition(880); // El noveno display esta en <8, 0>
  28.    matrix.setRotation(01);    // Posición del display
  29.    matrix.setRotation(11);    // Posición del display
  30.    matrix.setRotation(21);    // Posición del display
  31.    matrix.setRotation(31);    // Posición del display
  32.    matrix.setRotation(41);    // Posición del display
  33.    matrix.setRotation(51);    // Posición del display
  34.    matrix.setRotation(61);    // Posición del display
  35.    matrix.setRotation(71);    // Posición del display
  36.    matrix.setRotation(81);    // Posición del display
  37. }
  38. void loop(){
  39.    String cadena = "";
  40.    long int time = millis();
  41.    while(Serial.available()){
  42.       cadena += char(Serial.read());
  43.    }
  44.    for(int i = 0; i < width * cadena.length() + matrix.width() - 1 - spacer; i++){
  45.       matrix.fillScreen(LOW);
  46.       int letter = i / width;
  47.       int x = (matrix.width() - 1) - i % width;
  48.       int y = (matrix.height() - 8) / 2; // Centrar el texto
  49.       while(+ width - spacer >= 0 && letter >= 0){
  50.          if(letter < cadena.length()){
  51.              matrix.drawChar(x, y, cadena[letter], HIGH, LOW, 1);
  52.          }
  53.          letter--;
  54.          x -= width;
  55.       }
  56.       matrix.write(); // Muestra loscaracteres
  57.       delay(wait);
  58.    }

El Circuito es el Siguiente: 
Conexiones: 
  1. //Vcc - Vcc
  2. //Gnd - Gnd
  3. //Din - Mosi (Pin 11)
  4. //Cs  - SS (Pin 10)
  5. //Clk - Sck (Pin 13)





¿Dónde fabricamos nuestros PCBs?
Nuestros PCBs los fabricamos con la empresa PCBWay, esta empresa nos permite realizar pequeñas cantidades como prototipos rápidos para nuestros desarrollos a medida.
También nos permite realizar grandes producciones para realizar proyectos comerciales.
Servicio de prototipo de PCB por tan solo $5 las 10 unidades.
Cada nuevo miembro recibirá un bono de $5, más servicio express de 24Hs o 48Hs.
Servicio de ensamblado de PCB por $88 más envió gratis en todo el mundo, más esténcil, más componentes.
Un servicio de calidad!


14 comentarios:

  1. No funciona.... se quedan los cuatro con todo encendido y no funciona

    ResponderBorrar
  2. A mi tampoco me funciona, estoy usando un arduino mega, ¿puede que los pines cambien?, no veo donde modificar el DIN y el CLK

    ResponderBorrar
    Respuestas
    1. para mego se debe usar DIN 51 CLK 52 CS 53

      Borrar
    2. tampoco funciona para "mego se debe usar DIN 51 CLK 52 CS 53"

      Borrar
  3. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  4. hola no funciona, estoy usando MEGA2560

    ResponderBorrar
  5. no funciona la aplicación estoy usando mega2560, haber si me das un consejos mi email: willyry@gmail.com ,gracias

    ResponderBorrar
  6. Este proyecto es uno de los mas simples de llevar a cabo ya que no requiere de muchas conexiones y con solo cargar el firmware en el Arduino podremos controlar la Matriz de 8x32. consejoscomunales.net/cultura-chincha/

    ResponderBorrar
  7. No funciona. Da error de compilación

    ResponderBorrar
  8. Excelente el aporte, aparte que el vídeo muy bien explicado... Funciona al 100... Gacias...

    ResponderBorrar