Sensor de Temperatura y Humedad DHT22

Indice.

  1. 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ísticaDHT11DHT22 (AM2302)
PrecioBajo ($3-5)Medio ($8-12)
Precisión temperatura±2°C±0.5°C ✅
Precisión humedad±5%±2% ✅
Rango temperatura0 a 50°C-40 a 80°C ✅
Rango humedad20 a 90%0 a 100% ✅
Resolución1°C / 1%0.1°C / 0.1% ✅
Frecuencia muestreo1 Hz (1 vez/seg)0.5 Hz (1 vez/2 seg)
TamañoPequeñoMá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