Projeto 71 - Como usar o Módulo Matriz de Led 8X8 - MAX7219 com Arduino

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 ArduinoProjeto 69 - Exibindo frases em uma matriz de LEDs 8 X 8 com Arduino - operadores bit a bit 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 Resultado de imagem para protoboard 830v

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

×

Infomações do site / SEO








×

Adicionar Marcadores