Sensor de temperatura y humedad DHT11

Indice

  1. 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:

VariableUnidadRango típico DHT11
Humedad% HR20% a 90% (±5%)
tempC°C0°C a 50°C (±2°C)
tempF°F32°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ísticaDHT11DHT22 (AM2302)
PrecioBajoMedio
Precisión temp±2°C±0.5°C
Precisión humedad±5%±2%
Rango temp0-50°C-40 a 80°C
Rango humedad20-90%0-100%
Frecuencia muestreo1Hz (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