Como utilizar o módulo display matriz de LED 8×8 com MAX7219 e Arduino
Uma matriz de LED 8 x 8 (Figura 1) é um dispositivo capaz de exibir efeitos visuais pré-programados por um microcontrolador. Este componente possui um total de 64 LEDs interligados, dispostos em 8 linhas e 8 colunas, e é comumente utilizado para produzir efeitos visuais, exibindo textos, números e desenhos.
Apesar de ser simples, o uso da matriz de LED 8×8 com microcontroladores requer o uso de muitas portas digitais, o que pode ser um problema em projetos maiores. A utilização do CI MAX7219 facilita o uso da matriz de LED, possibilitando controlá-la com apenas três pinos para comunicação SPI.
O módulo display matriz de LED 8×8 com MAX7219 acopla uma matriz de LED 8 x 8 e o CI MAX7219, sendo ideal para projetos com Arduino, ESP8266, ESP32, Raspberry Pi, entre outros.
Podemos conectar vários módulos displays matriz de LED 8×8 com MAX7219 entre si e ainda usar os mesmos três pinos para comunicação com o microcontrolador.
O módulo display matriz de LED 8×8 com MAX7219 possui sua pinagem detalhada na Figura 3.
Os pinos da esquerda são utilizados para comunicação com o microcontrolador.
- VCC: Alimentação de 5V. A alimentação deve ser feita for uma fonte externa quando mais de um módulo display matriz de LED 8×8 com MAX7219 for utilizado;
- GND: Aterramento do módulo;
- DIN: Pino de dados de entrada de dados;
- CS: Pino de seleção. Os dados são carregados para o registrador de deslocamento enquanto CS estiver configurado em nível baixo;
- CLK: Pino de clock serial.
Os pinos da direita são utilizados para conectar um módulo display matriz de LED 8×8 com MAX7219 com outro.
Agora que já conhecemos um pouco do módulo display matriz de LED 8×8 com MAX7219, vamos aprender como utilizá-lo em conjunto com o Arduino.
Nesse tutorial, vamos aprender como utilizar o módulo matriz de LED 8×8 com o driver MAX7219 e Arduino.
MATERIAIS NECESSÁRIOS
- 1 x Placa UNO SMD R3 Atmega328 compatível com Arduino UNO;
- 1 x Módulo Display Matriz de Led 8×8 com MAX7219;
- 1 x Cabo USB;
- Jumpers macho-fêmea.
ESQUEMÁTICO DE LIGAÇÃO
Monte o circuito da Figura 4 utilizando o Módulo Display matriz de led 8×8 com Max7219 E os Jumpers.
Ao montar o circuito observe os seguintes pontos:
- O VCC do módulo deve ser conectado ao pino 5V do Arduino;
- O GND do módulo deve ser conectado ao pino GND do Arduino;
- O Pino DIN do módulo deve ser conectado ao pino digital 7;
- O Pino CLK do módulo deve ser conectado ao pino digital;
- O Pino CS do módulo deve ser conectado ao pino digital 5.
ELABORANDO O CÓDIGO
Após a montagem do circuito, vamos programação do Sketch no Arduino IDE. Nesse projeto, vamos utilizar o módulo Display matriz de LED 8×8 com MAX7219 para exibir o desenho de um coração.
Para facilitar o uso do módulo display matriz de LED 8×8 com MAX7219, vamos utilizar a biblioteca LedControl.h”. Para instalar, abra o gerenciador de bibliotecas e realize a busca, conforme a Figura 5.
Vamos entender a lógica de programação deste projeto a partir dos seguintes passos:
1. Incluir as bibliotecas LedControl.h e binary.h
A biblioteca LedControl.h será responsável pelo controle da matriz de LED usando o MAX7219.
A biblioteca binary.h auxiliará na definição de constantes binárias.
2. Declarar as constantes correspondentes aos pinos do Arduino
Definimos que as constantes PinCS, PinCLK e Din correspondentes aos pinos 5, 6 e 7 do Arduino, respectivamente.
3. Criar objeto do tipo LedControl
Em seguida, criamos o objeto do tipo LedControl passando como parâmetros os pinos conectados ao DIN, CLK, CS e o número de displays conectados ao Arduino.
4. Criar função que define o desenho do coração
Para definir o desenho utilizaremos a função lc.setRow que controla linha por linha da matriz de LED. Essa função recebe 3 argumentos: o endereço da matriz de LED, a linha e o valor do byte para que os LEDs sejam acesos.
O valor do byte segue a codificação binária em que 1 representa o LED ligado e 0 o LED desligado.
Por exemplo: O número binário B00010010 ligará os LEDs 4 e 7, mantendo os outros desligados.
Dica: Para facilitar a identificação do código binário de um desenho utilizaremos um gerador, disponível no link:
www.blogdarobotica.com/geradormatrizLED
5. Inicialização do módulo display
Na função setup, definiremos os comandos que serão utilizados na inicialização do módulo matriz:
- O comando lc.shutdown definido como false retira o módulo do modo de desligamento e inicia seu funcionamento;
- O comando lc.setIntensity define a intensidade de brilho do módulo;
- O comando lc.clearDisplay limpa a tela da matriz de LED, fazendo com que ela inicie com exibição em branco;
- Mostrando o desenho na matriz de LED.
Na função loop(), chamamos a função desenho() para acionamento dos LEDs da matriz formando um coração por 5 segundos. Em seguida, chamamos a função lc.clearDisplay para limpar a matriz e deixa-la branca por 1 segundo.
Ao final, o Sketch deste projeto ficará da seguinte maneira:
/* -- MÓDULO MATRIZ DE LED 8 X 8 COM MAX7219 -- ================================================= === BLOG DA ROBOTICA - www.blogdarobotica.com === ================================================= Autor: Jonas Souza E-mail: contato@blogdarobotica.com Facebook: facebook.com/blogdarobotica Instagram:@blogdarobotica YouTube: youtube.com/user/blogdarobotica ================================================= === CASA DA ROBOTICA - www.casadarobotica.com === ================================================= Facebook: facebook.com/casadaroboticaoficial Instagram:@casadarobotica ================================================== */ #include "LedControl.h" //Inclui a biblioteca para controle da matriz de LED #include "binary.h" //Inclui a biblioteca para auxiliar na definição de constantes binárias #define PinCS 5; //Define que o Pino CS do módulo está conectado com a porta digital 5 do Arduino #define PinCLK 6; //Define que o Pino CLK do módulo está conectado com a porta digital 6 do Arduino #define PinDin 7; //Define que o Pino Din do módulo está conectado com a porta digital 7 do Arduino LedControl lc = LedControl(7, 6, 5, 1); //Objeto que passa como parâmetros os pinos do Arduino conectados e o número de displays usados /*Função responsável por fazer o desenho que será mostrado no display lc.setRow(x,y,b) onde x= numero da coluna, y = numero da linha e B = numero binario que pode ser obtido no site:https://embed.plnkr.co/3VUsekP3jC5xwSIQDVHx */ void desenho() { //Binários que representam o coração lc.setRow(0, 0, B00000000); lc.setRow(0, 1, B00100010); lc.setRow(0, 2, B01010101); lc.setRow(0, 3, B01001001); lc.setRow(0, 4, B01000001); lc.setRow(0, 5, B00100010); lc.setRow(0, 6, B00010100); lc.setRow(0, 7, B00001000); } void setup() { lc.shutdown(0, false); //Inicia o módulo lc.setIntensity(0, 8); //Define a itensidade de brilho do display lc.clearDisplay(0); //Limpa a tela do display } void loop() { desenho(); // chamada da função de desenho delay(5000); // delay de 5 segundos lc.clearDisplay(0); //limpeza do display delay(1000); // delay de 1 segundo até que se tenha uma nova repetição }
O funcionamento do projeto pode ser visualizado no Vídeo 1:
Espero ter ajudado,
Obrigado a todos e em caso de dúvidas deixe seu comentário abaixo!
Att. Jonas Souza
Graduando em Engenharia Elétrica.