Matriz LED 8x8 Usando um Módulo Arduino MAX7219
Neste tutorial, aprenderemos como controlar uma matriz de LEDs 8x8 usando um módulo MAX7219 com um Arduino. O MAX7219 simplifica o controle de múltiplos LEDs, permitindo que exibamos caracteres e padrões facilmente. Ao final deste projeto, você será capaz de exibir a palavra "ROBOJAX" na matriz.
Para alcançar isso, utilizaremos a biblioteca LedControl, que é especificamente projetada para interfacear com o MAX7219. Esta biblioteca nos permite enviar dados para a matriz de LEDs com mínimo esforço. Se você quiser uma compreensão mais clara da fiação e do código, não deixe de conferir o vídeo associado (no vídeo em 0:30).
Hardware Explicado
Os componentes principais deste projeto incluem o módulo MAX7219 e a matriz de LEDs 8x8. O MAX7219 é um circuito integrado que gerencia a exibição dos LEDs, lidando com os sinais de comunicação e controle do Arduino. Ele utiliza uma interface serial, o que significa que podemos controlar muitos LEDs com apenas alguns pinos do Arduino.
A matriz LED 8x8 consiste em 64 LEDs individuais dispostos em uma grade. Cada LED pode ser ligado ou desligado enviando os comandos apropriados através do MAX7219. Isso permite a exibição de vários caracteres e gráficos na matriz.
Detalhes da Ficha Técnica
| Fabricante | Maxim Integrated |
|---|---|
| Número da peça | MAX7219 |
| Tensão de lógica/IO | 3,3V a 5,5V |
| Tensão de alimentação | 4,0V a 5,5V |
| Corrente de saída (por canal) | 40 mA máximo |
| Corrente de pico (por canal) | 100 mA máximo |
| Orientação sobre a frequência PWM | 100 Hz |
| Limiares de lógica de entrada | 2,0V (alto) / 0,8V (baixo) |
| Queda de tensão / RDS(on)/ saturação | 0,2V típico. |
| Limites térmicos | 150°C |
| Pacote | 16-DIP |
| Notas / variantes | Configuração de ânodo comum |
- Assegure um fornecimento de energia adequado (4,0V a 5,5V).
- Use resistores limitadores de corrente para cada LED para evitar danos.
- Mantenha a fiação curta para evitar interferências.
- Monitore a dissipação de calor; use um dissipador de calor se necessário.
- Verifique novamente as conexões dos pinos para evitar falhas de comunicação.
Instruções de Fiação
Para conectar o MAX7219 ao Arduino, ligue os seguintes pinos:
- Conecte o
VCCpino do MAX7219 para o 5V do Arduino. - Conecte o
GNDpino ao terra do Arduino. - Conecte o
DINpino (Dados de Entrada) para o pino 12 do Arduino. - Conecte o
CLKpino (Relógio) para o pino 11 do Arduino. - Conecte o
CSpino (Chip Select) para o pino 10 do Arduino.
Certifique-se de verificar se todas as conexões estão seguras antes de ligar o circuito. A fiação é simples, mas se você encontrar problemas, revise as conexões com cuidado (no vídeo em 1:45).
Exemplos de Código e Passo a Passo
No código, começamos incluindo a biblioteca LedControl, que é essencial para comunicar-se com o MAX7219. O trecho a seguir inicializa o objeto LedControl:
LedControl lc=LedControl(12,11,10,1);Esta linha define o pino de dados, o pino de clock, o pino de seleção de chip e o número de dispositivos (1, neste caso). Em seguida, nosetup()função, ativamos o MAX7219 e definimos a intensidade do display:
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);Isso garante que o display esteja ativo e pronto para mostrar caracteres. A função principal que aciona o display éwriteArduinoOnMatrix(), que acende sequencialmente as linhas da matriz para exibir letras.
Demonstração / O que Esperar
Uma vez que tudo esteja conectado e o código esteja carregado, a matriz de LEDs deve exibir a palavra "ROBOJAX". Se o display não funcionar, verifique se há problemas como conexões soltas ou atribuições de pinos incorretas. Além disso, certifique-se de que a fonte de alimentação é adequada (no vídeo às 2:30).
Capítulos
- Introdução (0:00)
- Visão Geral do Hardware (0:30)
- Instruções de Fiação (1:45)
- Código de Demonstração (2:15)
- Demonstração (3:00)
/*
* Este vídeo mostra como usar o módulo MAX7219 com uma matriz LED 8x8 para exibir texto ou qualquer caractere no LED.
* Assista ao vídeo no YouTube: https://youtu.be/AAiDwBKs9uE
*
* Escrito por Ahmad Shamshiri para Robojax.com
* em 26 de fevereiro de 2017 em Ajax, Ontário, Canadá
* Obtenha este código e outros códigos Arduino no Robojax.com
* Aprenda Arduino passo a passo em um curso estruturado com todos os materiais, diagramas de fiação e bibliotecas
* tudo em um só lugar.
*
* Tenha acesso antecipado aos meus vídeos via Patreon e tenha seu nome mencionado ao final de cada
* vídeo que publico no YouTube aqui: http://robojax.com/L/?id=63 (assista até o final deste vídeo para ver a lista dos meus Patrons)
*
* Ou faça uma doação usando PayPal http://robojax.com/L/?id=64
*
* Este código é "COMO ESTÁ" sem garantia ou responsabilidade. Livre para ser utilizado desde que você mantenha esta nota intacta.
* Este código foi baixado do Robojax.com
* Este programa é um software livre: você pode redistribuí-lo e/ou modificá-lo
* de acordo com os termos da Licença Pública Geral GNU conforme publicada pela
* Free Software Foundation, seja a versão 3 da Licença, ou
* (a sua escolha) qualquer versão posterior.
*
* Este programa é distribuído na esperança de que seja útil,
* mas SEM QUALQUER GARANTIA; sem mesmo a garantia implícita de
* COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM PROPÓSITO ESPECÍFICO. Veja a
* Licença Pública Geral GNU para mais detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral GNU
* junto com este programa. Se não, veja <https://www.gnu.org/licenses/>.
*
* // Nós sempre temos que incluir a biblioteca
* // Baseado em um projeto postado https://github.com/wayoda/LedControl
*/
#include "LedControl.h"
/*
* Agora precisamos de um LedControl para trabalhar.
* // Personalizado para RoboJax.com em 26 de fevereiro de 2017 em Ajax, Ontário, Canadá.
* **** Esses números de pino provavelmente não funcionarão com seu hardware *****
* o pino 12 está conectado ao DataIn
* o pino 11 está conectado ao CLK
* o pino 10 está conectado ao CS
* Temos apenas um MAX72XX.
*/
LedControl lc=LedControl(12,11,10,1);
/*
* sempre esperamos um pouco entre as atualizações do display */
* unsigned long delaytime=600;
*
* void setup() {
* /*
* O MAX72XX está em modo de economia de energia na inicialização,
* precisamos fazer uma chamada de ativação
*/
lc.shutdown(0,false);
/*
* Defina o brilho para um valor médio */
* lc.setIntensity(0,8);
* /* e limpe o display
*/
lc.clearDisplay(0);
}
/*
* Este método exibirá os caracteres da palavra "Arduino" um após o outro na matriz. (você precisa de pelo menos 5x7 LEDs para ver todos os caracteres)
*/
void writeArduinoOnMatrix() {
/*
* aqui estão os dados para os caracteres */
*
* byte R[8]={B11111100,B10000100,B10000100,B11111000,B10100000,B10010000,B10001000,B10000100};
* byte O[8]={B00011000,B00100100,B01000010,B01000010,B01000010,B01000010,B00100100,B00011000};
* byte B[8]={B11111100,B10000100,B10000100,B11111000,B10001000,B10000100,B10000100,B11111100};
* byte J[8]={B00011110,B00000100,B00000100,B00000100,B10000100,B10000100,B01000100,B00111000};
* byte A[8]={B00111000,B01000100,B10000010,B11111110,B10000010,B10000010,B10000010,B10000010};
* byte X[8]={ B10000001,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B10000001};
* byte love[8]={ B00000000,B01100110,B10011001,B10011001,B10000001,B01000010,B00100100,B00011000};
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,R[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // isto é para em branco
}
// ////////////// FIM da Carta R ///////
/*
* Letra O */
* para (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* atraso(delaytime);
* para(int i=0; i<8; i++){
* lc.setRow(0,i,0);// isto é para em branco
* }
* //////////////// FIM da Letra O ///////
*
*
* /* Letra B
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,B[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // isto é para em branco
}
// ////////////// FIM da Carta B ///////
/*
* Letra O */
* para (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* atraso(delaytime);
* para(int i=0; i<8; i++){
* lc.setRow(0,i,0);// isso é para em branco
* }
* //////////////// FIM da Letra O ///////
*
* /* Letra J
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,J[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // isto é para em branco
}
// ////////////// FIM da Carta J ///////
/*
* Letra A */
* para (int i=0; i<8; i++){
* lc.setRow(0,i,A[i]);
*
* }
*
* atraso(delaytime);
* para(int i=0; i<8; i++){
* lc.setRow(0,i,0);// isso é para ficar em branco
* }
* //////////////// FIM da Letra A ///////
*
* /* Letra X
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,X[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // isto é para em branco
}
// ////////////// FIM da Carta X ///////
/*
* Este vídeo mostra como usar o módulo MAX7219 com uma matriz LED 8x8 para exibir texto ou qualquer caractere no LED.
* Assista ao vídeo no YouTube: https://youtu.be/AAiDwBKs9uE
*
* Escrito por Ahmad S. para Robojax.com
* em 26 de fevereiro de 2017 em Ajax, Ontário, Canadá
* Permissão concedida para compartilhar este código, desde que esta
* observação seja mantida com o código.
* Isenção de responsabilidade: Este código é "COMO ESTÁ" e é apenas para fins educacionais.
*
* /
*
* // Sempre precisamos incluir a biblioteca
* // Baseado em um projeto postado em https://github.com/wayoda/LedControl
*/
#include "LedControl.h"
/*
* Agora precisamos de um objeto LedControl para trabalhar.
* // Personalizado para RoboJax.com em 26 de fevereiro de 2017 em Ajax, Ontário, Canadá.
* **** Esses números de pinos provavelmente não funcionarão com o seu hardware *****
* o pino 1 está conectado ao DataIn
* o pino 4 está conectado ao CLK
* o pino 53 está conectado ao CS
* Temos apenas um único MAX72XX.
*/
LedControl lc=LedControl(1,4,53,1); // essa linha determina se este código pode funcionar com Arduino Mega ou Arduino UNO
/*
* sempre aguardamos um pouco entre as atualizações do display */
* unsigned long delaytime=600;
*
* void setup() {
* /*
* O MAX72XX está em modo de economia de energia ao iniciar,
* precisamos fazer uma chamada de ativação
*/
lc.shutdown(0,false);
/*
* Defina o brilho para um valor médio */
* lc.setIntensity(0,8);
* /* e limpe o display
*/
lc.clearDisplay(0);
}
/*
* Este método exibirá os caracteres da palavra "Arduino" um após o outro na matriz. (você precisa de pelo menos 5x7 LEDs para ver os caracteres inteiros)
*/
void writeArduinoOnMatrix() {
/*
* aqui estão os dados para os caracteres */
*
* /* K */
* byte R[8]={B11111100,B10000100,B10000100,B11111000,B10100000,B10010000,B10001000,B10000100};
* byte O[8]={B00011000,B00100100,B01000010,B01000010,B01000010,B01000010,B00100100,B00011000};
* byte B[8]={B11111100,B10000100,B10000100,B11111000,B10001000,B10000100,B10000100,B11111100};
* byte J[8]={B00011110,B00000100,B00000100,B00000100,B10000100,B10000100,B01000100,B00111000};
* byte A[8]={B00111000,B01000100,B10000010,B11111110,B10000010,B10000010,B10000010,B10000010};
* byte X[8]={ B10000001,B01000010,B00100100,B00011000,B00011000,B00100100,B01000010,B10000001};
* byte love[8]={ B00000000,B01100110,B10011001,B10011001,B10000001,B01000010,B00100100,B00011000};
*
* /* Letra R
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,R[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // isto é para em branco
}
// ///////////// FIM da Carta R ///////
/*
* Letra O */
* para (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* atraso(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// isso é para em branco
* }
* /////////////// FIM da Letra O ///////
*
* /* Letra B
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,B[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // isto é para em branco
}
// ///////////// FIM da Carta B ///////
/*
* Letra O */
* para (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* atraso(delaytime);
* para(int i=0; i<8; i++){
* lc.setRow(0,i,0);// isso é para em branco
* }
* /////////////// FIM da Letra O ///////
*
* /* Letra J
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,J[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // isto é para em branco
}
// ///////////// END of Letter J ///////
/*
* Letra A */
* para (int i=0; i<8; i++){
* lc.setRow(0,i,A[i]);
*
* }
*
* atraso(delaytime);
* para(int i=0; i<8; i++){
* lc.setRow(0,i,0);// isso é para em branco
* }
* /////////////// FIM da Letra A ///////
*
* /* Letra X
*/
for (int i=0; i<8; i++){
lc.setRow(0,i,X[i]);
}
delay(delaytime);
for(int i=0; i<8; i++){
lc.setRow(0,i,0); // isto é para em branco
}
// ///////////// FIM da Carta X ///////
Recursos e referências
-
Documentação
-
Externo
Arquivos📁
Nenhum arquivo disponível.