Código de Pesquisa

Matriz LED 8x8 Usando um Módulo Arduino MAX7219

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

FabricanteMaxim Integrated
Número da peçaMAX7219
Tensão de lógica/IO3,3V a 5,5V
Tensão de alimentação4,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 PWM100 Hz
Limiares de lógica de entrada2,0V (alto) / 0,8V (baixo)
Queda de tensão / RDS(on)/ saturação0,2V típico.
Limites térmicos150°C
Pacote16-DIP
Notas / variantesConfiguraçã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 oVCCpino do MAX7219 para o 5V do Arduino.
  • Conecte oGNDpino ao terra do Arduino.
  • Conecte oDINpino (Dados de Entrada) para o pino 12 do Arduino.
  • Conecte oCLKpino (Relógio) para o pino 11 do Arduino.
  • Conecte oCSpino (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)
4-8x8 LED matrix using a MAX7219 Arduino module
Idioma: C++
/*
 * 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 ///////



5-8x8 LED Matrix using a MAX7219 Arduino Module
Idioma: C++
/*
 * 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 ///////



Arquivos📁

Nenhum arquivo disponível.