Módulo TM1637 – Display 4 dígitos com Arduino
Muitas vezes, nós desenvolvemos alguns projetos de automação, os quais, para desempenharem as suas respectivas funções, necessitam da existência de uma interação entre os mesmos e o usuário. Quando falamos especificamente em sistemas de monitoramento a interação citada pode ser obtida através da utilização de dispositivos como leds, displays LCD e displays de 7 segmentos. Neste tutorial, nós vamos te mostrar como manipular um display de 7 segmentos com 4 dígitos utilizando o módulo TM1637 com display de 4 dígitos em conjunto com uma placa Arduino.
[toc]
A importância das Interfaces Homem-Máquina
Como dissemos anteriormente, em alguns tipos de aplicações é essencial que exista uma possibilidade de interação entre o sistema propriamente dito e o usuário. Dessa forma, nós precisamos de um caminho que torne essa interação possível. O nome desse caminho de comunicação chama-se IHM (Interface Homem Máquina).
IHM é um caminho pelo qual o homem e um projeto de automação podem se comunicar e interagir, visando atingir um objetivo comum.
Geralmente uma IHM é dada por algum tipo de saída como indicadores de velocidades, monitores, displays, auto-falantes, entre outros e algum tipo de entrada, como por exemplo, botões, telas do tipo touchscreen, microfones, câmeras, além de uma infinidade de outros elementos.
Neste momento que os displays de 7 segmentos tomam a atenção para si, pois, uma vasta gama de dispositivos automatizados faz o uso destes elementos pelos motivos que veremos em seguida. Confira aqui os nossos outros tutoriais sobre elementos integrantes de IHMs:
- Display Gráfico 128×64 com Arduino
- Display OLED 0.96″ I2C com Arduino
- Primeiros passos – Display LCD TFT 2.4″ Touchscreen – Descobrindo o drive
- Display LCD 20×4 e 16×2 com Adaptador I2C
- Usando o Display TFT 1.8″ ST7735 com NodeMCU ou Arduino
- Display LCD 16×2 com Arduino
- Display LCD Nokia 5110 – Aprenda como utilizá-lo com seu Arduino
Os displays de 7 segmentos
Como dissemos anteriormente, os displays de 7 segmentos são muito utilizados para comunicação visual em projetos de automação, estando presentes em diversos equipamentos, tais como: relógios, calculadoras e multímetros. Por serem simples de usar, robustos e seguirem um padrão em sua estrutura, estes que permitem imprimir os algarismo arábicos (0 a 9) e até mesmo algumas letras (no caso de displays alfanuméricos).
Como o próprio nome aponta, esse displays possuem 7 segmentos, de modo que, cada um destes corresponde a um led, os quais, são ligados em conjunto, podem formar um algarismo ou uma letra. Os segmentos deste display são identificados por letras que vão de a a g. Além disso, estes também possuem um ponto decimal, normalmente identificado pelas letras dp, veja a disposição dos segmentos conforme a figura abaixo:
Como podemos perceber, a representação de algarismos utilizando um único display é restrita à apresentação dos números contidos no intervalo de 0 a 9, de modo que, para fazermos com que o mesmo mostre algum sinalize algum numeral basta que os segmentos corretos sejam acionados ao mesmo tempo. Por exemplo, caso nosso desejo seja representar o número 0 (zero) nós devemos acender os segmentos a,b,c,d,e,f.
O módulo TM1637
O módulo TM1637 possui um display de 7 segmentos de 4 dígitos (que podem ser tratados como 4 displays de 7 segmentos em conjunto). Ao contrário de uma associação de displays “tradicional” que faria o uso de muitos pinos (no mínimo 7 pinos mais um para ligar e desligar cada display) de uma placa Arduino UNO, este módulo permite que os 4 displays sejam manipulados somente com 2 pinos.
Ao todo, o módulo TM1637 possui 4 pinos, sendo que, dois deles, conforme falamos anteriormente referem-se à manipulação dos displays e os outros 2 possuem a função de alimentar o módulo. Repare que além dos segmentos destinados à representação dos algarismos, existem também segmentos para serem utilizados como “:” (dois pontos) para representação de horas.
Mãos à obra – Utilizando o módulo TM1637 com Arduino
Componentes necessários
Para desenvolver este projeto, precisaremos dos seguintes componentes:
Montando o projeto
Programando
Neste tutorial, nós vamos implementar uma aplicação na qual o usuário irá digitar um valor numérico de até 4 algarismos no Serial monitor e este mesmo valor será apresentado nos displays existentes no módulo TM1637.
#include <TM1637Display.h> TM1637Display display(6,7); int valorfinal; void setup() { Serial.begin(9600); display.setBrightness(0x0f); } void loop() { char comando; String numero; if(Serial.available()>0) { for( int i = 0; i<4; i++) { comando = Serial.read(); numero = numero + comando; } valorfinal = numero.toInt(); } display.showNumberDec(valorfinal, false); }
Colocando para funcionar
Entendendo a fundo
Software
Neste ponto, serão demonstrados todos os passos para o desenvolvimento do código que deve ser inserido no Arduino UNO para que seja possível a realização da apresentação de algarismos em nosso display 4 dígitos com o módulo TM1637.
– Incluindo a biblioteca que será utilizada
O primeiro passo que devemos realizar para atingir o objetivo proposto consiste na inclusão das bibliotecas adequadas para permitir a interação do módulo TM1637 com o Arduino UNO. Neste tutorial, nós vamos utilizar a biblioteca TM1637Display.h, que por sua vez, pode ser obtida neste link.
#include <TM1637Display.h>
– Criando o objeto da classe TM1637Display
Na parte de criação de objetos, nós devemos declarar dois parâmetros da implementação do objeto necessário para a manipulação do módulo, de modo que, o primeiro deles diz respeito ao clock, enquanto o segundo refere-se ao pino que será utilizado para a transmissão de dados.
TM1637Display display(6,7);
– Declarando a variável global do projeto
Posteriormente, nós declaramos a variável global valorfinal para armazenar o número inteiro que irá ser apresentado no display.
int valorfinal;
– Definindo as configurações iniciais
Na função setup() nós vamos iniciar a comunicação serial através da sentença Serial.begin() com uma taxa de 9600 bps.
void setup() { Serial.begin(9600); display.setBrightness(0x0f); }
– Realizando as medidas de temperatura
Dentro da função loop(), nós criamos primeiramente duas variáveis que serão utilizadas para armazenar os valores que serão enviados para o Arduino através da porta serial. A variável comando receberá cada caractere presente na porta serial e a variável numero será responsável por conter o resultado da concatenação dos caracteres que chegarem na variável comando.
O procedimento de escrita dos valores no display tem seu início com a verificação da existência de caracteres para serem lidos no buffer da porta serial através da sentença Serial.available(). Caso exista algo para ser lido, utilizamos uma estrutura de repetição for para realizarmos a leitura de 4 caracteres e em seguida armazená-los na variável numero. Em seguida, convertemos o valor em questão de string para inteiro, que por sua vez, será utilizado como o primeiro argumento da sentença display.showNumberDec() (apenas como curiosidade, o segundo argumento da sentença em questão corresponde a opção de fazer com que o display apresente zeros para completar os 4 algarismos.
void loop() { char comando; String numero; if(Serial.available()>0) { for( int i = 0; i<4; i++) { comando = Serial.read(); numero = numero + comando; } valorfinal = numero.toInt(); } display.showNumberDec(valorfinal, false); }
Hardware
Alguns pontos importantes sobre este tutorial
Normalmente, além do que já foi dito, quando falamos em displays de 7 segmentos, nós também abordamos 2 pontos muito pertinentes quanto à manipulação dos mesmos, de modo que, o primeiro deles refere-se à maneira de como os segmentos estão interligados, que por sua vez, caracteriza os displays em questão como displays catodo comum ou anodo comum. Essa característica está ligada . Neste momento nós não vamos abordar este assunto, pois, como veremos posteriormente, a utilização do módulo TM1637 faz com que não seja necessário nos preocuparmos com configuração dos segmentos do display embutido no mesmo, portanto, este assunto será trazido à tona em um outro tutorial mais oportuno.
Além disso, o segundo ponto importante que citamos diz respeito ao procedimento utilizado quando queremos associar dois ou mais displays (utilizando os mesmos pinos de um Arduino para cada um) para mostrarem simultaneamente os diversos algarismos de um mesmo número. Geralmente, nestes casos, utiliza-se uma forma de multiplexar os displays, fazendo acionamentos e desligamentos dos mesmos, em instantes definidos e muito rápidos, porém, da mesma maneira, este assunto não será abordado neste tutorial, pois, a utilização do módulo TM1637 torna a representação de números de mais de um algarismo com mais de um display muito mais fácil.
Considerações finais
Neste tutorial, demonstramos como você deve proceder para utilizar o módulo TM1637 para controlar 4 displays de 7 segmentos. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões. Lembre-se de deixar suas dúvidas nos comentários abaixo.
Hola quisiera saber si se puede transmitir la misma información en las dos pantallas, lo conecte en paralelo pero el otro display se modifican todos sus números
Olá, Daniel Madeira. É possível utilizar esse módulo TM1637 como um simples contador de 0000 à 9999 sem arduino? Como ele tem os terminais de alimentação e o do clock, parece-me possível, bastando deixar o pino de dados em alguma situação não muito difícil de se fazer.
Consigo fazer um mini placar manual (dois times de zero a doze) através push buttons com esse modulo tm1637 e o arduino uno r3 ou outro? Você tem o código e um tutorial?