Básico - Projeto 64

Cronômetro digital com display TM1637 (display com 4 dígitos)

Objetivo

Neste projeto vamos criar um circuito que mostra o funcionamento de um cronômetro através da utilização do módulo TM1637 com o Arduino. Ao pressionarmos um botão (push button), o cronômetro é disparado, mostrando os valores dos segundos e minutos. Também utilizaremos um potenciômetro para alterar a intensidade de brilho dos leds do display.

Módulo TM1637 é constituído por 4 displays de 7 segmentos em conjunto (4 dígitos). O módulo TM1637 é de fácil integração com o Arduino, pois sua tensão de alimentação é de 5V e seu controle é feito apenas por 2 conexões com o microcontrolador. Os outros 2 pinos são utilizados para a alimentação do componente. Ideal para projetos com relógio (possui uma identificação central com dois pontos) e contadores que necessitem de um display de fácil visualização.

Observações:

1. Este projeto utilizará uma biblioteca específica para o módulo TM1637 que disponibilizaremos junto com o sketch.

2. Utilizaremos os seguintes comandos da biblioteca: display.encodeDigit(), display.setSegments() e display.setBrightness().

Módulo TM1637 com display 4 dígitos

 

Aplicação

Para fins didáticos e projetos com relógios digitais e equipamentos com contadores.

Componentes necessários

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 TM1637

Módulo TM1637 - 4 dígitos

(anodo comum)

1 Módulo TM1637 com display 4 dígitos - Controlador TM1637
- Alimentação: 3.3 à 5V DC
- Display 7 segmentos 4 dígitos anodo comum

datasheet

Push Button Push button 6X6X5mm 1  
Potenciômetro Potenciômetro 1K 1 Resultado de imagem para potenciômetro

Você poderá experimentar valores diferentes do potenciômetro, entre 1K a 100K

A tensão resultante do potenciômetro aumenta quando giramos o eixo do componente no sentido do polo negativo para o polo positivo.

Arduino UNO R3 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 TM1637 é necessário conhecer a disposição dos seus pinos. Olhando na parte traseira do módulo podemos observar 4 pinos, sendo eles: dois pinos de alimentação (Vcc e GND) e dois pinos de controle/comunicação: CLK (clock) e DIO (dados):

TM1637 - Pinagem

2. A tabela a seguir mostra as conexões do Arduino com o módulo TM1637 do nosso projeto.

Pinos do Arduino Pino do TM1637
2 CLK
3 DIO

 

3) 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". Veja o projeto Projeto 02b - Led apaga com push button pressionado (pull-up interno do Arduino) ou assista o vídeo Arduino: Botão e Resistor de Pull Up Interno

 

4) Observe que nesse projeto o potenciômetro foi montado como um divisor de tensão, onde utilizamos os 3 terminais do componente:

Desta forma o potenciômetro funciona como um divisor de tensão que pode ser lido pelo IDE do Arduino. Girando o eixo do polo negativo (GND) para o polo positivo (Vcc) aumentamos o valor, e ao contrário, diminuímos a intensidade do brilho dos leds do display.

5) Veja abaixo como realizamos a montagem do nosso projeto utilizando um protoboard. Observe que utilizamos um display catodo comum e ligamos o pino 3 no GND do Arduino.

Incluindo biblioteca TM1637 no IDE do Arduino

Para criarmos os comandos para o módulo TM1637 é necessário instalarmos uma biblioteca específica para o componente:

Download dos arquivos da biblioteca TM1637

Para saber detalhes desta biblioteca clique aqui.

Instalando a biblioteca pelo IDE do Arduino

Após fazer o download do arquivo TM1637-master.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.

Para conhecer outras bibliotecas para módulos veja a Tabela Biblioteca para Módulos.

Usando a biblioteca

Neste projeto vamos utilizar apenas duas funções (métodos) da biblioteca TM1637:

Obs.: Para conhecer todas funções da biblioteca TM1637 acesse o link: TM1637 User Guide

a) display.setBrightness(): Este serve para definir o brilho do display, onde o parâmetro de 0 define o brilho mais baixo e 7 para o mais alto.Ex.:

display.setBrightness(7); // brilho mais alto

 c) display.setSegments(): Cada um dos quatro dígitos tem 7 segmentos que podem ser endereçados individualmente. Cada segmento é representado por uma letra como mostrado abaixo, que é endereçado por um bit ou por uma variável:

// Para configurações personalizadas junto ao display de 7 segmentos
// utiliza-se o seguinte esquema, no qual cada letra representa um segmento:
 
//      -         A
//    |   |     F   B
//      -         G
//    |   |     E   C
//      -         D
 
// Anagrama SASA (S -Squids e A - Arduino) - usando a biblioteca TM167 
// tipo uint8_t - tipo de dado requisitado pela biblioteca
const uint8_t SASA[] = {  
  SEG_A | SEG_F | SEG_G | SEG_C | SEG_D,                            // S
  SEG_A | SEG_F | SEG_B | SEG_G | SEG_C | SEG_C | SEG_E | SEG_DP,   // A:
  SEG_A | SEG_F | SEG_G | SEG_C | SEG_D,                            // S
  SEG_A | SEG_F | SEG_B | SEG_G | SEG_C | SEG_C | SEG_E,            // A
};

// Imprime o anagrama SASA no display
display.setSegments(SASA);

C) display.encodeDigit() : Retorna a representação de valores entre 1 e 15 para um dígito (valores hexadecimais). Por exemplo:

Uint8_t data[] = {0x0, 0x0, 0x0, 0x0}; // desliga todos segmentos dos dígitos
data[0]= display.encodeDigit(15);
display.setSegments(data); 

Resultado:


Sketch do projeto

1. Faça o dowload e abra o arquivo projeto64.ino no IDE do Arduino:

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

/*******************************************************************************
*
*    Projeto 64: Cronômetro com display TM1637 e Arduino
*    Referência: Usina info
*    Adaptado por: Angelo Luis Ferreira
*    
*             http://squids.com.br/arduino             
*
*******************************************************************************/
#include <TM1637Display.h> // Inclui a biblioteca TM1637Display
 
const byte CLK = 2; // Define pino 2 como CLK
const byte DIO = 3; // Define pino 3 como DIO

const byte pinBut = 12; // Define a porta digital 12 para o push button
const byte pinPot = A0; // Define a porta analógica A0 para o potenciômetro

byte ini = 0;
uint32_t temporizador = 0;
uint32_t timer = 0;
uint32_t t = 0;
 
// Para configurações personalizadas junto ao display de 7 segmentos
// utiliza-se o seguinte esquema, no qual cada letra representa um segmento:
 
//      -         A
//    |   |     F   B
//      -         G
//    |   |     E   C
//      -         D
 
// Anagrama SASA (S -Squids e A - Arduino) - usando a biblioteca TM167 
// tipo uint8_t - tipo de dado requisitado pela biblioteca
const uint8_t SASA[] = {  
  SEG_A | SEG_F | SEG_G | SEG_C | SEG_D,                            // S
  SEG_A | SEG_F | SEG_B | SEG_G | SEG_C | SEG_C | SEG_E | SEG_DP,   // A:
  SEG_A | SEG_F | SEG_G | SEG_C | SEG_D,                            // S
  SEG_A | SEG_F | SEG_B | SEG_G | SEG_C | SEG_C | SEG_E,            // A
};
 
// Cria o objeto "display" da biblioteca TM1637
TM1637Display display(CLK, DIO);
 
void setup() {
  
pinMode(pinBut, INPUT_PULLUP); // Habilita o pull up interno do Arduino
pinMode(pinPot, INPUT); // Define pin potenciômetro com entrada do Arduino
}
 
void loop() {

  brilho(); // Chama a função brilho() - ajuste brilho segmentos do display
   
  // verifica se o botão (pushbutton) está pressionado e muda o controle
  if (!digitalRead(pinBut)) {         
      ini = !ini; // inverte valor da variável ini
      while (!digitalRead(pinBut)) {  }  //esperera soltar o botão
      delay(50);
  }     

  if (ini==0) {
    anagrama(); // Chama a função anagrama() se ini=0
  }
   
  // Cria o array position[] para armazenar os valores do cronômetro
  uint8_t position[] = { 0, 0, 0, 0 };
 
  // Armazena em segundos o tempo ligado do Arduino
  timer = (millis() - t) / 1000;
 
  // Calculo individual para posição no display
  position[0] = display.encodeDigit((timer / 60) / 10); // Dezena de minuto
  position[1] = display.encodeDigit((timer / 60) % 10); // Unidade de minuto
  position[2] = display.encodeDigit((timer % 60) / 10); // Dezena de segundo
  position[3] = display.encodeDigit((timer % 60) % 10); // Unidade de segundo
 
  //Mostra os valores no display
  display.setSegments(position);

// atualiza a cada 0,25 segundos e coloca ":"
 if ((millis() - (temporizador)) >= 250) {
    // Variável para inclusão do sinal ":" entre min e seg
    position[1] = position[1] + 128;    
    display.setSegments(position);        
    temporizador = millis(); // Atualiza a referência 
  }            
}

void anagrama() {
  // Ajusta o brilho para o anagrama
  display.setBrightness(3);
  // Imprime o anagrama SASA no display
  display.setSegments(SASA);
  // Aguarda pressionar o botão
  while(digitalRead(pinBut)) { } // espera apertar o botão
  while (!digitalRead(pinBut)) { }  //esperera soltar o botão  
  delay(50);
  t = millis();
  temporizador = millis();
  ini = !ini;  
}

void brilho() {
  // Lê valor do potenciômetro (0 a 1023)
  int valor = analogRead(pinPot);
  // Converte valor do potenciêmtro para valor de 0 a 7
  int potVal = map(valor, 0, 1023, 0, 7);
  // Ajusta o brilho dos leds (segmentos) entre 0 e 7
  display.setBrightness(potVal);
}

ATENÇÃO: Se o display não acender verifique todas as conexões do módulo e do potenciômetro.

Vídeo


Como o projeto deve funcionar

1. Ao iniciar o programa, o display irá exibir o anagrama SA:SA.

2. Ao clicar o botão (push button) inicia-se o cronograma a partir de 00:00. São mostrados no display os valores dos segundos e minutos.

3. Girando o eixo do potenciômetro, aumentamos ou diminuímos a intensidade dos leds do display.

4. Ao clicarmos o botão novamente, o cronômetro para e o display exibe o anagrama.

5. Clicando mais uma vez o botão, o cronômetro é reiniciado.

Desafios

Com base neste projeto, resolva o seguinte desafio:

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

Compartilhe:

Doações

Contribua pra manter o site online :)

Inscreva-se no canal Squids

Você está preparado?

Squids Arduino News

Desafio 82 - Projeto 92 Relógio digital com temperatura, umidade e datas Com base no projeto Projeto 92 - Criando um relógio digital com OLED SSD1306, módulo DS3231 e Arduino resolva os seguin...

Básico - Projeto 92 Criando um relógio digital com Oled SSD1306 - bibliotecas Adafruit Objetivo O objetivo neste projeto é criar um relógio digital usando um display OLED junto com o Real Time ...

Desafio 81 - Projeto I09 Controlando 2 motores com driver L9110s (menu via display LCD) Com base no projeto I09 - Motores DC com Driver Ponte H L9110 e Arduino - Controle de 4 velocidades pelo ...

Intermediário - Projeto 09 Motores DC com driver ponte H L9110s e Arduino - 4 velocidades Objetivo Neste tutorial vamos mostrar como controlar a velocidade de 2 motores CC (corrente contínua) a...

Básico - Hub 008 Usar o módulo display 4 dígitos 74HC595   Sugerido por: Tim Santos Objetivo O objetivo é adaptar o  Projeto 63 - Usando o módulo TM1637 (display 4 dígitos) com Arduino e u...

Outros artigos

Mais: Desafios Projetos Básicos Projetos Intermediários Básico

Topo