.
Sensor de Temperatura y Humedad DHT22
Indice.
- sensor DHT22 y arduino
1.Sensor DHT22 y arduino

#include "DHT.h" // Incluir la librería del sensor DHT
#define DHTPIN 2 // Pin digital donde está conectado el sensor DHT
#define DHTTYPE DHT22 // Tipo de sensor: DHT22 (también conocido como AM2302)
// 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 DHT22 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");
}
}
Diferencia principal con el DHT11:
Este código usa DHT22 en lugar de DHT11, que es un sensor más preciso y con mayor rango de medición.
Comparativa DHT11 vs DHT22:
| Característica | DHT11 | DHT22 (AM2302) |
|---|---|---|
| Precio | Bajo ($3-5) | Medio ($8-12) |
| Precisión temperatura | ±2°C | ±0.5°C ✅ |
| Precisión humedad | ±5% | ±2% ✅ |
| Rango temperatura | 0 a 50°C | -40 a 80°C ✅ |
| Rango humedad | 20 a 90% | 0 a 100% ✅ |
| Resolución | 1°C / 1% | 0.1°C / 0.1% ✅ |
| Frecuencia muestreo | 1 Hz (1 vez/seg) | 0.5 Hz (1 vez/2 seg) |
| Tamaño | Pequeño | Más grande |
Salida en el Monitor Serie (DHT22):
text
Humedad: 54.30% | Temperatura: 23.40°C ~ 74.12°F Humedad: 54.20% | Temperatura: 23.50°C ~ 74.30°F Humedad: 54.40% | Temperatura: 23.40°C ~ 74.12°F
(Nota la mayor precisión con decimales)
Esquema de conexión:
DHT22 (3 pines – versión simple):
text
DHT22
┌───┐
│ │
│ ○ │ Pin 1 (VCC) -> 5V
│ ○ │ Pin 2 (DATA) -> Pin 2 de Arduino
│ ○ │ Pin 3 (GND) -> GND
└───┘
(resistencia pull-up de 4.7kΩ a 10kΩ entre DATA y VCC)
DHT22 (4 pines – versión estándar):
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 donde DHT22 es mejor opción:
- Meteorología profesional (mayor precisión y rango)
- Invernaderos de precisión (control climático exacto)
- Almacenes refrigerados (temperaturas bajo cero)
- Proyectos de investigación científica
- Sistemas HVAC avanzados
- Estaciones meteorológicas exteriores (soporta temperaturas bajo cero)
Mejoras para DHT22:
cpp
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Variables para estadísticas
float lecturasHumedad[10];
float lecturasTemp[10];
int indice = 0;
void setup() {
Serial.begin(9600);
dht.begin();
Serial.println("=== SENSOR DHT22 - MONITOR DE ALTA PRECISIÓN ===");
}
void loop() {
delay(2000);
float humedad = dht.readHumidity();
float tempC = dht.readTemperature();
if (isnan(humedad) || isnan(tempC)) {
Serial.println("⚠️ Error de lectura - verificando conexiones...");
return;
}
// Guardar lecturas para promedio móvil
lecturasHumedad[indice] = humedad;
lecturasTemp[indice] = tempC;
indice = (indice + 1) % 10;
// Calcular promedios
float sumaH = 0, sumaT = 0;
for(int i = 0; i < 10; i++) {
sumaH += lecturasHumedad[i];
sumaT += lecturasTemp[i];
}
float promH = sumaH / 10;
float promT = sumaT / 10;
// Mostrar con formato profesional
Serial.println("┌─────────────────────────────────────┐");
Serial.print ("│ 📊 Humedad: ");
Serial.print(humedad, 1);
Serial.print("%");
Serial.print(" (promedio: ");
Serial.print(promH, 1);
Serial.println("%) │");
Serial.print ("│ 🌡️ Temp: ");
Serial.print(tempC, 1);
Serial.print("°C");
Serial.print(" (promedio: ");
Serial.print(promT, 1);
Serial.println("°C) │");
// Calcular punto de rocío (aproximado)
float puntoRocio = tempC - ((100 - humedad) / 5);
Serial.print ("│ 💧 Punto rocío: ");
Serial.print(puntoRocio, 1);
Serial.println("°C │");
// Sensación térmica (índice de calor simplificado)
float sensacion = tempC;
if (tempC > 26 && humedad > 40) {
sensacion = tempC + (humedad - 40) * 0.1;
}
Serial.print ("│ 🔥 Sensación: ");
Serial.print(sensacion, 1);
Serial.println("°C │");
Serial.println("└─────────────────────────────────────┘");
Serial.println();
}
Notas importantes para DHT22:
- Resistencia pull-up OBLIGATORIA (4.7kΩ – 10kΩ) – sin ella no funciona
- Intervalo mínimo de lectura: 2 segundos (no leer más rápido)
- Más caro que DHT11, pero la precisión vale la pena para proyectos serios
- Ideal para exteriores (rango -40°C a +80°C)
- Consumo ligeramente mayor que DHT11 (pero sigue siendo bajo)
- Mejor estabilidad a largo plazo
¿Cuál elegir?
- DHT11: Proyectos educativos, presupuesto ajustado, interiores
- DHT22: Proyectos profesionales, exteriores, precisión requerida, temperaturas extrema