27 janeiro 2019

Como usar o módulo TM1638 com Arduino

Um módulo muito fácil de utilizar e que pode ser adaptado aos mais variados projetos é o Módulo Display 7 Segmentos 8 dígitos TM1638, mostrado abaixo, que além do display tem 8 botões de uso geral e fácil conexão com o Arduino, como veremos neste post.

Vista da conexão do módulo TM1638 com Arduino

Vamos conhecer um pouco mais sobre esse interessante módulo e conectá-lo em uma placa Arduino Uno para realizarmos os primeiros testes.


O Módulo Display 7 Segmentos 8 dígitos TM1638


Na imagem podemos ver os detalhes do módulo que, além do display de 7 segmentos e 8 dígitos, tem ainda 8 botões tipo push-button de uso geral e 8 leds na parte superior. Esses componentes podem ser acionados individualmente, possibilitando a criação de painéis de controle ou a utilização da placa para fins educativos.
Vista frontal do Módulo Display 7 Segmentos 8 digitos TM1638
A comunicação com o microcontrolador utiliza apenas 3 pinos (STB, CLK e DO) e a alimentação da placa é feita com tensões entre 3.3 e 5 VDC. O controlador é o TM1638 (datasheet) e a placa possui 4 furos para que você possa prendê-la em algum suporte ou gabinete de sua preferência.

O módulo TM1638 é capaz de mostrar tanto números como (alguns) caracteres no display de 7 segmentos, portanto uma placa com variadas possibilidades de utilização e também um baixo custo. Funciona não só com Arduino mas também com Raspberry Pi, como veremos futuramente.

Conexão do módulo TM1638 ao Arduino


Nos testes conectamos o TM1638 ao Arduino Uno utilizando a seguinte configuração:

  • Pino STB conectado ao pino 4 do Arduino
  • Pino CLK conectado ao pino 7 do Arduino
  • Pino DO conectado ao pino 8 do Arduino

Montamos o circuito seguindo o esquema abaixo:

Circuito Arduino Uno e Módulo TM1638


A conexão é bem simples, e ao energizar o Arduino um led indicador de funcionamento também é aceso no módulo TM1638 (logo acima dos pinos de conexão). Com isso a placa está pronta para uso.

Programa de controle módulo TM1638


O programa a seguir utiliza a biblioteca TM1638Lite, que pode ser instalada a partir da própria IDE do Arduino. Acesse o menu Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas e procure por tm1638, clicando em seguida em Instalar, como mostrado na imagem abaixo:

Tela da IDE Arduino com instalação da biblioteca TM1638Lite

O primeiro programa mostra a utilização de caracteres no display e também os botões do módulo, que acionam os leds da parte superior:

 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
35
//Programa: Modulo TM1638 com Arduino
//Autor: Arduino e Cia

#include <TM1638lite.h>

//Conexao dos pinos STB, CLK e DO
TM1638lite tm(4, 7, 8);

void setup()
{
  Serial.begin(9600);
  tm.reset();

  //Mensagem inicial
  tm.displayText("Arduino");
  delay(3000);
  tm.displayText("BOTOES");
}

void loop()
{
  //Verifica se algum botao foi pressionado
  uint8_t buttons = tm.readButtons();
  //Acende o led correspondente
  doLEDs(buttons);
}

void doLEDs(uint8_t value)
{
  for (uint8_t position = 0; position < 8; position++)
  {
    tm.setLED(position, value & 1);
    value = value >> 1;
  }
}'

Utilizamos o comando tm.displayText() para mostrar uma mensagem no display (linhas 15 e 17 do programa). Note que nem todos os caracteres podem ser mostrados, devido às limitações do display de 7 segmentos.

Também é possível utilizar o comando tm.displayASCII() para mostrar um caracter em um display específico. O comando tm.displayASCII(3, 'A'), por exemplo, mostra o caracter A no 4o. display (eles são numerados de 0 a 7). O comando tm.setLED() é utilizado para acionar os leds da placa.

Neste outro exemplo, é mostrado um contador na tela que é atualizado a cada 1 segundo:

 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
35
36
37
38
39
40
41
42
//Programa: Contador com Modulo TM1638
//Autor: Arduino e Cia

#include <TM1638lite.h>

//Conexao dos pinos STB, CLK e DO
TM1638lite tm(4, 7, 8);

int contador = 0;
int digito7, digito6, digito5, digito4;

void setup()
{
  Serial.begin(9600);
  tm.reset();

  //Mensagem inicial
  tm.displayText("Contador..");
  delay(2000);
  tm.reset();
}

void loop()
{
  //Separa o numero do contador em digitos
  digito7 = (contador % 10);
  digito6 = ((contador / 10) % 10);
  digito5 = ((contador / 100) % 10);
  digito4 = ((contador / 1000) % 10);
  
  //Mostra os digitos no display
  tm.displayHex(7, digito7);
  tm.displayHex(6, digito6);
  tm.displayHex(5, digito5);
  tm.displayHex(4, digito4);
  
  //Incrementa o contador
  contador++;
  
  //Aguarda 1 segundo
  delay(1000);
}

Neste programa temos o comando tm.displayHex(), que mostra um número no display desejado. O comando tm.displayHex(7, 2), por exemplo, mostra o número 2 no dígito 7 (o último) do display.

Clique aqui e confira outros posts utilizando displays aqui no Arduino e Cia!

2 comentários:

  1. Esta bilblioteca serve para placas com 16 teclas ??

    ResponderExcluir
    Respostas
    1. Oi Cicero,

      Se for o mesmo controlador, não vejo problemas. Apenas troque o número 8 na linha 30 por 16, para que ele leia todas as teclas.

      Abraço!

      Adilson

      Excluir