Saltar al contenido
Contenido de Arduino

Lección 1.6: Temperatura y humedad

El DHT11 es el sensor más sencillo para empezar a medir el ambiente: un único cable de datos y una librería que hace todo el trabajo.

Material

Librerías

  • DHT sensor library
  • Adafruit Unified Sensor

Cómo funciona

Dentro hay un sensor de humedad capacitivo, un termistor y un pequeño microcontrolador que calibra las medidas y las envía como datos digitales.

Usa un protocolo propio de un solo cable: el Arduino pide la lectura poniendo la línea a LOW unos milisegundos, y el sensor responde con 40 bits —humedad, temperatura y una suma de comprobación— codificados en la duración de cada pulso.

Es un sensor lento: no admite más de una lectura por segundo, y cada una refleja el ambiente de hace un par de segundos. Si necesitas más precisión o más rango existe el DHT22, que se programa igual.

Datos técnicos

Temperatura
0–50 °C, ±2 °C
Humedad
20–90 %, ±5 %
Lecturas
una por segundo como máximo
Alimentación
3,3–5 V

Conexiones

ComponenteSe conecta aNota
DHT11, VCC (+)5V
DHT11, DATA (S)Pin 2
DHT11, GND (−)GND

Código

// Lee la temperatura y la humedad cada dos segundos.
#include <DHT.h>

const int DHT_PIN = 2;
DHT dht(DHT_PIN, DHT11);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  delay(2000); // el DHT11 necesita tiempo entre lecturas

  float humidity = dht.readHumidity();
  float celsius = dht.readTemperature();

  if (isnan(humidity) || isnan(celsius)) {
    Serial.println("Error de lectura");
    return;
  }

  Serial.print("Humedad: ");
  Serial.print(humidity);
  Serial.print(" %   Temperatura: ");
  Serial.print(celsius);
  Serial.println(" °C");
}

Qué hace el código

  • DHT dht(DHT_PIN, DHT11); crea el sensor indicando su pin y su modelo. Para un DHT22 basta cambiar DHT11 por DHT22.
  • readTemperature() devuelve grados Celsius; readTemperature(true), grados Fahrenheit.
  • isnan() detecta una lectura fallida: la librería devuelve NaN —«no es un número»— cuando el sensor no responde o los datos no cuadran.
  • El delay(2000) va al principio del loop() para dar tiempo al sensor también desde el arranque.

Paso a paso

  1. Instala «DHT sensor library», de Adafruit, desde el gestor de librerías. Si pregunta por sus dependencias, instala también «Adafruit Unified Sensor».
  2. Conecta el módulo según la tabla.
  3. Sube el código y abre el monitor serie a 9600 baudios.
  4. Echa el aliento sobre el sensor y observa cómo sube la humedad.

Resultado

Cada dos segundos aparecen la humedad y la temperatura. Al echarle el aliento, la humedad sube en pocos segundos.

Si no funciona

  • Si solo aparece «Error de lectura», revisa el cable de datos y que el modelo del código —DHT11 o DHT22— sea el tuyo.
  • Si usas el sensor suelto, de cuatro patas, falta la resistencia de 10 kΩ entre DATA y VCC; la tercera pata no se conecta.
  • Leer más de una vez por segundo devuelve errores o el mismo valor repetido.