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"
/*
* Now we need a LedControl to work with.
* // Customized for RoboJax.com on February 26, 2017 in Ajax, Ontario, Canada.
* **** These pin numbers will probably not work with your hardware *****
* pin 12 is connected to the DataIn
* pin 11 is connected to the CLK
* pin 10 is connected to CS
* We have only a single MAX72XX.
*/
LedControl lc=LedControl(12,11,10,1);
/*
* we always wait a bit between updates of the display */
* unsigned long delaytime=600;
*
* void setup() {
* /*
* The MAX72XX is in power-saving mode on startup,
* we have to do a wakeup call
*/
lc.shutdown(0,false);
/*
* Set the brightness to a medium value */
* lc.setIntensity(0,8);
* /* and clear the display
*/
lc.clearDisplay(0);
}
/*
* This method will display the characters for the
* word "Arduino" one after the other on the matrix.
* (you need at least 5x7 LEDs to see the whole characters)
*/
void writeArduinoOnMatrix() {
/*
* here is the data for the characters */
*
* // 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};
*
*
* /* Letter 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); // this is for blank
}
// ////////////// END of Letter R ///////
/*
* Letter O */
* for (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* delay(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// this is for blank
* }
* //////////////// END of Letter O ///////
*
*
* /* Letter 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); // this is for blank
}
// ////////////// END of Letter B ///////
/*
* Letter O */
* for (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* delay(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// this is for blank
* }
* //////////////// END of Letter O ///////
*
* /* Letter 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); // this is for blank
}
// ////////////// END of Letter J ///////
/*
* Letter A */
* for (int i=0; i<8; i++){
* lc.setRow(0,i,A[i]);
*
* }
*
* delay(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// this is for blank
* }
* //////////////// END of Letter A ///////
*
* /* Letter 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); // this is for blank
}
// ////////////// END of Letter 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"
/*
* Now we need a LedControl object to work with.
* // Customized for RoboJax.com on February 26, 2017 in Ajax, Ontario, Canada.
* **** These pin numbers will probably not work with your hardware *****
* pin 1 is connected to the DataIn
* pin 4 is connected to the CLK
* pin 53 is connected to CS
* We have only a single MAX72XX.
*/
LedControl lc=LedControl(1,4,53,1); // this line determines if this code can work with Arduino Mega or Arduino UNO
/*
* we always wait a bit between updates of the display */
* unsigned long delaytime=600;
*
* void setup() {
* /*
* The MAX72XX is in power-saving mode on startup,
* we have to do a wakeup call
*/
lc.shutdown(0,false);
/*
* Set the brightness to a medium value */
* lc.setIntensity(0,8);
* /* and clear the display
*/
lc.clearDisplay(0);
}
/*
* This method will display the characters for the
* word "Arduino" one after the other on the matrix.
* (you need at least 5x7 LEDs to see the whole characters)
*/
void writeArduinoOnMatrix() {
/*
* here is the data for the characters */
*
* // 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};
*
*
* /* Letter 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); // this is for blank
}
// ///////////// END of Letter R ///////
/*
* Letter O */
* for (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* delay(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// this is for blank
* }
* /////////////// END of Letter O ///////
*
*
* /* Letter 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); // this is for blank
}
// ///////////// END of Letter B ///////
/*
* Letter O */
* for (int i=0; i<8; i++){
* lc.setRow(0,i,O[i]);
*
* }
*
* delay(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// this is for blank
* }
* /////////////// END of Letter O ///////
*
* /* Letter 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); // this is for blank
}
// ///////////// END of Letter J ///////
/*
* Letter A */
* for (int i=0; i<8; i++){
* lc.setRow(0,i,A[i]);
*
* }
*
* delay(delaytime);
* for(int i=0; i<8; i++){
* lc.setRow(0,i,0);// this is for blank
* }
* /////////////// END of Letter A ///////
*
* /* Letter 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); // this is for blank
}
// ///////////// END of Letter X ///////
Recursos e referências
-
Documentação
-
Externo
Arquivos📁
Nenhum arquivo disponível.