Olá garagistas,
O LED Driver MAX7219 possibilita controlar até 64 LEDs usando apenas 5 fios para se comunicar com um microcontrolador, além de poder ser usado em série com outros MAX7219 para aumentar as saídas.
O módulo possui comunicação SPI, fazendo com que seja facilmente conectado a um microcontrolador. As conexões são:
Vcc – Tensão
GND – Aterramento
Din – Entrada Digital (MOSI)
CS – Chip Select
CLK – Clock
Neste tutorial ensinaremos a ligar dois módulos em série e fazer letreiros.
Materiais Utilizados
1x Arduino
2x Módulos Matriz de LED 8x8 MAX7219
Jumpers
As ligações são bem simples, conecte as saídas digitais 13, 11 e 10 do Arduino nas entradas do primeiro módulo CLK, Din e CS, respectivamente. E então conecte as saídas do primeiro módulo nas entradas do segundo módulo, como mostrado no esquemático.
Usando a IDE do Arduino escreva o código abaixo
// maxmatrix-disp-scroll-text-7219
// based on // https://code.google.com/p/arudino-maxmatrix-library/wiki/Example_Di...
#include <MaxMatrix.h> #include <avr/pgmspace.h>
#define maxDisplays 2 // Number of MAX7219's in use.
byte Buf7219[7]; // "width,height,data[5]" single character buffer.
const int data = 11; // DIN or MOSI
const int load = 10; // CS
const int clock = 13; // SCK
MaxMatrix m(data, load, clock, maxDisplays);
// Data array is stored in program memory (see memcpy_P for access).
// Parameters are width, height, character data... // There is a speed improvement for characters with height 8 bits see lib.
PROGMEM const unsigned char CH[] =
{
3, 8, B0000000, B0000000, B0000000, B0000000, B0000000, // space
1, 8, B1011111, B0000000, B0000000, B0000000, B0000000, // !
3, 8, B0000011, B0000000, B0000011, B0000000, B0000000, // "
5, 8, B0010100, B0111110, B0010100, B0111110, B0010100, // #
4, 8, B0100100, B1101010, B0101011, B0010010, B0000000, // $
5, 8, B1100011, B0010011, B0001000, B1100100, B1100011, // %
5, 8, B0110110, B1001001, B1010110, B0100000, B1010000, // &
1, 8, B0000011, B0000000, B0000000, B0000000, B0000000, // '
3, 8, B0011100, B0100010, B1000001, B0000000, B0000000, // (
3, 8, B1000001, B0100010, B0011100, B0000000, B0000000, // )
5, 8, B0101000, B0011000, B0001110, B0011000, B0101000, // *
5, 8, B0001000, B0001000, B0111110, B0001000, B0001000, // +
2, 8, B10110000, B1110000, B0000000, B0000000, B0000000, // ,
4, 8, B0001000, B0001000, B0001000, B0001000, B0000000, // -
2, 8, B1100000, B1100000, B0000000, B0000000, B0000000, // .
4, 8, B1100000, B0011000, B0000110, B0000001, B0000000, // /
4, 8, B0111110, B1000001, B1000001, B0111110, B0000000, // 0
3, 8, B1000010, B1111111, B1000000, B0000000, B0000000, // 1
4, 8, B1100010, B1010001, B1001001, B1000110, B0000000, // 2
4, 8, B0100010, B1000001, B1001001, B0110110, B0000000, // 3
4, 8, B0011000, B0010100, B0010010, B1111111, B0000000, // 4
4, 8, B0100111, B1000101, B1000101, B0111001, B0000000, // 5
4, 8, B0111110, B1001001, B1001001, B0110000, B0000000, // 6
4, 8, B1100001, B0010001, B0001001, B0000111, B0000000, // 7
4, 8, B0110110, B1001001, B1001001, B0110110, B0000000, // 8
4, 8, B0000110, B1001001, B1001001, B0111110, B0000000, // 9
2, 8, B01010000, B0000000, B0000000, B0000000, B0000000, // :
2, 8, B10000000, B01010000, B0000000, B0000000, B0000000, // ;
3, 8, B0010000, B0101000, B1000100, B0000000, B0000000, // /p>
3, 8, B0010100, B0010100, B0010100, B0000000, B0000000, // =
3, 8, B1000100, B0101000, B0010000, B0000000, B0000000, // >
4, 8, B0000010, B1011001, B0001001, B0000110, B0000000, // ?
5, 8, B0111110, B1001001, B1010101, B1011101, B0001110, // @
4, 8, B1111110, B0010001, B0010001, B1111110, B0000000, // A
4, 8, B1111111, B1001001, B1001001, B0110110, B0000000, // B
4, 8, B0111110, B1000001, B1000001, B0100010, B0000000, // C
4, 8, B1111111, B1000001, B1000001, B0111110, B0000000, // D
4, 8, B1111111, B1001001, B1001001, B1000001, B0000000, // E
4, 8, B1111111, B0001001, B0001001, B0000001, B0000000, // F
4, 8, B0111110, B1000001, B1001001, B1111010, B0000000, // G
4, 8, B1111111, B0001000, B0001000, B1111111, B0000000, // H
3, 8, B1000001, B1111111, B1000001, B0000000, B0000000, // I
4, 8, B0110000, B1000000, B1000001, B0111111, B0000000, // J
4, 8, B1111111, B0001000, B0010100, B1100011, B0000000, // K
4, 8, B1111111, B1000000, B1000000, B1000000, B0000000, // L
5, 8, B1111111, B0000010, B0001100, B0000010, B1111111, // M
5, 8, B1111111, B0000100, B0001000, B0010000, B1111111, // N
4, 8, B0111110, B1000001, B1000001, B0111110, B0000000, // O
4, 8, B1111111, B0001001, B0001001, B0000110, B0000000, // P
4, 8, B0111110, B1000001, B1000001, B10111110, B0000000, // Q
4, 8, B1111111, B0001001, B0001001, B1110110, B0000000, // R
4, 8, B1000110, B1001001, B1001001, B0110010, B0000000, // S
5, 8, B0000001, B0000001, B1111111, B0000001, B0000001, // T
4, 8, B0111111, B1000000, B1000000, B0111111, B0000000, // U
5, 8, B0001111, B0110000, B1000000, B0110000, B0001111, // V
5, 8, B0111111, B1000000, B0111000, B1000000, B0111111, // W
5, 8, B1100011, B0010100, B0001000, B0010100, B1100011, // X
5, 8, B0000111, B0001000, B1110000, B0001000, B0000111, // Y
4, 8, B1100001, B1010001, B1001001, B1000111, B0000000, // Z
2, 8, B1111111, B1000001, B0000000, B0000000, B0000000, // [
4, 8, B0000001, B0000110, B0011000, B1100000, B0000000, // backslash
2, 8, B1000001, B1111111, B0000000, B0000000, B0000000, // ]
3, 8, B0000010, B0000001, B0000010, B0000000, B0000000, // hat
4, 8, B1000000, B1000000, B1000000, B1000000, B0000000, // _
2, 8, B0000001, B0000010, B0000000, B0000000, B0000000, // `
4, 8, B0100000, B1010100, B1010100, B1111000, B0000000, // a
4, 8, B1111111, B1000100, B1000100, B0111000, B0000000, // b
4, 8, B0111000, B1000100, B1000100, B0000000, B0000000, // c // JFM MOD.
4, 8, B0111000, B1000100, B1000100, B1111111, B0000000, // d
4, 8, B0111000, B1010100, B1010100, B0011000, B0000000, // e
3, 8, B0000100, B1111110, B0000101, B0000000, B0000000, // f
4, 8, B10011000, B10100100, B10100100, B01111000, B0000000, // g
4, 8, B1111111, B0000100, B0000100, B1111000, B0000000, // h
3, 8, B1000100, B1111101, B1000000, B0000000, B0000000, // i
4, 8, B1000000, B10000000, B10000100, B1111101, B0000000, // j
4, 8, B1111111, B0010000, B0101000, B1000100, B0000000, // k
3, 8, B1000001, B1111111, B1000000, B0000000, B0000000, // l
5, 8, B1111100, B0000100, B1111100, B0000100, B1111000, // m
4, 8, B1111100, B0000100, B0000100, B1111000, B0000000, // n
4, 8, B0111000, B1000100, B1000100, B0111000, B0000000, // o
4, 8, B11111100, B0100100, B0100100, B0011000, B0000000, // p
4, 8, B0011000, B0100100, B0100100, B11111100, B0000000, // q
4, 8, B1111100, B0001000, B0000100, B0000100, B0000000, // r
4, 8, B1001000, B1010100, B1010100, B0100100, B0000000, // s
3, 8, B0000100, B0111111, B1000100, B0000000, B0000000, // t
4, 8, B0111100, B1000000, B1000000, B1111100, B0000000, // u
5, 8, B0011100, B0100000, B1000000, B0100000, B0011100, // v
5, 8, B0111100, B1000000, B0111100, B1000000, B0111100, // w
5, 8, B1000100, B0101000, B0010000, B0101000, B1000100, // x
4, 8, B10011100, B10100000, B10100000, B1111100, B0000000, // y
3, 8, B1100100, B1010100, B1001100, B0000000, B0000000, // z
3, 8, B0001000, B0110110, B1000001, B0000000, B0000000, // {
1, 8, B1111111, B0000000, B0000000, B0000000, B0000000, // |
3, 8, B1000001, B0110110, B0001000, B0000000, B0000000, // }
4, 8, B0001000, B0000100, B0001000, B0000100, B0000000, // ~
};
void setup()
{
m.init();
m.setIntensity(3);
} // Scrolling Text
char string[] = "Laboratorio de Garagem ";
void loop()
{
delay(100);
m.shiftLeft(false, true);
printStringWithShift(string,200
);
}
void printCharWithShift(char c, int shift_speed)
{
if (c < 32) return;
c -= 32;
memcpy_P(Buf7219, CH + 7*c, 7);
m.writeSprite(maxDisplays*8, 0, Buf7219);
m.setColumn(maxDisplays*8 + Buf7219[0], 0);
for (int i=0; i<=Buf7219[0]; i++)
{
delay(shift_speed);
m.shiftLeft(false, false);
}
}
void printStringWithShift(char* s, int shift_speed)
{
while (*s != 0)
{
printCharWithShift(*s, shift_speed);
s++;
}
}
Carregue o código no Arduino e será possível ver a mensagem “Laboratorio de Garagem” passando nas matrizes de LED.
Pode-se alterar a mensagem apenas colocando uma frase diferente no char String[]. Esperamos ter ajudados na utilização das matrizes e boa diversão em sua utilização, caso tenha alguma dúvida poste em nosso blog.
Referências:
http://www.best-microcontroller-projects.com/max7219.html#Arduino_S...
http://pdf1.alldatasheet.com/datasheet-pdf/view/73745/MAXIM/MAX7219...
Comentar
Gravei o vídeo com a minha camera FUJI HS10 com 1000 frames por segundo.
Veja o vídeo no Youtube e selecione velocidade lenta para ver o quanto os leds ficam apagados.
Devido à persistência dos nossos olhos, isso não dá para ver.
OBS importante :
Não recomendo o uso do Regulador de 5V do Arduino para alimentar os displays.
Se todos leds do MAX7219 estiverem acesos, o consumo de corrente é de 311 mA !
Use uma fonte externa de 5V ( de 1A a 2A) .
Testei hoje e esta tudo OK !
Arduino Nano - IDE 1.8.3
Biblioteca Maxmatriz :
https://code.google.com/archive/p/arudino-maxmatrix-library/downloads
Instale a biblioteca - incuir arquivo zip e depois reinicialize a IDE (senão não funciona).
Vcc – Tensão 5V
GND – Aterramento
Din – Entrada Digital (MOSI) - Arduino D11
CS – Chip Select (SS) - Arduino D10
CLK – Clock - SCK - Arduino D13
Obrigado Lab !
Senhores, peço SOCORRO! :-)
A biblioteca "MaxMatrix" NÃO FUNCIONA na IDE nova do Arduino (1.6.5) - nem, tão nova é.
O programa nem compila, já dá erro de cara. Quando rodo O MESMO programa na IDE 1.0.5 ou 1.0.6, tudo funciona, compila, grava e roda legal.
Alguém sabe porque e como resolver ??
Bom dia amigos, montei esse projeto com 4 módulos, alterei a quantidade de módulos no programa porém o sistema esta funcionando ao contrario em vez de deslocar para a esquerda ele desloca para a direita.
Alguém poderia me dar uma dica...
Valeu.
Essas matrizes são muito massa! Usei um par delas como olhos em um robô para fazer algumas expressões (veja: https://www.youtube.com/watch?v=6P0FF4LY1e4). Pretendo usá-las novamente em um projeto que estou planejando, mas desta vez seis delas.
Bom dia,
Excelente esta postagem parabéns, bastante didático. Você conhece um modelo para que estas mensagens venham de um banco de dados de modo temporizado?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por
Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!
Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)