Código Arduino e vídeo para o sensor de temperatura e umidade DHT22 com display TM1637 e relé
Neste tutorial, exploraremos como usar um sensor de temperatura e umidade DHT22 em conjunto com um display TM1637 e um relé para controlar uma carga CA, como um aquecedor ou ventilador. O objetivo é ligar a carga quando a temperatura atingir 50 graus Celsius e desligá-la quando cair abaixo desse limite. Esta configuração é ideal para manter níveis de temperatura desejados em um ambiente controlado.

Para isso, escreveremos um programa para Arduino que lê os dados de temperatura e umidade do sensor DHT22, exibe a temperatura no display TM1637 e controla o relé com base nas leituras de temperatura. Para maior clareza, você pode conferir o vídeo (no minuto 10:00).
Hardware explicado
Os principais componentes deste projeto incluem o sensor DHT22, o display TM1637, o módulo relé e uma placa Arduino. O sensor DHT22 é responsável por medir a temperatura e a umidade, fornecendo uma saída digital que o Arduino pode ler facilmente. O display TM1637 é usado para mostrar as leituras de temperatura em um formato amigável ao usuário, enquanto o módulo relé permite controlar com segurança dispositivos de alta tensão, como aquecedores e ventiladores.
O sensor DHT22 tem três pinos: VCC (alimentação), GND (terra) e DATA (saída). O display TM1637 usa quatro pinos para alimentação, terra, clock e comunicação de dados. O módulo relé conecta-se ao Arduino e atua como um interruptor para a carga AC, garantindo operação segura ao controlar dispositivos que exigem tensão mais alta.
Detalhes da ficha técnica
| Fabricante | Adafruit |
|---|---|
| Número da peça | DHT22 |
| Tensão lógica/E/S | 3.3 V - 5.5 V |
| Tensão de alimentação | 3.3 V - 6 V |
| Corrente de saída (por canal) | 0,5 mA |
| Corrente de pico (por canal) | 2.5 mA |
| Orientação sobre a frequência PWM | Não aplicável |
| Limiares da Lógica de Entrada | 0.3 V - 0.7 V |
| Queda de tensão / RDS(on)/ saturação | Não aplicável |
| Limites térmicos | -40°C a 80°C |
| Pacote | Pacote de 3 pinos |
| Notas / variantes | Também conhecido como AM2302 |
- Certifique-se de fornecer alimentação adequada (3,3 V - 6 V) ao DHT22.
- Use resistores pull-up na linha de dados, se necessário.
- Permita que as leituras do sensor se estabilizem para obter dados precisos.
- Verifique duas vezes as conexões dos pinos para evitar falhas de comunicação.
- Tenha cautela com cargas de CA; garanta isolamento e segurança adequados.
- Instale um dissipador de calor no relé se estiver controlando cargas elevadas.
- Use técnicas de debounce, se necessário, ao ler os dados do sensor.
- Mantenha o sensor DHT22 protegido da luz solar direta para leituras precisas.
Instruções de fiação

Para fazer a fiação dos componentes, comece conectando o sensor DHT22. Conecte o pino VCC ao pino 5V do Arduino, o pino GND ao terra (GND) e o pino DATA ao pino digital 9 do Arduino.
Em seguida, ligue o display TM1637. Conecte o pino VCC ao pino 5V do Arduino, o pino GND ao terra, o pino CLK (clock) ao pino digital 2 e o pino DIO (dados) ao pino digital 3. Para o módulo de relé, conecte o pino VCC ao pino 5V, o pino GND ao terra e o pino de controle (sinal) ao pino digital 7. Por fim, certifique-se de que a carga AC esteja conectada com segurança ao módulo de relé, seguindo as instruções do fabricante.
Exemplos de código e guia passo a passo
O código a seguir inicializa o sensor DHT22 e o display TM1637. Ele configura os pinos necessários e se prepara para ler os dados de temperatura.
#include
#define CLK 2
#define DIO 3
#define DHTPIN 9
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
pinMode(RELAY, OUTPUT);
dht.begin();
}
Neste trecho, incluímos as bibliotecas necessárias e definimos os pinos para o display TM1637 e para o sensor DHT22. A função setup inicializa a comunicação serial e configura o pino do relé como saída.

A função loop obtém a temperatura e controla o relé com base na leitura da temperatura. Se a temperatura exceder 50 graus, o relé é ativado.
void loop() {
delay(TEST_DELAY);
int temp = round(getTemp("c"));
display.showNumberDec(temp, false, 3, 1);
if(temp > 50) {
digitalWrite(RELAY, LOW);
} else {
digitalWrite(RELAY, HIGH);
}
}
Este trecho de código demonstra como ler a temperatura, exibi-la e controlar o relé. A temperatura é arredondada e exibida no TM1637, e o relé é ligado ou desligado com base no limite de temperatura.
Para uma compreensão mais abrangente, consulte o código completo disponibilizado abaixo do artigo.
Demonstração / O que esperar
Ao executar o programa, você deve ver a temperatura exibida no TM1637. Quando a temperatura exceder 50 graus Celsius, o relé será ativado, ligando a carga AC conectada. Por outro lado, quando a temperatura cair abaixo de 50 graus, o relé será desativado, desligando a carga. Tenha cuidado com polaridade invertida e garanta conexões adequadas para evitar danos aos componentes (no vídeo às 12:30).
Marcas de tempo do vídeo
- 00:00- Introdução
- 02:15- Explicação da fiação
- 05:00- Apresentação do Código
- 10:00- Demonstração
- 12:30- Problemas comuns
/*
* Original code from TM1637 https://github.com/avishorp/TM1637
* Original code and library for DHT22 https://github.com/adafruit/DHT-sensor-library
* Watch the video for this code https://youtu.be/xD8wHXDzLkQ
* Other Arduino library and videos https://robojax.com
*/
/*
* Modified for Robojax video on January 10, 2018
* by Ahmad Nejrabi, in Ajax, Ontario, Canada
*/
// ****** Start of TM1637 Display code
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 1000
TM1637Display display(CLK, DIO);
// ****** end of TM1637 Display code
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
// updated by Ahmad for Robojax.com videos.
// on January 10, 2018 in Ajax, Ontario, Canada
// ****** Start of DHT code
#include "DHT.h"
#define DHTPIN 9 // what digital pin we're connected to
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
// ********** end of DHT22 code
#define RELAY 7 // the pin connected to relay
void setup()
{
Serial.begin(9600);
Serial.println("DHT22 Robojax Test with Display");
pinMode(RELAY,OUTPUT);// set RELAY pin as output
dht.begin();
}
void loop()
{
delay(TEST_DELAY);// wait
// **** TM1637 code start
display.setBrightness(0x0f);// set brightness
uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };// clear display values
display.setSegments(data);//clear display
// **** TM1637 code end
// Robojax.com test video
Serial.println(getTemp("c"));
int temp = round(getTemp("c"));
display.showNumberDec(temp, false, 3,1);
if(temp >50 )
{
digitalWrite(RELAY, LOW);
}else{
digitalWrite(RELAY, HIGH);
}
}// loop end
/*
* getTemp(String req)
* returns the temperature related parameters
* req is string request
* getTemp("c") will return temperature in Celsius
* getTemp("hic") will return heat index in Celsius
* getTemp("f") will return temperature in Fahrenheit
* getTemp("hif") will return temperature in Fahrenheit
* getTemp("h") will return humidity
*/
float getTemp(String req)
{
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return 0.0;
}
// Compute heat index in Kelvin
float k = t + 273.15;
if(req =="c"){
return t;//return Celsius
}else if(req =="f"){
return f;// return Fahrenheit
}else if(req =="h"){
return h;// return humidity
}else if(req =="hif"){
return hif;// return heat index in Fahrenheit
}else if(req =="hic"){
return hic;// return heat index in Celsius
}else if(req =="k"){
return k;// return temperature in Kelvin
}else{
return 0.000;// if no request found, return 0.000
}
}
Coisas que você pode precisar
-
Amazonas
-
AliExpressComprar módulo de relé de canal 5v 12v 1 2 4 6 8 canaiss.click.aliexpress.com
Recursos e referências
-
Externo
Arquivos📁
Bibliotecas do Arduino (zip)
-
Módulo PCB DHT22 vermelho
DHT22-module-red.fzpz0.01 MB
Arquivo Fritzing
-
Sensor de Temperatura DHT11
Temperature Sensor DHT11.fzpz0.01 MB -
Sensor de Umidade e Temperatura DHT22
DHT22 Humidity and Temperature Sensor.fzpz0.01 MB -
Módulo PCB DHT22 vermelho
DHT22-module-red.fzpz0.01 MB -
Módulo DHT22 branco
DHT22-module-white.fzpz0.01 MB -
Módulo de sete segmentos TM1637
TM1637.fzpz0.01 MB -
Sensor de Umidade e Temperatura DHT11 (3 pinos)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
Manual do Usuário
-
Manual do usuário do sensor de temperatura e umidade DHT22
robojax-DHT22_manual.pdf0.36 MB