#55Intermediário

Temperatura e umidade com DHT11

4.7(47)
73 concluído
Temperatura e umidade com DHT11
Qual é a temperatura do seu quarto? O ar está úmido ou seco? O sensor DHT11 mede a temperatura e a umidade, e o Arduino mostra os valores em um display LCD de duas linhas, atualizando a cada poucos segundos. Se houver algum problema com o sensor, aparece uma mensagem de erro; é o primeiro passo para criar sua própria estação meteorológica.

Vídeo

Esquema do circuito

Temperatura e umidade com DHT11 - Circuit

Código-fonte

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   Temperatura e umidade com DHT11
4// ─────────────────────────────────────────
5// O sensor DHT11 mede a temperatura e a umidade do ambiente; o LCD I2C
6// mostra a temperatura na primeira linha e a umidade na segunda. A leitura
7// é atualizada a cada 2 s. Se uma leitura falhar, a tela mostra "Sensor
8// Error!" (erro do sensor).
9//
10// Pinos:
11//   D3 -> Dados do DHT11
12//   (resistor de 10k entre dados e 5V, pull-up)
13//   A4 -> LCD SDA
14//   A5 -> LCD SCL
15//   DHT11 e LCD: VCC em 5V, GND em GND
16
17#include <LiquidCrystal_I2C.h>
18#include <Wire.h>
19#include <DHT.h>
20
21#define DHTPIN 3        // Pino de dados do DHT11
22#define DHTTYPE DHT11   // Tipo de sensor usado
23
24LiquidCrystal_I2C lcd(0x27, 16, 2);   // Endereço I2C 0x27, LCD 16x2
25DHT dht(DHTPIN, DHTTYPE);
26
27void setup() {
28  dht.begin();
29  // As bibliotecas modernas preferem init() a begin()
30  lcd.init();
31  lcd.backlight();
32}
33
34void loop() {
35  // Lê a umidade e a temperatura (C)
36  float humidity = dht.readHumidity();
37  float temperature = dht.readTemperature();
38
39  // Verifica se as leituras falharam
40  if (isnan(humidity) || isnan(temperature)) {
41    lcd.setCursor(0, 0);
42    lcd.print("Sensor Error!   ");
43    return;
44  }
45
46  // Linha 1: temperatura
47  lcd.setCursor(0, 0);
48  lcd.print("Temp: ");
49  lcd.print(temperature);
50  lcd.print((char)223); // Símbolo de grau (°)
51  lcd.print("C   ");
52
53  // Linha 2: umidade
54  lcd.setCursor(0, 1);
55  lcd.print("Humidity: %");
56  lcd.print((int)humidity);   // Mostra como número inteiro (45)
57  lcd.print("   "); // Espaços no final para apagar dados antigos
58
59  delay(2000); // O DHT11 é lento; 2 segundos deixam a leitura mais estável
60}
61

Perguntas frequentes

Qual é a precisão das medições do DHT11?

O DHT11 mede temperatura com precisão de ±2 °C e umidade com precisão de ±5%, e opera na faixa de 0–50 °C. Para medições mais precisas, recomenda-se o DHT22 (±0,5 °C) ou o BME280.

Aparece "nan" ou uma mensagem de erro no display. Por quê?

Não foi possível ler o sensor. Verifique o resistor de pull-up de 10 kΩ no pino de dados, o tipo de sensor (DHT11) nas configurações da biblioteca e se há uma espera de pelo menos 1–2 segundos entre as leituras.

Por que as leituras demoram para atualizar?

O DHT11 pode fazer no máximo uma medição por segundo. Tentar ler com mais frequência resulta em valores incorretos ou desatualizados; recomenda-se esperar 2 segundos entre as medições.

Posso calcular a sensação térmica?

Sim, a função computeHeatIndex() da biblioteca DHT calcula a sensação térmica com base na temperatura e na umidade.