13 dezembro 2017

Como usar o módulo TM1637 com Arduino

Neste post vamos mostrar como utilizar o módulo TM1637 com Arduino. Você verá que é um módulo bem simples de usar, e que pode ser utilizado nas mais variadas situações.

Arduino e módulo TM1637

O TM1637 é um módulo que possui um display de 7 segmentos e 4 dígitos, utilizando somente 2 pinos de conexão ao microcontrolador. Além da utilização como contador, também é um display perfeito para montar um relógio com Arduino, já que o display conta com os "2 pontos" na parte central.

O módulo TM1637


À primeira vista o TM1637 é muito parecido com o módulo 74HC595, que já vimos aqui no blog. Ambos são displays de 7 segmentos e 4 dígitos, mas com controladores diferentes.

Na imagem abaixo, podemos ver que o módulo TM1637 é um pouco mais voltado para a construção de relógios e coisas do tipo, pois possui a pontuação central no display. Já o 74HC595 tem o ponto decimal em todos os dígitos.

Comparação módulo TM1637 e módulo 74HC595

Olhando na parte traseira do módulo TM1637, observamos a pinagem, que é composta pelos pinos de alimentação (Vcc e GND) e dois pinos de controle/comunicação: CLK (clock) e DIO (dados):
TM1637 - Pinagem

O datasheet do TM1637 você encontra neste link.

Conectando o TM1637 no Arduino


Neste exemplo vamos usar o TM1637 para mostrar o valor de uma porta analógica do Arduino.

Utilizando um potenciômetro, variamos a tensão na porta entre 0 e 5V, que são interpretados pelo microcontrolador como valores entre 0 e 1023. São esses valores que serão mostrados no display.

Vamos conectar o TM1637 nas portas digitais 4 (pino CLK/Clock do módulo) e 5 (pino DIO/Dados). O potenciômetro será ligado na porta analógica A0:

Circuito Arduino e Módulo TM1637 display 7 segmentos 4 digitos


O potenciômetro utilizado foi um de 10K, mas você pode utilizar outros valores para teste, ok?

Programa TM1637 com Arduino


O programa utiliza a biblioteca TM1637, que você pode baixar neste link. Infelizmente ainda não é possível baixar essa biblioteca usando a IDE do Arduino, então faça o download do arquivo, descompacte e coloque a pasta TM1637 dentro da pasta LIBRARIES da IDE do Arduino.

O funcionamento do programa é bem simples, sendo que no loop efetuamos a leitura da porta analógica, atribuindo o valor lido à variável "valor". Essa variável é colocada no comando que vai mostrá-la no display, no caso, o comando 

display.showNumberDec(parâmetro1, parâmetro2).

O parâmetro1 é o número que queremos mostrar no display (no caso, o valor lido do potenciômetro), e o parâmetro2 determina se vamos colocar zeros à esquerda do número mostrado, e recebe TRUE se você quiser mostrar zeros à esquerda, e FALSE caso não queira.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//Programa: Modulo TM1637 com Arduino
//Autor: Arduino e Cia

#include <Arduino.h>
#include <TM1637Display.h>

//Pinos de controle do modulo
#define CLK 4
#define DIO 5
#define pin_pot A0

//Inicializa o display
TM1637Display display(CLK, DIO);

int valor;

void setup()
{
  pinMode(A1, INPUT);
}

void loop()
{
  //Define o brilho do display
  display.setBrightness(0x0f);
  
  //Le o valor do potenciometro
  valor = analogRead(pin_pot);

  //Mostra o valor no display
  display.showNumberDec(valor, false);

  delay(10);
}

O programa de exemplo da biblioteca (TM1637Test) mostra também como você pode usar comandos para acender somente determinados segmentos do display (útil se você quiser escrever alguns caracteres como A, E, C, etc), usar os dois pontos no centro do display quando você está utilizando o display para mostrar a hora usando um módulo RTC, acender dígitos individualmente, entre outras opções.

6 comentários:

  1. Parabéns pela postagem.
    Qual é o softwares que voces usam pra desenhar o projeto?
    DEsde já, agradeço

    ResponderExcluir
    Respostas
    1. Oi Brian,

      Muito obrigado. Usamos o Fritzing, que você pode baixar em fritzing.org :)

      Abraço!

      Adilson

      Excluir
  2. Olá. Consigo usar dois modulos ao mesmo tempo ? Dois relógios ?

    ResponderExcluir
    Respostas
    1. Oi Sergio,

      Consegue sim, perfeitamente.

      Abraço!

      Adilson

      Excluir
    2. Olá, eu também fiquei com a mesma dúvida. Eu quero usar 2 display desse ao mesmo tempo. Para isso eu tenho que fazer:
      #define CLK1 4
      #define DIO2 5
      #define CLK2 6
      #define DIO2 7
      TM1637Display display(CLK1, DIO1);
      TM1637Display display(CLK2, DIO2);
      É isso mesmo? Ele utiliza qualquer pino I/O como CLK ou DIO???

      Excluir
    3. Pode sim, utilizar qualquer pino para CLK e DIO, e se não me engano, o pino de clock pode ser o mesmo para ambos os displays.
      O que você precisa é declarar display1 e display2:
      TM1637Display display1(CLK1, DIO1);
      TM1637Display display1(CLK1, DIO2);

      Excluir