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
| Componente | Se conecta a | Nota |
|---|---|---|
| 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
- Instala «DHT sensor library», de Adafruit, desde el gestor de librerías. Si pregunta por sus dependencias, instala también «Adafruit Unified Sensor».
- Conecta el módulo según la tabla.
- Sube el código y abre el monitor serie a 9600 baudios.
- 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.