Lição 28: Sensor de Temperatura DHT11 com Display TM1637 | Curso Passo a Passo de Arduino
Nesta lição do Curso Passo a Passo de Arduino, exploramos como criar um display de temperatura compacto e autônomo, combinando um sensor de temperatura e umidade DHT11 com um display de sete segmentos de 4 dígitos TM1637. Em vez de depender de um monitor serial para visualizar as leituras, este projeto constrói uma unidade pequena e autossuficiente que reporta visualmente a temperatura ambiente em graus Celsius e Fahrenheit. Esta é uma habilidade fundamental para criar interfaces amigáveis para seus projetos eletrônicos, movendo dados do mundo digital para um display físico.Este projeto é um bloco de construção prático para uma variedade de aplicações onde uma leitura rápida de temperatura à primeira vista é necessária. Aqui estão algumas ideias para inspirar você:
- Estação Meteorológica de Mesa: Construa um display pequeno e sempre ligado para monitorar a temperatura no seu escritório ou sala de hobby.
- Monitor de Termostato: Crie um display dedicado para verificar a temperatura perto do termostato da sua casa ou da saída de ar do HVAC.
- Medidor de Incubadora ou Terrário: Monitore a temperatura dentro de um terrário de répteis, câmara de propagação de plantas ou incubadora DIY sem precisar abri-la.
- Termômetro de Oficina ou Garagem: Um display claro e brilhante é perfeito para verificar a temperatura em uma oficina potencialmente empoeirada ou mal iluminada.
- Kit Educacional: Um excelente projeto inicial para aprender como interfacear diferentes tipos de sensores e módulos de saída com um Arduino.
Hardware Necessário
Para acompanhar este projeto, você precisará dos seguintes componentes:
- Arduino Uno (ou qualquer placa compatível)
- Sensor de Temperatura e Umidade DHT11 (versões de PCB de 3 pinos e 4 pinos são mostradas)
- Módulo de Display de Sete Segmentos de 4 Dígitos TM1637
- Protoboard
- Fios de Conexão (Jumpers)
Guia de Conexões
As conexões para este projeto são diretas, exigindo ligações tanto para o sensor quanto para o display. O vídeo demonstra a montagem com duas versões diferentes do sensor DHT11 e dois tamanhos do display TM1637, mas as conexões principais permanecem as mesmas.
Aqui estão as conexões para o sensor DHT11 e o display TM1637, conforme descrito no vídeo (no vídeo em 05:06).



Para o módulo de display TM1637, as conexões são as seguintes:
- VCC para 5V no Arduino.
- GND para GND no Arduino.
- CLK (Clock) para um pino digital, por exemplo, D2.
- DIO (Entrada/Saída de Dados) para outro pino digital, por exemplo, D3.
Para o sensor DHT11, as conexões são:
- VCC (ou o pino +) para 5V.
- GND (ou o pino -) para GND.
- Data (ou o pino S) para um pino digital, por exemplo, D2. (Nota: No vídeo, o pino de dados do sensor está conectado ao pino 2, mas o trecho de código também mostra ele no pino 2. Os pinos CLK e DIO para o display estão nos pinos 2 e 3 no trecho de código, o que é um conflito. A transcrição do vídeo menciona pinos 5 e 6 para o display, então usaremos esses para evitar qualquer sobreposição.)
Por favor, observe: A transcrição e o trecho de código mostram um possível conflito de pinos. O código define o pino de dados do DHT11 e o pino CLK do TM1637 ambos no pino digital 2. Para evitar isso, é recomendado usar pinos separados, como conectar o DHT11 ao pino 2 e o CLK do TM1637 ao pino 5 e o DIO ao pino 6, como mencionado no vídeo.
Explicação do Código
O código para este projeto combina as bibliotecas tanto para o sensor DHT11 quanto para o display TM1637. As partes-chave configuráveis pelo usuário são as definições de pinos e a configuração de brilho do display. Você pode ajustá-las para se adequar às suas conexões e preferências específicas.
Primeiro, o pino de dados do sensor DHT11 é definido. Você pode alterar este número se tiver conectado o sensor a um pino digital diferente no seu Arduino.
#define dhtpin 2 // define o pino para conectar ao DHT11
Em seguida, os pinos para o módulo de display TM1637 são definidos. O pino CLK é para o sinal de clock e o pino DIO é para dados. Eles devem corresponder às suas conexões físicas.
// Pinos de conexão do módulo (Pinos Digitais)
#define CLK 5
#define DIO 6
Um objeto da classe TM1637Display é então criado, que recebe os números dos pinos CLK e DIO como argumentos. Este objeto fornece todas as funções necessárias para controlar o display.
TM1637Display display(CLK, DIO);
O brilho do display é definido na função setup(). O valor 0x0f representa o brilho máximo. Você pode usar um valor de 0x00 (desligado) a 0x0f (máximo) para ajustar a intensidade do display de acordo com seu ambiente.
display.setBrightness(0x0f);
A lógica principal na função loop() lê a temperatura do sensor DHT11 e a exibe. A função showNumberDec() é usada para enviar o valor da temperatura ao display. Seus parâmetros permitem controlar como o número é mostrado. Por exemplo, a linha a seguir exibe a temperatura em Celsius, começando no segundo dígito (posição 1).
display.showNumberDec(23, false, 2, 1);
Neste exemplo, 23 é o número a exibir, false significa sem zeros à esquerda, 2 é o número de dígitos a usar, e 1 é a posição inicial (indexada a partir de 0) no display.
Demonstração ao Vivo do Projeto
No vídeo, o projeto é demonstrado ao vivo. O apresentador mostra as leituras de temperatura nos displays TM1637, tanto no maior quanto no menor. Para provar que o sensor está funcionando, calor é aplicado ao DHT11 usando uma pistola de calor.
Inicialmente, o display mostra a temperatura ambiente em graus Celsius e Fahrenheit. Conforme a pistola de calor aquece o sensor, você pode ver as leituras de temperatura subirem rapidamente. A demonstração mostra a temperatura subindo de uma temperatura ambiente normal para mais de 50°C (123°F), confirmando que o sensor está lendo com precisão a mudança de temperatura e que o display está mostrando os dados corretamente. Este teste é uma ótima maneira de verificar se todas as suas conexões e o código estão funcionando corretamente.
Capítulos do Vídeo
- [00:00] Introdução ao projeto
- [00:28] Entendendo o código para o display TM1637
- [03:04] Exibindo temperatura em Celsius e Fahrenheit
- [05:06] Conectando o DHT11 ao display TM1637
- [06:42] Demonstração ao vivo do display de temperatura
- [08:23] Testando com um módulo de display menor
- [08:35] Conclusão e resumo do projeto
/*
* Robojax Arduino Step-by-Step Course
* Lesson 28: DHT11 with TM1637
* This is the Arduino code for TM1637 4-digit display.
*
* Please watch video instructions here: https://youtu.be/C-1iaCPzNtU
* This code is available at: http://robojax.com/course1/?vid=lecture11
*
* With over 100 lectures free on YouTube. Watch it here: http://robojax.com/L/?id=338
* Get the code for the course: http://robojax.com/L/?id=339
*
* Date: December 6, 2017, in Ajax, Ontario, Canada
*
* Original code from: https://github.com/avishorp/TM1637
* Modified for Robojax video on December 6, 2017
*/
#include <dht11.h>
dht11 DHT11; // create object of DHT11
#define dhtpin 2 // set the pin to connect to DHT11
// start of settings of TM1637 LED display
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
TM1637Display display(CLK, DIO);
uint8_t blank[] = { 0x0, 0x0, 0x0, 0x0 };// blank value for all digits
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 2000
// start of settings of TM1637 LED display
void setup()
{
//Robojax Step-by-Step Arduino Course YouTube Watch it here: http://robojax.com/L/?id=338
Serial.begin(9600);// setting up serial monitor
display.setBrightness(0x0f);
}
void loop()
{
//Robojax Step-by-Step Arduino Course YouTube Watch it here: http://robojax.com/L/?id=338
DHT11.read(dhtpin);// initialize the reading
int humidity = DHT11.humidity;// get humidity
//code for Robojax.com video
Serial.print(getTemp('C'));
Serial.print("C ");
Serial.print(getTemp('F'));
Serial.print("F ");
Serial.print(getTemp('K'));
Serial.print("K ");
Serial.print(" humidity:");
Serial.print (humidity);
Serial.print("% ");
Serial.println();
delay(500);
display.setSegments(blank);
display.showNumberDec(23, false, 2,1);
delay(TEST_DELAY);
display.setSegments(data);
display.showNumberDec(153, false, 3, 1);
delay(TEST_DELAY);
display.setSegments(data);
for(int i=0; i<=500; i++)
{
display.showNumberDec(i);
}
}
Coisas que você pode precisar
-
eBay
-
AliExpressTM1637 4-digit 7-segment display on AliExpresss.click.aliexpress.com
Recursos e referências
-
ExternoBiblioteca DHT11 no GitHubgithub.com
-
ExternoManual do DHT11 (PDF)robojax.com
-
Interno
-
Interno
Arquivos📁
Bibliotecas do Arduino (zip)
-
Biblioteca Arduino TM1637
TM1637_library.zip1.36 MB
Arquivo Fritzing
-
Módulo de sete segmentos TM1637
TM1637.fzpz0.01 MB -
Display de sete segmentos de 4 dígitos TM1637
TM1637-1.fzpz0.01 MB
Outros arquivos
-
XY-T01 Relé Temporizador: Fiação de carga DC
/download/datasheet/robojax_TM1637_datasheet.pdf