Início›Módulos›Temp. + Humidade
⬤ Intermédio · Grupo 3 — Temperatura e Humidade

💧 Sensor de Temperatura e Humidade (DHT11)

⏱️ 35 min 🧩 Módulo DHT11 · Digital 1-wire · Biblioteca DHT 📦 Módulo #19

Nesta página

🔬 Sobre o Módulo DHT11

Temp. range
0–50°C
Precisão ±2°C
Humidade
20–80% RH
Precisão ±5% RH
Protocolo
1-Wire
1 fio de dados
Tensão
3.3–5V
VCC do Arduino
Resolução
1°C / 1%
Sem decimais no DHT11
Período
~2 s
Mínimo entre leituras
ℹ️
O DHT11 usa um protocolo 1-wire proprietário — não é o protocolo Dallas 1-Wire do DS18B20. A biblioteca Adafruit DHT trata do protocolo automaticamente. Existe também o DHT22 (mais preciso: ±0.5°C, −40 a 80°C) com a mesma pinagem.

🔌 Pinagem — Módulo DHT11

VCCAlimentação → 5V do Arduino (ou 3.3V)
GNDMassa → GND do Arduino
SDados 1-wire → pino digital D2 (ou qualquer digital)
💡
O módulo DHT11 do Kit B 37 já inclui a resistência pull-up de 10kΩ na própria PCB. Se usares o sensor DHT11 bare (sem módulo), precisas de adicionar uma resistência de 10kΩ entre VCC e o pino de dados.

📦 Instalar a Biblioteca DHT

1

Abrir o Gestor de Bibliotecas

No Arduino IDE 2: Ferramentas → Gerir Bibliotecas (ou clica no ícone de livro na barra lateral).

2

Pesquisar DHT

Na barra de pesquisa escreve: DHT sensor library

3

Instalar Adafruit

Seleciona DHT sensor library by Adafruit e clica em Instalar. Aceita instalar as dependências (Adafruit Unified Sensor).

💻 Leitura Básica de Temperatura e Humidade

ex_dht11_basico.ino
#include <DHT.h>

#define PINO_DHT  2
#define TIPO_DHT  DHT11   // DHT11 ou DHT22

DHT dht(PINO_DHT, TIPO_DHT);

void setup() {
  Serial.begin(9600);
  dht.begin();
  Serial.println("DHT11 iniciado...");
}

void loop() {
  delay(2000);  // DHT precisa de pelo menos 2s entre leituras

  float hum  = dht.readHumidity();
  float temp = dht.readTemperature();  // Celsius

  // Verificar se a leitura é válida
  if (isnan(hum) || isnan(temp)) {
    Serial.println("Erro na leitura do DHT!");
    return;
  }

  Serial.print("Temperatura: "); Serial.print(temp); Serial.println(" C");
  Serial.print("Humidade:    "); Serial.print(hum);  Serial.println(" %");

  // Índice de calor (sensação térmica)
  float ic = dht.computeHeatIndex(temp, hum, false);
  Serial.print("Índice calor: "); Serial.print(ic); Serial.println(" C");
  Serial.println("---");
}

🌤️ Estação Meteorológica com Alertas

ex_estacao_dht.ino
#include <DHT.h>
#define PINO_DHT 2
#define LED_OK   12  // Verde — condições normais
#define LED_ALR  13  // Vermelho — alerta
#define BUZZER   9

#define TEMP_MAX  28.0
#define HUM_MAX   70.0

DHT dht(PINO_DHT, DHT11);

void setup() {
  Serial.begin(9600);
  dht.begin();
  pinMode(LED_OK,  OUTPUT);
  pinMode(LED_ALR, OUTPUT);
  pinMode(BUZZER,  OUTPUT);
}

void loop() {
  delay(2000);
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  if (isnan(t) || isnan(h)) return;

  Serial.print(t); Serial.print(" C | ");
  Serial.print(h); Serial.println(" %");

  bool alerta = (t > TEMP_MAX || h > HUM_MAX);
  digitalWrite(LED_OK,  !alerta);
  digitalWrite(LED_ALR, alerta);
  if (alerta) {
    tone(BUZZER, 1000, 300);
    Serial.println("⚠ ALERTA: condições fora dos limites!");
  }
}

🍓 Raspberry Pi — Python

dht11_pi.py
#!/usr/bin/env python3
# pip3 install adafruit-circuitpython-dht adafruit-blinka
import adafruit_dht
import board, time

sensor = adafruit_dht.DHT11(board.D4)  # GPIO4 = pino físico 7

while True:
    try:
        temp = sensor.temperature
        hum  = sensor.humidity
        print(f"Temp: {{temp}}°C  Humidade: {{hum}}%")
    except RuntimeError as e:
        print(f"Leitura falhada: {{e}}")
    time.sleep(2.0)

🏆 Para ir mais longe

Kit B 37 · PR.FT6_15 · Arduino UNO · Raspberry Pi · Início · led.dge.medu.pt