Introducción:
En este proyecto ensamblaremos en letrero luminoso con las siguientes características
Letrero de matriz de LEDs (40X8)
Texto en desplazamiento tipo marquesina
Cambia el texto a mostrar vía USB (Windows, Mac y Linux)
Cambia el texto a mostrar vía Bluetooth (compatible Android)
Basado en Arduino UNO
se puede alimentar con cable USB (desde puerto USB de computadora o cualquier cargador de celular)
se puede alimentar directamente de enchufe de pared 5v 0.5A<!--more-->
Hardware a utilizar:
Cuerpo de montaje en acrílico transparente
Juego de Tornillos y tuercas
5 Matriz led 8X8 con tarjeta controladora MAX7219
Cables con terminales Dupont para conexiones
Circuito impreso basado en Arduino UNO
Adaptador inalámbrico Bluetooth
Adaptador de corriente y DC Jack</span>
Ensamble de matrices LED 8X8:
En el circuito impreso del módulo monta los pinheaders Hembra de 8 pines y los pinheaders macho 90º de 5 pines como se muestra en la siguiente imagen.
Debes soldar todas las terminales con precaución de que no se junten.
Repite el procedimiento con los 5 circuitos.
Si observas detenidamente la matriz observarás dos líneas de 8 pines cada una, lo primero es identificar el pin 1, ya sea que tu matriz tenga una muesca o unos números impresos, uno de los lados tendrá un identificador y de ese lado comienza la numeración de los pines
Viendo la matriz por la parte superior y teniendo la línea identificada hacia abajo los pines se numeran como en la imagen anterior.
Son 8 columnas y 8 filas (por eso el nombre de Matriz 8X8), la lógica nos dice que el pin 1 corresponde a la columna 1 y que el pin 9 corresponde a la fila 1… pues NO.. el orden de los pines y su correcta conexión requerirá de toda tu atención:
Como puedes observar en la imagen de arriba los pines además de estar numerados del 1 al 16 también están identificados con una C (Column, Columna) o con una R (Row, Fila), entonces la posición del LED 1 es: C1 (Columna 1), R1 (Fila 1), C1 = pin 13, R1 = Pin 9.´
De lo anterior podemos deducir lo siguiente:
En la imagen quedan identificados el Pin 1 y el LED 1 (Columna 1, Fila 1). Al momento de montar la matriz en su placa controladora el LED 1 debe coincidir con la marca en la placa:
Repite el procedimiento con los 5 módulos.
Ha finalizado el ensamble de las matrices LED 8X8
Ensamble del circuito impreso
Identifica los componentes:
Para montar la base del microcontrolador toma en cuenta la muesca en forma de medio círculo, esta debe coincidir con el dibujo del circuito impreso y al montar el microcontrolador también debes tener cuidado de que la muesca en forma de medio círculo coincida tanto con la base como con el circuito impreso.
El cristal de 16 Mhz es el “director” de la orquesta (identificado en el circuito impreso como CRYSTAL), es el que marca el tiempo para que los componentes interactúen en perfecta sincronía, este cristal va conectado a los pines XLAT1 y XLAT2 del microcontrolador y cada pata del cristal lleva un condensador cerámico conectado a negativo (C1 y C2, 22pf), esto es para estabilizar al cristal.
Para evitar que el microcontrolador se reinicie por ruido electrónico conectamos una resistencia (R 10K) desde el Pin RESET a positivo 5 V, esto mantiene en estado ALTO (HIGH) a dicho Pin.
Para poder resetear el microcontrolador sin necesidad de desconectarlo, agregamos un botón (Push Button) que envíe el Pin Reset a Tierra (negativo, masa, 0 V).
Para comprobar el funcionamiento inicial, tomaremos la salida del Pin 13 digital y por medio de una resistencia de 220 ohms (R 220) alimentaremos un LED (LED 1). Los LED´s (Light Emiting Diode o Diodo Emisor de Luz) llevan polaridad, la pata larga es el ánodo (positivo) y debe de coincidir con la marca en el circuito impreso.
Hasta este punto podemos decir que tenemos un Arduino UNO totalmente funcional, ahora Agregaremos los pines del convertidor de USB a Serial (5 pines 90º Macho), este convertidor también nos servirá de alimentación (desde el puerto USB 5v).
USB a Serial Microcontrolador
Reset Reset
TXD RXD
RXD TXD
GND GND
VCC VCC
Como se puede apreciar en la tabla anterior los pines de Recepción (RXD) y de Transmisión (TXD) serial van cruzados, el que transmite va al que recibe y viceversa.
El pin Reset va conectado con un capacitor en serie (C3 0.1 uf).
El módulo Bluetooth va conectado en paralelo con el convertidor de USB a serial ya que también utiliza la comunicación serial, Vcc a Vcc, GND a GND, RXD a RXD y TXD a TXD (no cruzados), para evitar retroalimentación y que nuestro microcontrolador pueda recibir instrucciones del puerto Serial a USB y del módulo Bluetooth sin necesidad de apagar uno o el otro colocamos dos diodos rectificadores que solo permiten el flujo de corriente en una dirección (D1 y D2), éstos tienen polaridad, la banda plateada debe coincidir con el dibujo en el circuito impreso.
Para el caso de este proyecto en específico vamos a requerir de una interrupción de hardware en el Pin 2 del microcontrolador, esta interrupción de hardware se activará cada vez que se transmita información a través del puerto RXD del microcontrolador por lo que agregaremos una resistencia (R 1K) entre RXD y el Pin 2 de nuestro microcontrolador.
Por último soldaremos los 5 pines Hembra 90º de salida a nuestras matrices LED 8X8 y los 4 pines Hembra 90° de salida a nuestro módulo bluetooth, por conveniencia estos pines van soldados por la parte inferior del circuito impreso (ver imágenes)
Hemos finalizado el ensamble de nuestro circuito impreso.
Caja de acrílico
Separa e identifica las piezas que forman la caja de acrílico
Separa e identifica los tornillos y tuercas que sujetan los componentes
Posición de los espaciadores
Ubicación de los componentes
Montando el circuito impreso
A utilizar:
4 tornillos con sus respectivas tuercas
4 espaciadores 3 mm espesor
Monta el circuito impreso a la base de acrílico como se muestra en las siguientes imágenes
Montando el módulo Bluetooth
Utiliza cinta doble cara del módulo y los cables Dupont de 4 hilos, nota como las patas de los extremos del módulo no se utilizan, solo las 4 centrales
Nota: Los colores de los cables de salida a la matriz LED y la extensión del módulo Bluetooth no tienen importancia, el orden si es importante.
Montando las matrices LED 8X8
A utilizar: 20 tornillos con sus respectivas tuercas 4 espaciadores 6 mm simples 8 espaciadores 6 mm dobles
Utiliza los cable Dupont 10 CM con terminales macho de un lado y Hembra del otro para montar el primer módulo Matriz 8X8 ( es necesario desmontar los displays para montar los módulos)
Cableado de matrices
Las matrices se conectan empezando por el módulo de la derecha (pegado al circuito impreso) respetando siempre el orden de los cables, comenzando por la salida a matriz, la terminal identificada con el número 1 es VCC, GND, DIN, CS, CLK, la salida del circuito impreso va a la entrada de la matriz 5, la salida de la matriz 5 va a la entrada de la matriz 4 y así sucesivamente
OUT IN
VCC --------------VCC
GND -------------GND
DOUT ------------DIN
CS------------------CS
CLK---------------CLK
Montando DC Jack
El DC Jack va conectado a la SALIDA de la matriz 1, positivo a VCC, negativo a GND
Cerrando la caja de acrílico
Monta los displays en sus módulos, inserta las cubiertas laterales y la cubierta del circuito impreso. Por ultimo instala la tapa y sujétala con sus 4 tornillos y tuercas.
Notas importantes acerca de la alimentación:
El letrero de Matriz LED programable se puede alimentar de tres formas:
1) utilizando un cable USB a Mini USB y conectándolo a una computadora
2) Utilizando un cable USB a Mini USB y conectándolo a un cargador de celular o batería 5v.
3) Utilizando un adaptador de pared a 5v. conectándolo en el DC Jack
Es importante tomar en cuenta que en la opción 1 el adaptador USB a serial está en comunicación con el equipo de cómputo si la ventana del Monitor serial del IDE de Arduino se encuentra abierta, en este caso el módulo Bluetooth estará inaccesible ya que los puertos de comunicación están ocupados
Eligiendo el programa a cargar en nuestro letrero de Matriz LED programable
El proyecto incluye 3 programas de ejemplo, cada uno con diferentes características:
Programa 1: el texto se programa vía USB, utilizando el IDE de Arduino, el texto programado no se pierde al apagar o resetear el letrero, basta con conectarlo para que comience a mostrar el texto programado. Brillo y velocidad se configuran dentro del IDE de Arduino. El texto se puede cambiar todas las veces que el usuario quiera, esta opción es para quienes no requieren cambiar el texto constantemente. Este programa no admite programación vía Bluetooth.
Programa 2: igual que en el Programa 1 el texto, brillo y velocidad se programan vía USB, los textos y parámetros (brillo y velocidad) programados en el IDE de Arduino no se pierden al desconectar o resetear el letrero. Se puede enviar texto vía Bluetooth, este texto solo se muestra una vez y regresa a los textos programados, los textos vía Bluetooth se pueden enviar todas las veces que el usuario quiera (pero se muestran una sola vez) se pueden configurar textos predefinidos en la aplicación para Android y enviar textos largos con un solo clic.
Programa 3: Tanto textos como comandos para subir y bajar brillo y velocidad se envían vía Bluetooth, también se pueden mandar vía USB, los textos enviados se repiten constantemente hasta que se envía un texto nuevo o se apaga el letrero. La memoria es volátil, no guarda ningún texto, al encenderlo queda sin hacer NADA hasta recibir el primer texto a mostrar. También se pueden predefinir textos desde la aplicación Android.
Lo mejor es que pruebes los tres programas y decidas cuál es el que mejor se adapta a tus necesidades.
NOTA: puedes cambiar el programa de tu Letrero de Matriz LED todas las veces que quieras.
Sketch de ejemplo: (Programa 1)
////
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
PROGMEM unsigned char const CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};
int data = 11; // DIN pin of MAX7219 module
int load = 10; // CS pin of MAX7219 module
int clock = 13; // CLK pin of MAX7219 module
int maxInUse = 5; //how many MAX7219 are connected
MaxMatrix m(data, load, clock, maxInUse); // define Library
byte buffer[10];
char string1[] = " INGRESE TEXTO A MOSTRAR AQUI "; // Scrolling Text
void setup(){
m.init(); // module MAX7219
m.setIntensity(5); // LED Intensity 0-15
}
void loop(){
byte c;
delay(100);
m.shiftLeft(false, true);
printStringWithShift(string1, 100); // Send scrolling Text
}
// Put extracted character on Display
void printCharWithShift(char c, int shift_speed){
if (c < 32) return;
c -= 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(maxInUse*8, 0, buffer);
m.setColumn(maxInUse*8 + buffer[0], 0);
for (int i=0; i<buffer[0]+1; i++)
{
delay(shift_speed);
m.shiftLeft(false, false);
}
}
// Extract characters from Scrolling text
void printStringWithShift(char* s, int shift_speed){
while (*s != 0){
printCharWithShift(*s, shift_speed);
s++;
}
}
////
Breve descripción y uso del Programa_1
Líneas 1 y 2 cargan las librerías necesarias para el funcionamiento del Sketch.
De la línea 5 a la línea 100 se “dibujan” todos los caracteres (letras, números y símbolos) a mostrar, por ejemplo, para dibujar el signo de admiración se utiliza:
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
Donde 1 es el número de columnas a utilizar, 8 es el número de renglones a utilizar 0 es apagado y 1 es encendido
Línea 113: cambia el texto a mostrar, puedes dejar espacios al principio y/o al final para que el texto no se pegue con el de la siguiente vuelta, respeta las comillas al principio y al final.
char string1[] = " INGRESE TEXTO A MOSTRAR AQUI "; // Scrolling Text
Línea 118: cambia la intensidad el brillo desde 0 hasta 15
m.setIntensity(5); // LED Intensity 0-15
Línea 126: cambia el valor de la velocidad (100 es el recomendado, son 100 milisegundos, menor valor más rápido, mayor valor más lento)
printStringWithShift(string1, 100); // Send scrolling Text
Una vez que cambiaste el texto a mostrar, la velocidad y el brillo es momento de subir el Sketch al microcontrolador.
Asegúrate de que tienes seleccionada la placa Arduino UNO haciendo clic en Herramientas, Placa Arduino / Genuino UNO y verifica que el puerto COM sea el correspondiente a tu adaptador USB a Serial haciendo clic en Herramientas, Puerto, COM3
Haz clic en el icono de Subir para cargar tu Sketch al microcontrolador, espera a que los LEDs de comunicación (TX y RX) en el adaptador USB a Serial destellen indicando la transmisión y que se cargó el programa.
Observa el resultado en tu Letrero de Matriz LED, realiza cualquier ajuste de brillo, velocidad o cambio de texto en el IDE de Arduino, vuelve a subirlo las veces que quieras.
Puedes desconectar el letrero y al conectarlo mostrará el texto de nuevo automáticamente.
Demostración de la comunicación Bletooth aquí:
**************************************************************************
Problemas escribiendo el código? Te interesa el código de los otros dos programas? Te interesa el cuerpo de acrílico o el archivo vectorial para cortarlo? Visita mi sitio Web:
http://www.compuelectronica.net/2017/02/19/proyecto-26-letrero-matriz-led-programable/
En este proyecto ensamblaremos en letrero luminoso con las siguientes características
Letrero de matriz de LEDs (40X8)
Texto en desplazamiento tipo marquesina
Cambia el texto a mostrar vía USB (Windows, Mac y Linux)
Cambia el texto a mostrar vía Bluetooth (compatible Android)
Basado en Arduino UNO
se puede alimentar con cable USB (desde puerto USB de computadora o cualquier cargador de celular)
se puede alimentar directamente de enchufe de pared 5v 0.5A<!--more-->
Hardware a utilizar:
Cuerpo de montaje en acrílico transparente
Juego de Tornillos y tuercas
5 Matriz led 8X8 con tarjeta controladora MAX7219
Cables con terminales Dupont para conexiones
Circuito impreso basado en Arduino UNO
Adaptador inalámbrico Bluetooth
Adaptador de corriente y DC Jack</span>
Ensamble de matrices LED 8X8:
En el circuito impreso del módulo monta los pinheaders Hembra de 8 pines y los pinheaders macho 90º de 5 pines como se muestra en la siguiente imagen.
Debes soldar todas las terminales con precaución de que no se junten.
Repite el procedimiento con los 5 circuitos.
Si observas detenidamente la matriz observarás dos líneas de 8 pines cada una, lo primero es identificar el pin 1, ya sea que tu matriz tenga una muesca o unos números impresos, uno de los lados tendrá un identificador y de ese lado comienza la numeración de los pines
Viendo la matriz por la parte superior y teniendo la línea identificada hacia abajo los pines se numeran como en la imagen anterior.
Son 8 columnas y 8 filas (por eso el nombre de Matriz 8X8), la lógica nos dice que el pin 1 corresponde a la columna 1 y que el pin 9 corresponde a la fila 1… pues NO.. el orden de los pines y su correcta conexión requerirá de toda tu atención:
Como puedes observar en la imagen de arriba los pines además de estar numerados del 1 al 16 también están identificados con una C (Column, Columna) o con una R (Row, Fila), entonces la posición del LED 1 es: C1 (Columna 1), R1 (Fila 1), C1 = pin 13, R1 = Pin 9.´
De lo anterior podemos deducir lo siguiente:
En la imagen quedan identificados el Pin 1 y el LED 1 (Columna 1, Fila 1). Al momento de montar la matriz en su placa controladora el LED 1 debe coincidir con la marca en la placa:
Repite el procedimiento con los 5 módulos.
Ha finalizado el ensamble de las matrices LED 8X8
Ensamble del circuito impreso
Identifica los componentes:
Para montar la base del microcontrolador toma en cuenta la muesca en forma de medio círculo, esta debe coincidir con el dibujo del circuito impreso y al montar el microcontrolador también debes tener cuidado de que la muesca en forma de medio círculo coincida tanto con la base como con el circuito impreso.
El cristal de 16 Mhz es el “director” de la orquesta (identificado en el circuito impreso como CRYSTAL), es el que marca el tiempo para que los componentes interactúen en perfecta sincronía, este cristal va conectado a los pines XLAT1 y XLAT2 del microcontrolador y cada pata del cristal lleva un condensador cerámico conectado a negativo (C1 y C2, 22pf), esto es para estabilizar al cristal.
Para evitar que el microcontrolador se reinicie por ruido electrónico conectamos una resistencia (R 10K) desde el Pin RESET a positivo 5 V, esto mantiene en estado ALTO (HIGH) a dicho Pin.
Para poder resetear el microcontrolador sin necesidad de desconectarlo, agregamos un botón (Push Button) que envíe el Pin Reset a Tierra (negativo, masa, 0 V).
Para comprobar el funcionamiento inicial, tomaremos la salida del Pin 13 digital y por medio de una resistencia de 220 ohms (R 220) alimentaremos un LED (LED 1). Los LED´s (Light Emiting Diode o Diodo Emisor de Luz) llevan polaridad, la pata larga es el ánodo (positivo) y debe de coincidir con la marca en el circuito impreso.
Hasta este punto podemos decir que tenemos un Arduino UNO totalmente funcional, ahora Agregaremos los pines del convertidor de USB a Serial (5 pines 90º Macho), este convertidor también nos servirá de alimentación (desde el puerto USB 5v).
USB a Serial Microcontrolador
Reset Reset
TXD RXD
RXD TXD
GND GND
VCC VCC
Como se puede apreciar en la tabla anterior los pines de Recepción (RXD) y de Transmisión (TXD) serial van cruzados, el que transmite va al que recibe y viceversa.
El pin Reset va conectado con un capacitor en serie (C3 0.1 uf).
El módulo Bluetooth va conectado en paralelo con el convertidor de USB a serial ya que también utiliza la comunicación serial, Vcc a Vcc, GND a GND, RXD a RXD y TXD a TXD (no cruzados), para evitar retroalimentación y que nuestro microcontrolador pueda recibir instrucciones del puerto Serial a USB y del módulo Bluetooth sin necesidad de apagar uno o el otro colocamos dos diodos rectificadores que solo permiten el flujo de corriente en una dirección (D1 y D2), éstos tienen polaridad, la banda plateada debe coincidir con el dibujo en el circuito impreso.
Para el caso de este proyecto en específico vamos a requerir de una interrupción de hardware en el Pin 2 del microcontrolador, esta interrupción de hardware se activará cada vez que se transmita información a través del puerto RXD del microcontrolador por lo que agregaremos una resistencia (R 1K) entre RXD y el Pin 2 de nuestro microcontrolador.
Por último soldaremos los 5 pines Hembra 90º de salida a nuestras matrices LED 8X8 y los 4 pines Hembra 90° de salida a nuestro módulo bluetooth, por conveniencia estos pines van soldados por la parte inferior del circuito impreso (ver imágenes)
Hemos finalizado el ensamble de nuestro circuito impreso.
Caja de acrílico
Separa e identifica las piezas que forman la caja de acrílico
Separa e identifica los tornillos y tuercas que sujetan los componentes
Posición de los espaciadores
Ubicación de los componentes
Montando el circuito impreso
A utilizar:
4 tornillos con sus respectivas tuercas
4 espaciadores 3 mm espesor
Monta el circuito impreso a la base de acrílico como se muestra en las siguientes imágenes
Montando el módulo Bluetooth
Utiliza cinta doble cara del módulo y los cables Dupont de 4 hilos, nota como las patas de los extremos del módulo no se utilizan, solo las 4 centrales
Nota: Los colores de los cables de salida a la matriz LED y la extensión del módulo Bluetooth no tienen importancia, el orden si es importante.
Montando las matrices LED 8X8
A utilizar: 20 tornillos con sus respectivas tuercas 4 espaciadores 6 mm simples 8 espaciadores 6 mm dobles
Utiliza los cable Dupont 10 CM con terminales macho de un lado y Hembra del otro para montar el primer módulo Matriz 8X8 ( es necesario desmontar los displays para montar los módulos)
Cableado de matrices
Las matrices se conectan empezando por el módulo de la derecha (pegado al circuito impreso) respetando siempre el orden de los cables, comenzando por la salida a matriz, la terminal identificada con el número 1 es VCC, GND, DIN, CS, CLK, la salida del circuito impreso va a la entrada de la matriz 5, la salida de la matriz 5 va a la entrada de la matriz 4 y así sucesivamente
OUT IN
VCC --------------VCC
GND -------------GND
DOUT ------------DIN
CS------------------CS
CLK---------------CLK
Montando DC Jack
El DC Jack va conectado a la SALIDA de la matriz 1, positivo a VCC, negativo a GND
Cerrando la caja de acrílico
Monta los displays en sus módulos, inserta las cubiertas laterales y la cubierta del circuito impreso. Por ultimo instala la tapa y sujétala con sus 4 tornillos y tuercas.
Notas importantes acerca de la alimentación:
El letrero de Matriz LED programable se puede alimentar de tres formas:
1) utilizando un cable USB a Mini USB y conectándolo a una computadora
2) Utilizando un cable USB a Mini USB y conectándolo a un cargador de celular o batería 5v.
3) Utilizando un adaptador de pared a 5v. conectándolo en el DC Jack
Es importante tomar en cuenta que en la opción 1 el adaptador USB a serial está en comunicación con el equipo de cómputo si la ventana del Monitor serial del IDE de Arduino se encuentra abierta, en este caso el módulo Bluetooth estará inaccesible ya que los puertos de comunicación están ocupados
Eligiendo el programa a cargar en nuestro letrero de Matriz LED programable
El proyecto incluye 3 programas de ejemplo, cada uno con diferentes características:
Programa 1: el texto se programa vía USB, utilizando el IDE de Arduino, el texto programado no se pierde al apagar o resetear el letrero, basta con conectarlo para que comience a mostrar el texto programado. Brillo y velocidad se configuran dentro del IDE de Arduino. El texto se puede cambiar todas las veces que el usuario quiera, esta opción es para quienes no requieren cambiar el texto constantemente. Este programa no admite programación vía Bluetooth.
Programa 2: igual que en el Programa 1 el texto, brillo y velocidad se programan vía USB, los textos y parámetros (brillo y velocidad) programados en el IDE de Arduino no se pierden al desconectar o resetear el letrero. Se puede enviar texto vía Bluetooth, este texto solo se muestra una vez y regresa a los textos programados, los textos vía Bluetooth se pueden enviar todas las veces que el usuario quiera (pero se muestran una sola vez) se pueden configurar textos predefinidos en la aplicación para Android y enviar textos largos con un solo clic.
Programa 3: Tanto textos como comandos para subir y bajar brillo y velocidad se envían vía Bluetooth, también se pueden mandar vía USB, los textos enviados se repiten constantemente hasta que se envía un texto nuevo o se apaga el letrero. La memoria es volátil, no guarda ningún texto, al encenderlo queda sin hacer NADA hasta recibir el primer texto a mostrar. También se pueden predefinir textos desde la aplicación Android.
Lo mejor es que pruebes los tres programas y decidas cuál es el que mejor se adapta a tus necesidades.
NOTA: puedes cambiar el programa de tu Letrero de Matriz LED todas las veces que quieras.
Sketch de ejemplo: (Programa 1)
////
#include <MaxMatrix.h>
#include <avr/pgmspace.h>
PROGMEM unsigned char const CH[] = {
3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // backslash
2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};
int data = 11; // DIN pin of MAX7219 module
int load = 10; // CS pin of MAX7219 module
int clock = 13; // CLK pin of MAX7219 module
int maxInUse = 5; //how many MAX7219 are connected
MaxMatrix m(data, load, clock, maxInUse); // define Library
byte buffer[10];
char string1[] = " INGRESE TEXTO A MOSTRAR AQUI "; // Scrolling Text
void setup(){
m.init(); // module MAX7219
m.setIntensity(5); // LED Intensity 0-15
}
void loop(){
byte c;
delay(100);
m.shiftLeft(false, true);
printStringWithShift(string1, 100); // Send scrolling Text
}
// Put extracted character on Display
void printCharWithShift(char c, int shift_speed){
if (c < 32) return;
c -= 32;
memcpy_P(buffer, CH + 7*c, 7);
m.writeSprite(maxInUse*8, 0, buffer);
m.setColumn(maxInUse*8 + buffer[0], 0);
for (int i=0; i<buffer[0]+1; i++)
{
delay(shift_speed);
m.shiftLeft(false, false);
}
}
// Extract characters from Scrolling text
void printStringWithShift(char* s, int shift_speed){
while (*s != 0){
printCharWithShift(*s, shift_speed);
s++;
}
}
////
Breve descripción y uso del Programa_1
Líneas 1 y 2 cargan las librerías necesarias para el funcionamiento del Sketch.
De la línea 5 a la línea 100 se “dibujan” todos los caracteres (letras, números y símbolos) a mostrar, por ejemplo, para dibujar el signo de admiración se utiliza:
1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
Donde 1 es el número de columnas a utilizar, 8 es el número de renglones a utilizar 0 es apagado y 1 es encendido
Línea 113: cambia el texto a mostrar, puedes dejar espacios al principio y/o al final para que el texto no se pegue con el de la siguiente vuelta, respeta las comillas al principio y al final.
char string1[] = " INGRESE TEXTO A MOSTRAR AQUI "; // Scrolling Text
Línea 118: cambia la intensidad el brillo desde 0 hasta 15
m.setIntensity(5); // LED Intensity 0-15
Línea 126: cambia el valor de la velocidad (100 es el recomendado, son 100 milisegundos, menor valor más rápido, mayor valor más lento)
printStringWithShift(string1, 100); // Send scrolling Text
Una vez que cambiaste el texto a mostrar, la velocidad y el brillo es momento de subir el Sketch al microcontrolador.
Asegúrate de que tienes seleccionada la placa Arduino UNO haciendo clic en Herramientas, Placa Arduino / Genuino UNO y verifica que el puerto COM sea el correspondiente a tu adaptador USB a Serial haciendo clic en Herramientas, Puerto, COM3
Haz clic en el icono de Subir para cargar tu Sketch al microcontrolador, espera a que los LEDs de comunicación (TX y RX) en el adaptador USB a Serial destellen indicando la transmisión y que se cargó el programa.
Observa el resultado en tu Letrero de Matriz LED, realiza cualquier ajuste de brillo, velocidad o cambio de texto en el IDE de Arduino, vuelve a subirlo las veces que quieras.
Puedes desconectar el letrero y al conectarlo mostrará el texto de nuevo automáticamente.
Demostración de la comunicación Bletooth aquí:
**************************************************************************
Problemas escribiendo el código? Te interesa el código de los otros dos programas? Te interesa el cuerpo de acrílico o el archivo vectorial para cortarlo? Visita mi sitio Web:
http://www.compuelectronica.net/2017/02/19/proyecto-26-letrero-matriz-led-programable/