Projeto 75 - Criando faces de um dado com módulo matriz de leds (dado eletrônico) - Arduino

Básico - Projeto 75

Dado eletrônico 2 - módulo MAX7219

Objetivo

Neste projeto vamos criar um "dado eletrônico" que irá exibir as faces de 1 a 6, utilizando o módulo MAX7219 junto com a biblioteca LedControlMS.h e com o Arduino. Cada jogada é realizada ao pressionar um botão.

Obs.: É importante fazer projeto Projeto 74 antes. Ele mostra como podemos criar de forma otimizada letras, números e símbolos através da função bitRead(), assim como, armazená-los em uma biblioteca própria. Estes conhecimentos são necessários para criação das faces do dado eletrônico deste projeto.

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

 Push Button Push button 6X6X5mm  1    
Arduino UNO Arduino UNO 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. Monte o botão (push button) sem o resistor, pois através da programação vamos habilitar o resistor pull-up interno do arduino. Desta forma, quando o botão estiver pressionado, o Arduino retornará "LOW" ou "0". Para saber mais sobre botões,assista o vídeo Arduino: Botão e Resistor de Pull Up Interno ou leia os artigos: Projeto 04a - Push Button como interruptor - liga e desliga (padrão para pull-down ou pull-up) e Como usar push button com Arduino (programação).

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

Para saber como utilizar a biblioteca LedControlMS.h leia o tutorial: Projeto 71 - Como usar o Módulo Matriz de Led 8X8 - MAX7219 com Arduino

Desenhando as faces do dado - utilizado a configuração binária

1. Como vimos no Projeto 74, podemos desenhar letras, números e símbolos  através  do aplicativo Led Matrix Editor.

 2. Também vimos no Projeto 74 como podemos armazenar letras, números e símbolos em uma biblioteca "header file" através dos seus respectivos números binários.

Criando e instalando o header file "faces.h" - faces de um dado

1. Para facilitar o trabalho de exibição, podemos criar a nossa própria biblioteca com as 6 faces de um dado. Veja o nosso exemplo abaixo:

/*******************************************************************************
*
*          Biblioteca "faces.h" - faces de um dado - matriz de leds
*                   http://squids.com.br/arduino
*
*******************************************************************************/
const byte F1[] = {
  B00000000,
  B00000000,
  B00000000,
  B00011000,
  B00011000,
  B00000000,
  B00000000,
  B00000000
};

const byte F2[] = {
  B11000000,
  B11000000,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B00000011,
  B00000011
};

const byte F3[] = {
  B11000000,
  B11000000,
  B00000000,
  B00011000,
  B00011000,
  B00000000,
  B00000011,
  B00000011
};

const byte F4[] = {
  B11000011,
  B11000011,
  B00000000,
  B00000000,
  B00000000,
  B00000000,
  B11000011,
  B11000011
};

const byte F5[] = {
 B11000011,
  B11000011,
  B00000000,
  B00011000,
  B00011000,
  B00000000,
  B11000011,
  B11000011
};

const byte F6[] = {
  B11000011,
  B11000011,
  B00000000,
  B11000011,
  B11000011,
  B00000000,
  B11000011,
  B11000011
};

2. Para baixar clique no botão abaixo:

DOWNLOAD - faces.h

3. Coloque o arquivo faces.h na mesma pasta onde está o sketch principal:

 4. No IDE do Arduino, faça a verificação e o upload para o microcontrolador.

Atenção: Observe que deverá aparecer uma aba com o "header file" faces.h, como mostra a figura acima. Para visualizar ou alterar o código no IDE basta clicar sobre a aba faces.h.

5. Para verificar as faces do dado armazenadas na biblioteca faces.h, rode o código Arduino abaixo:

5.1. Utilizamos a biblioteca LedControlMS.h para o funcionamento do módulo MAX7219.

5.2. Observe que utilizamos a função bitRead() para acender os leds da matriz. Esta função, assim como os operadores bitwise alternativos, podem ser melhor estudados no Projeto 74.

5.1. As faces do dado são visualizadas de 1 a 6, em ordem crescente.

/*******************************************************************************
*
*               Ler Alfabeto - Matriz de leds 8X8 - MAX7219
*               Autor: Angelo Luis Ferreira
*               Data: 08/01/2020 (dd/mm/AA)
*                  http://squids.com.br/arduino
*
*******************************************************************************/
#include "LedControlMS.h"
#include "alfa.h" // incluimos a biblioteca alfa.h

/* Criando o objeto lc 
 ***** Definindo os pinos de conexão do módulo MAX7219 *****
 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 byte N_MTX = 1;
LedControl lc=LedControl(2,3,4, N_MTX);

const int letters[] = {A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
    COL,DASH,BRA2,_,FULL,CHECK,B2,TEMP,LINE,SMILE,DOT,COLDOT};

const byte letter_len = sizeof(letters)/sizeof(letters[0]); // conta o nº de elementos do array

byte speedCount = 40; //altere para aumentar ou diminuir a velocidade de exibição

void setup() {
  for (int i=0; i< N_MTX; i++){
    lc.shutdown(i,false); 
    lc.setIntensity(i,8); /* define o brilho dos leds - médio */    
    lc.clearDisplay(i); /* limpa o display */
  }
}  
  
void loop() {
  for(byte count = 0; count < letter_len; count++) {
     for (byte a =0; a<=speedCount; a++) {
      drawScreen(letters[count]);   
      }
  }
}

void  drawScreen(int buffer[]) {
  for (int i = 0; i < 8; i++) { // linhas
    for (int j = 0; j < 8; j++) { // colunas
      lc.setLed(0, i, j, bitRead(buffer[i], 7 - j)); // usando bitRead()
      //lc.setLed(0, i, j, (buffer[i] >> 7-j) & 0X01); // usando operador bitwise
    }
  }
}

Sketch do projeto

1. Agora que já vimos como utilizar o módulo matriz de leds MAX7219 com a função bitRead() ou com operadores bitwise e biblioteca com as matrizes de bits, vamos ao nosso projeto principal.

2. Não esqueça de incluir a biblioteca faces.h no IDE como já mostramos anteriormente.

3. Faça o dowload e abra o arquivo projeto75.ino no IDE do Arduino:  DOWNLOAD - projeto75.ino

Ou se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************
*
*               Projeto 75 - Dado eletrônico com módulo atriz de leds- MAX7219
*               Autor: Angelo Luis Ferreira
*               Data: 14/01/2020 (dd/mm/AA)
*                  http://squids.com.br/arduino
*
*******************************************************************************/
#include <LedControlMS.h>
#include "faces.h" // incluimos a biblioteca alfa.h

/* Criando o objeto lc 
 ***** Definindo os pinos de conexão do módulo MAX7219 *****
 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 byte N_MTX = 1;
LedControl lc=LedControl(2,3,4, N_MTX);

const int faces[] = {F1,F2,F3,F4,F5,F6};

// define pino de entrada do Arduino para o push button
const byte btn = 11;

void setup() {
  for (int i=0; i< N_MTX; i++){
    lc.shutdown(i,false); 
    lc.setIntensity(i,8); /* define o brilho dos leds - médio */    
    lc.clearDisplay(i); /* limpa o display */
  }
  // define botões como entrada e pull up interno do Arduino
  pinMode(btn, INPUT_PULLUP);

  // randomSeed() basicamente "embaralha" a função random()
  randomSeed(analogRead(0));

  // mostra a primeira face (aleatório)
  drawScreen(faces[random(0, 6)]);
}  
  
void loop() {
  if(!digitalRead(btn)) { // se o botão for acionado (digitalRead(btn) = 0 - pullup)
    while (!digitalRead(btn)) {}; // aguarda soltar o botão 
    lc.clearAll(); // limpa a matriz
    delay(200);
    diceRound(); // roda uma jogada do dado
    
  }
}

void diceRound() {
  byte result = 0; // inicializa a variável "result" com 0
  byte rodada = random(15, 35); // gera comprimento da rodada, quantos números passarão
  for (byte i = 0; i < rodada; i++) // loop de 0 até comprimento da rodada
    {
      result = random(0, 6); // gera número de 0 a 5, devido a string começar em 0 e finalizar em 5                             
      drawScreen(faces[result]); // mostra as faces do dado até o dado parar
      delay(50 + i * 10); // espera para passar cada número (varia velocidade)
    }
}

void  drawScreen(byte buffer[]) {
  for (int i = 0; i < 8; i++) { // linhas
    for (int j = 0; j < 8; j++) { // colunas
      lc.setLed(0, i, j, bitRead(buffer[i], 7 - j)); // usando bitRead()
      //lc.setLed(0, i, j, (buffer[i] >> 7-j) & 0X01); // usando operador bitwise
    }
  }
}

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, o display irá mostrar uma face aleatória entre 1 e 6.

2. Para gerar uma rodada do dado basta pressionar o botão.

3. As faces são passadas de forma aleatória e com quantidade e velocidade variável.

4. Finalmente uma face ficará fixa mostrando supostamente qual é o valor do dado.

5. Clique no botão para gerar uma nova rodada.

Desafios

Com base neste projeto, resolva o seguinte desafio:  Desafio 62

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores