.
Sensor de temperatura y humedad DHT11
Indice
- sensor de temperatura dht11
1.sensor de temperatura DHT11

#include "DHT.h" // Incluir la librería del sensor DHT
#define DHTPIN 2 // Pin digital donde está conectado el sensor DHT
#define DHTTYPE DHT11 // Tipo de sensor: DHT11 (también puede ser DHT22 o DHT21)
// Crear un objeto DHT con el pin y tipo de sensor especificados
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600); // Inicializar la comunicación serial a 9600 baudios
dht.begin(); // Inicializar el sensor DHT
}
void loop() {
// Esperar unos segundos entre mediciones (el DHT11 necesita al menos 2 segundos)
delay(2000);
// Leer la humedad relativa (%)
float humedad = dht.readHumidity();
// Leer la temperatura en grados Celsius
float tempC = dht.readTemperature();
// Leer la temperatura en grados Fahrenheit
// El parámetro "true" indica que queremos la lectura en Fahrenheit
float tempF = dht.readTemperature(true);
// Verificar si alguna de las lecturas falló (devuelve NaN = Not a Number)
if (isnan(humedad) || isnan(tempC) || isnan(tempF)) {
Serial.println("¡Error al leer el sensor DHT!");
} else {
// Mostrar la humedad
Serial.print("Humedad: ");
Serial.print(humedad);
Serial.print("%");
Serial.print(" | ");
// Mostrar la temperatura en ambas unidades
Serial.print("Temperatura: ");
Serial.print(tempC);
Serial.print("°C ~ ");
Serial.print(tempF);
Serial.println("°F");
}
}
Explicación del funcionamiento:
Sensor DHT11 (Digital Humidity and Temperature):
- Sensor digital que mide humedad relativa y temperatura
- Comunicación mediante un protocolo propio de 1 cable
- Bajo costo y fácil de usar
Lecturas realizadas:
| Variable | Unidad | Rango típico DHT11 |
|---|---|---|
| Humedad | % HR | 20% a 90% (±5%) |
| tempC | °C | 0°C a 50°C (±2°C) |
| tempF | °F | 32°F a 122°F |
Salida en el Monitor Serie:
text
Humedad: 45.00% | Temperatura: 23.00°C ~ 73.40°F Humedad: 44.00% | Temperatura: 23.00°C ~ 73.40°F Humedad: 46.00% | Temperatura: 23.50°C ~ 74.30°F
Esquema de conexión:
DHT11 de 3 pines:
text
DHT11
┌───┐
│ │
│ ○ │ Pin 1 (VCC) -> 5V
│ ○ │ Pin 2 (DATA) -> Pin 2 de Arduino
│ ○ │ Pin 3 (GND) -> GND
└───┘
(con resistencia pull-up de 4.7kΩ a 10kΩ entre VCC y DATA)
DHT11 de 4 pines:
text
Pin 1 (VCC) -> 5V Pin 2 (DATA) -> Pin 2 de Arduino (+ resistencia pull-up 10kΩ) Pin 3 (NC) -> No conectar Pin 4 (GND) -> GND
Aplicaciones comunes:
- Estaciones meteorológicas caseras
- Sistemas de control de climatización
- Invernaderos y agricultura inteligente
- Monitoreo de humedad en museos o archivos
- Proyectos de domótica
- Sistemas de ventilación automática
Comparativa de sensores DHT:
| Característica | DHT11 | DHT22 (AM2302) |
|---|---|---|
| Precio | Bajo | Medio |
| Precisión temp | ±2°C | ±0.5°C |
| Precisión humedad | ±5% | ±2% |
| Rango temp | 0-50°C | -40 a 80°C |
| Rango humedad | 20-90% | 0-100% |
| Frecuencia muestreo | 1Hz (1 lectura/seg) | 0.5Hz (1 cada 2 seg) |
Mejoras posibles:
cpp
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// Variables para almacenar valores máximos y mínimos
float humedadMax = 0, humedadMin = 100;
float tempMax = -50, tempMin = 100;
void setup() {
Serial.begin(9600);
dht.begin();
Serial.println("=== MONITOR DHT11 ===");
Serial.println("Iniciando mediciones...");
}
void loop() {
delay(2000);
float humedad = dht.readHumidity();
float tempC = dht.readTemperature();
if (isnan(humedad) || isnan(tempC)) {
Serial.println("Error de lectura");
return;
}
// Actualizar máximos y mínimos
if (humedad > humedadMax) humedadMax = humedad;
if (humedad < humedadMin) humedadMin = humedad;
if (tempC > tempMax) tempMax = tempC;
if (tempC < tempMin) tempMin = tempC;
// Mostrar en formato tabla
Serial.println("┌─────────────────────────┐");
Serial.print ("│ Humedad: ");
Serial.print(humedad, 1);
Serial.println("% │");
Serial.print ("│ Temp: ");
Serial.print(tempC, 1);
Serial.println("°C │");
Serial.println("├─────────────────────────┤");
Serial.print ("│ Max temp: ");
Serial.print(tempMax, 1);
Serial.println("°C │");
Serial.print ("│ Min temp: ");
Serial.print(tempMin, 1);
Serial.println("°C │");
Serial.println("└─────────────────────────┘");
// Alerta de temperatura extrema
if (tempC > 35) {
Serial.println("⚠️ ¡ALERTA! Temperatura muy alta ⚠️");
} else if (tempC < 10) {
Serial.println("⚠️ ¡ALERTA! Temperatura muy baja ⚠️");
}
Serial.println();
}
Notas importantes:
- El DHT11 es lento: solo permite una lectura cada 1-2 segundos
- Usar resistencia pull-up de 4.7kΩ a 10kΩ entre DATA y VCC (obligatorio)
- Los cables largos pueden causar errores de lectura
- No sumergir el sensor en agua
- Para proyectos que requieren mayor precisión, usa DHT22 o BME280
- Si el sensor devuelve
nan, verifica las conexiones y la resistencia pull-up