Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto 71 - Como usar o Módulo Matriz de Led 8X8 - MAX7219 com Arduino
Projeto 71 - Como usar o Módulo Matriz de Led 8X8 - MAX7219 com Arduino
Angelo Luis Ferreira | 19/12/2019
Acessos: 14.021
Básico - Projeto 71
Módulo Matriz de Leds 8 X 8 - MAX7219
Objetivo
Mostrar como conectar e utilizar o Módulo Matriz de Leds 8X8 - MAX7219 com o Arduino. Neste projeto veremos como criar e exibir letras, números, símbolos e até frases de forma simples através da biblioteca LedControlMS.h. Com a utilização do módulo MAX7279 junto com a biblioteca LedcontrolMS.h podemos simplificar a programação e as conexões com o Arduino em relação à matriz de leds apenas.
Para comparar veja os projetos: Projeto 68 - Usando uma matriz de LEDs 8 X 8 com Arduino, Projeto 69 - Exibindo frases em uma matriz de LEDs 8 X 8 com Arduino - operadores bit a bit e Projeto 70 - Exibindo frases com efeito "scroll" em uma matriz de leds - Arduino.
Definições
Módulo Matriz de Led 8X8 - MAX7219 - O módulo Matriz de led 8x8 é um módulo que permite controlar displays de led e transmitir informações para o Arduino de uma forma fácil e prática, ocupando poucas portas do microcontrolador (3 portas + VCC e GND). O módulo possuí um circuito integrado MAX7219 projetado para o acionamento de diversos tipos de displays de led, como uma matriz de led 8X8 por exemplo. Utilizando módulos MAX7219 você poderá ligar vários módulos em série (até 8) criando displays de leds de vários tamanhos.
Aplicação
Para fins didáticos e projetos com efeitos visuais, exibição de textos, imagens ou números.
Componentes necessários
Referência
|
Componente
|
Quantidade
|
Imagem
|
Observação
|
Protoboard |
Protoboard 830 pontos |
1 |
|
No mínimo utilizar protoboard com 830 pontos
|
Jumpers |
Kit cabos ligação macho / macho |
1 |
|
|
Módulo Matriz de led |
Módulo Matriz de LED 8 X 8 modelo MAX7219 |
1 |
|
Cor emissão do led: vermelha
Circuito Integrado: MAX7219
Tensão de operação: 5V
Qde. de leds: 64 (8X8)
Matriz: modelo 1088AS com organização interna Linhas (catodo comum) | Colunas (anodo comum)
(datasheet)
Poderá ser utilizado qualquer modelo de matriz 8 X 8
|
Arduino UNO |
Arduino UNO R3 |
1 |
|
Você poderá utilizar uma placa Arduino UNO original ou similar
|
Montagem do Circuito
Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.
Atenção
1. Para a montagem do módulo matriz de leds 8 X 8 basta conectar o módulo com os pinos do Arduino, conforme tabela abaixo:.
Ardunino |
Módulo |
VCC |
VCC |
GND |
GND |
Pino 2 |
DIN |
Pino 3 |
CLK |
Pino 4 |
CS |
2. Veja abaixo como realizamos a montagem do nosso projeto.
Incluindo biblioteca LedControlMS.h no IDE do Arduino
Para obtermos o máximo de funcionalidade do módulo MAX7219 podemos adicionar a biblioteca LedControlMS.h no IDE do Arduino. Com ela podemos acender e apagar leds específicos, criar caracteres, números e até frases de forma muito simples.
Uma das grandes vantagens das placas Arduino é a diversidade de bibliotecas disponíveis que podem ser utilizadas em seus programas. Estas bibliotecas podem ser criadas para a linguagem "C" ou especificamente para o Arduino, reduzindo drasticamente o tempo gasto com programação. Veja a tabela Coletânea de bibliotecas para sensores.
Download dos arquivos da biblioteca LedControlMS.h
DOWNLOAD - Arduino_Led_matrix.zip
Para saber detalhes desta biblioteca clique aqui.
Instalando a biblioteca pelo IDE do Arduino
Após fazer o download do arquivo Arduino_Led_matrix.zip com todos os arquivos da biblioteca compactados no formato zip, abra o IDE do Arduino e siga o tutorial: Como incluir uma biblioteca no IDE do Arduino.
Usando o módulo MAX7219 com a biblioteca LedControlMS.h
1) Acendendo e apagando leds específicos
1.1. Após a montagem do módulo e a instalação da biblioteca, podemos acender e apagar leds específicos utilizando apenas utilizando o método setLed() que faz parte da biblioteca.
1.1.1. Para acender um led específico utilizamos "true" -> setLed(módulo,linha,coluna,true)
1.1.2. Para apagar um led específico utilizamos "false" -> setLed(módulo,linha,coluna,false)
Obs.: Podemos utilizar vários módulos MAX7219 em série, portanto precisamos identificar no método qual o módulo utilizado. Quando usamos apenas um, podemos identificar o módulo como 0.
1.2. Para utilizarmos corretamente o método setLed() precisamos conhecer a posição correta do módulo. Veja na imagem abaixo onde identificamos a posição do módulo em relação às linhas e colunas da matriz. A linhas devem ser identificadas de 0 a 7, de cima para baixo, e as colunas de 0 a 7 da esquerda para a direita.
1.3. Entendendo a posição das linhas e colunas, podemos acender qualquer led específico. Por exemplo, vamos acender o led posicionado na linha 3 e coluna 5:
1.4. Portanto, para acendermos o led específico acima vamos utilizar o comando setLed(0,3,5,true), onde: 0 é o módulo utilizado, 3 a linha, 5 a coluna e true para acionar o led. Veja o sketch abaixo:
/*******************************************************************************
*
* Acender um led específico - módulo Max7219
* Adaptado por: Angelo Luis Ferreira
* Data: 23/12/2019 (dd/mm/AA)
* http://squids.com.br/arduino
*
*******************************************************************************/
#include "LedControlMS.h"
/* Criando o objeto lc
***** Definindo os pinos de conexão *****
pino 2 conectado no DIN
pino 3 conectado no CLK
pino 4 conectado no CS
1 - Número de dispositivos (Máximo de 8 módulos MAX7219)
*/
LedControl lc=LedControl(2,3,4,1);
void setup() {
//obter o número de módulos que definimos em LedControl
int dispositivos = lc.getDeviceCount();
for(int address=0;address
Atenção: Observe que utilizamos também alguns métodos obrigatórios para inicializar a utilização da matriz de leds:
shutdown(0, false) -> inicializar o módulo
setIntensity(0, 8) -> definir o brilho do módulo (altera para aumentar ou diminuir o brilho)
clearDisplay(0) -> limpar o display
1.5. Para apagarmos o led, basta utilizarmos o comando setLed(0,3,5,false). Veja o sketch abaixo onde vamos fazer o led piscar:
/*******************************************************************************
*
* Piscar um led específico - módulo Max7219
* Adaptado por: Angelo Luis Ferreira
* Data: 23/12/2019 (dd/mm/AA)
* http://squids.com.br/arduino
*
*******************************************************************************/
#include "LedControlMS.h"
/* Criando o objeto lc
***** Definindo os pinos de conexão *****
pino 2 conectado no DIN
pino 3 conectado no CLK
pino 4 conectado no CS
1 - Número de dispositivos (Máximo de 8 módulos MAX7219)
*/
LedControl lc=LedControl(2,3,4,1);
unsigned long delaytime=500;
void setup() {
//obter o número de módulos que definimos em LedControl
int dispositivos = lc.getDeviceCount();
for(int address=0;address
1.6. Veja o resultado do nosso exemplo acima:
2) Desenhando letras
2.1. Agora que já sabemos como acender e apagar leds específicos, podemos desenhar letras, números e símbolos na nossa matriz de leds. Vamos iniciar desenhando a letra "M".
2.2. Para identificar as linhas e colunas de cada led aceso, utilizei o Led Matrix Editor:
2.3. Com base no Editor acima, desenhamos a letra "M" conforme o sketch abaixo:
Obs.: No editor, as linhas e colunas começam com 1, já na nossa biblioteca para o MAX7219 as linhas e colunas começam com zero. Portanto, fique atento na hora de programar.
/*******************************************************************************
*
* Desenhando a letra "M" - módulo Max7219
* Adaptado por: Angelo Luis Ferreira
* Data: 23/12/2019 (dd/mm/AA)
* http://squids.com.br/arduino
*
*******************************************************************************/
#include "LedControlMS.h"
/* Criando o objeto lc
***** Definindo os pinos de conexão *****
pino 2 conectado no DIN
pino 3 conectado no CLK
pino 4 conectado no CS
1 - Número de dispositivos (Máximo de 8 módulos MAX7219)
*/
LedControl lc=LedControl(2,3,4,1);
void setup() {
//obter o número de módulos que definimos em LedControl
int dispositivos = lc.getDeviceCount();
for(int address=0;address
2.4. Veja a imagem abaixo como ficou o nosso desenho:
3) Mostrando letras e números da própria biblioteca
3.1. Uma das coisas mais interessantes da biblioteca LedControlMS.h é que ela já vem com o alfabeto e os números nativos. Desta forma, você poderá obter todo alfabeto e números sem precisar criá-los ou adicionar uma nova biblioteca.
3.2. Após definirmos as conexões e número de módulos do projeto vamos exibir na matriz de leds a letra "M" nativa da biblioteca conforme as instruções:
3.2.1. Através do comando LedControl criamos, ou melhor, instanciamos o objeto pelo qual foi denominado de "lc".
3.2.2. Definimos que a variável "text" receba o caractere "M" como um elemento do objeto String() - leia mais em String Object
3.2.3. Na estrutura void Setup() definimos as configurações obrigatórias:
shutdown(0, false) -> inicializar o módulo
setIntensity(0, 8) -> definir o brilho do módulo (altera para aumentar ou diminuir o brilho)
clearDisplay(0) -> limpar o display
Obs.: O método getDeviceCount() retorna o número de dispositivos (módulos) definidos na criação do objeto
3.3. Na estrutura void Loop() definimos:
3.3.1. Definimos a variável tipo char, que armazena apenas um caractere, como o primeiro item de text, ou seja, o próprio caractere "M".
3.3.2. Através do método displayChar(dispositivo, char), exibimos o caractere "M" obtido pelo método getCharArrayPosition(var). Estes métodos são definidos na biblioteca LedControlMS.h a partir do momento em que criamos o objeto lc.
3.4. Veja abaixo como ficou o nosso sketch para mostrar a letra "M" nativa.
/*******************************************************************************
*
* Exibindo o caractere "M" nativo da biblioteca LedControlMS.h
* Adaptado por: Angelo Luis Ferreira
* Data: 23/12/2019 (dd/mm/AA)
* http://squids.com.br/arduino
*
*******************************************************************************/
#include "LedControlMS.h"
/* Criando o objeto lc
***** Definindo os pinos de conexão *****
pino 2 conectado no DIN
pino 3 conectado no CLK
pino 4 conectado no CS
1 - Número de dispositivos (Máximo de 8 módulos MAX7219)
*/
LedControl lc=LedControl(2,3,4,1);
String text = "M";
void setup() {
//obter o número de módulos que definimos em LedControl
int dispositivos = lc.getDeviceCount();
for(int address=0;address
3.5. A seguir veja a exibição na matriz de leds do caractere "M" nativo da biblioteca LedControlMS.h. Observe que os caracteres desenvolvidos na biblioteca estão na posição vertical, ou seja, no sentido das colunas.
3.6. No sketch abaixo criamos uma rotina exibir todos números e letras do alfabeto nativos da biblioteca LedControlMS.h definidos na variável "texto":
/*******************************************************************************
*
* Números e alfabeto - módulo Max7219
* Adaptado por: Angelo Luis Ferreira
* Data: 23/12/2019 (dd/mm/AA)
* http://squids.com.br/arduino
*
*******************************************************************************/
#include "LedControlMS.h"
/* Criando o objeto lc
***** Definindo os pinos de conexão *****
pino 2 conectado no DIN
pino 3 conectado no CLK
pino 4 conectado no CS
1 - Número de dispositivos (Máximo de 8 módulos MAX7219)
*/
LedControl lc=LedControl(2,3,4,1);
String texto = "0123456789abcdefghijklmnopqrstuvxywz";
byte counter = 0;
void setup() {
//obter o número de módulos que definimos em LedControl
int dispositivos = lc.getDeviceCount();
for(int address=0;addresstexto.length()) counter=0;
// displayChar(adress, char)
lc.displayChar(0, lc.getCharArrayPosition(ch)); // exibe o caractere na posição
delay(500);
lc.clearAll();
delay(200);
}
Nota: Observe que no programa acima usamos a função length() que retorna o comprimento da String, em caracteres. Veja mais em Referência Arduino - length().
3.7. Veja abaixo o resultado do exemplo acima:
4) Método da biblioteca LedControlMS.h para exibir frases
4.1. Neste exemplo vamos utilizar o método writeString(dispositivo,"frase para ser exibida na matriz") que de forma muito simples exibe qualquer texto em um módulo de matriz de leds MAX7219.
4.1.1. O método writeString() possui velocidade de exibição definida na biblioteca LedControlMS.h.
4.2. Confira abaixo o sketch onde exemplificamos a utilização do comando writeString():
/*******************************************************************************
*
* Exibindo frases - módulo Max7219 e LedControlMS.h
* Adaptado por: Angelo Luis Ferreira
* Data: 23/12/2019 (dd/mm/AA)
* http://squids.com.br/arduino
*
*******************************************************************************/
#include "LedControlMS.h"
/* Criando o objeto lc
***** Definindo os pinos de conexão *****
pino 2 conectado no DIN
pino 3 conectado no CLK
pino 4 conectado no CS
1 - Número de dispositivos (Máximo de 8 módulos MAX7219)
*/
LedControl lc=LedControl(2,3,4,1);
void setup() {
//obter o número de módulos que definimos em LedControl
int dispositivos = lc.getDeviceCount();
for(int address=0;address
4.3. Veja como funciona o exemplo acima:
Sketch do projeto final
1. Faça o dowload e abra o arquivo projeto71.ino no IDE do Arduino: DOWNLOAD - projeto71.ino
Ou se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* Projeto 71 - Como utilizar o módulo Matriz de Leds 8 X 8 - módulo Max7219
* Adaptado por: Angelo Luis Ferreira
* * Data: 27/12/2019 (dd/mm/AA)
* http://squids.com.br/arduino
*
*******************************************************************************/
#include "LedControlMS.h"
/* Criando o objeto lc
***** Definindo os pinos de conexão *****
pino 2 conectado no DIN
pino 3 conectado no CLK
pino 4 conectado no CS
N_MTX = 1 - Número de dispositivos (Máximo de 8 módulos MAX7219)
*/
const int N_MTX = 1;
LedControl lc=LedControl(2,3,4, N_MTX);
String texto = "abcdefghijklmnopqrstuvxywz1234567890";
unsigned long delaytime=500;
void setup() {
for (int i=0; i< N_MTX; i++){
lc.shutdown(i,false);
lc.setIntensity(i,8); /* Set the brightness to a medium values */
lc.clearDisplay(i); /* and clear the display */
}
}
void loop() {
lc.writeString(0,"Projetos Squdis Arduino 2020");
delay(1000);
lc.clearAll();
// acendendo e apagando leds específicos
for (byte i = 0; i<2; i++) {
lc.setLed(0,0,0,true);
delay(delaytime);
lc.setLed(0,0,7,true);
delay(delaytime);
lc.setLed(0,7,0,true);
delay(delaytime);
lc.setLed(0,7,7,true);
delay(delaytime);
lc.setLed(0,0,0,false);
delay(delaytime);
lc.setLed(0,0,7,false);
delay(delaytime);
lc.setLed(0,7,0,false);
delay(delaytime);
lc.setLed(0,7,7,false);
delay(delaytime);
for (int j = 0; j<4; j++) {
lc.setLed(0,0,0,true);
lc.setLed(0,0,7,true);
lc.setLed(0,7,0,true);
lc.setLed(0,7,7,true);
delay(delaytime);
lc.setLed(0,0,0,false);
lc.setLed(0,0,7,false);
lc.setLed(0,7,0,false);
lc.setLed(0,7,7,false);
delay(delaytime);
}
lc.clearAll();
}
// usando setRow e setColun
lc.setRow(0,1,0x0C);
delay(delaytime);
lc.clearDisplay(0);
lc.setRow(0,1,0xC0);
delay(delaytime);
lc.clearDisplay(0);
lc.setColumn(0,1,0x0C);
delay(1000);
lc.clearDisplay(0);
lc.setColumn(0,1,0xC0);
delay(1000);
lc.clearDisplay(0);
delay(delaytime);
// rotina para exibir os caracteres da variável texto
for (int i = 0; i < texto.length(); i++) {
char ch = texto[i];
// displayChar(adress, char)
lc.displayChar(0, lc.getCharArrayPosition(ch)); // exibe o caractere na posição
delay(delaytime);
lc.clearAll();
delay(200);
}
// fazendo scroll
scrollLeft('S');
delay(1000);
lc.clearAll();
scrollRight('S');
delay(1000);
lc.clearAll();
}
void scrollLeft(char ch){
int pos =lc.getCharArrayPosition(ch);
for (int scroll =0; scroll<6; scroll++) {
for (int i=scroll; i<6;i++) {
lc.setRow(0,i-scroll, alphabetBitmap[pos][i]);
}
delay(300);
lc.clearDisplay(0);
}
}
void scrollRight(char ch){
int pos =lc.getCharArrayPosition(ch);
for (int scroll =0; scroll<8; scroll++) {
for (int i=0; i<6;i++) {
if (scroll+i<8) lc.setRow(0, scroll+i, alphabetBitmap[pos][i]);
}
delay(300);
lc.clearDisplay(0);
}
}
ATENÇÃO: Se a matriz de leds não acender verifique todas as conexões com o Arduino.
Vídeo
Como o projeto deve funcionar
1. Ao iniciar o programa, a matriz de leds irá exibir os leds de acordo com os principais comandos da biblioteca LedControlMS.h.
Desafios
Com base neste projeto, resolva o seguinte desafio: Desafio 58
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários