tutoriales.com

Sistema IoT de Mitigación de Humedad en Armarios Inteligentes con ESP32

Descubre paso a paso cómo integrar un sensor DHT22 y módulos Peltier o ventiladores a un microcontrolador ESP32 para crear un sistema automatizado que mantenga tus prendas libres de humedad, enviando alertas directamente a tu Móvil mediante MQTT.

Intermedio8 min de lectura15 views
Reportar error

Introducción 🧥

La humedad excesiva en espacios cerrados como armarios, vestidores o roperos es un problema silencioso pero devastador. La proliferación de hongos, la aparición de manchas de moho y el persistente olor a humedad pueden arruinar prendas valiosas en cuestión de semanas. Tradicionalmente, este problema se combate con bolsitas de gel de sílice o deshumidificadores pasivos que requieren constante supervisión y recambio manual.

En este tutorial avanzado de Internet de las Cosas (IoT), construiremos una solución inteligente y automatizada: un Sistema de Mitigación de Humedad en Armarios Inteligentes basado en ESP32. Este dispositivo no solo monitoreará en tiempo real la temperatura y la humedad relativa del interior de tu armario, sino que activará de forma autónoma sistemas de ventilación o celdas termoeléctricas (Peltier) cuando los niveles superen el umbral seguro, además de reportar el estado a un broker MQTT para visualizarlo en cualquier lugar.

💡 Consejo: Este proyecto es ideal tanto para armarios empotrados en habitaciones con alta humedad ambiental como para guardar ropa de temporada durante largos periodos.

Materiales y Componentes Necesarios 🛠️

Para llevar a cabo este proyecto con éxito, necesitarás reunir los siguientes componentes de hardware y herramientas de desarrollo software.

ComponenteCantidadDescripciónNivel de Requisito
------------
ESP32 NodeMCU1Microcontrolador con WiFi y Bluetooth integrados.Obligatorio
Sensor DHT22 / AM23021Sensor digital de alta precisión para temperatura y humedad.Obligatorio
------------
Módulo Relé de 2 Canales (5V)1Para controlar cargas de mayor potencia (ventiladores o Peltier).Obligatorio
Mini Ventilador DC 5V/12V1 o 2Extractor de aire para renovar el volumen dentro del armario.Obligatorio
------------
Fuente de Alimentación 5V/2A1Para alimentar de forma estable el ESP32 y los relés.Recomendado
Cables de conexión Jumper1 setMacho-macho y macho-hembra para el prototipo.Obligatorio
VCC (5V/3.3V) GND Fuente Externa 5V DC ESP32 G4 G16 G17 VIN GND DHT22 Sensor Clima Relé 2CH Control Carga Data (G4) IN1 (G16) IN2 (G17)

Arquitectura del Sistema IoT 🌐

Antes de escribir código o conectar cables, es fundamental comprender cómo se comunican los diferentes elementos de nuestro sistema inteligente. La arquitectura se divide en tres capas principales: la capa de adquisición de datos (sensores), la capa de procesamiento y control (ESP32) y la capa de visualización y conectividad (MQTT/Broker).

Paso 1: Adquisición - El sensor DHT22 lee la humedad relativa y la temperatura cada 10 segundos.
Paso 2: Evaluación Local - El ESP32 compara el valor medido con el límite máximo configurado (ej. 60% HR).
Paso 3: Actuación - Si supera el límite, activa los ventiladores mediante el relé y publica una alerta.
Paso 4: Reporte Cloud - Envía los datos telemétricos vía MQTT al servidor o plataforma de monitoreo.

Configuración del Entorno de Desarrollo y Librerías 💻

Utilizaremos el IDE de Arduino para programar nuestro ESP32 debido a su versatilidad y la enorme cantidad de librerías disponibles para IoT.

Instalación de Dependencias

Abre tu Arduino IDE y asegúrate de tener instalado el soporte para placas ESP32. A continuación, instala las siguientes librerías desde el Gestor de Librerías (Ctrl + Shift + I):

  • DHT sensor library (by Adafruit)
  • Adafruit Unified Sensor
  • PubSubClient (para la gestión del protocolo MQTT)
⚠️ Advertencia: Verifica que la versión de la librería DHT de Adafruit esté actualizada para evitar conflictos de lectura en el ESP32.

Código Fuente del Proyecto 📄

A continuación se presenta el código completo listo para compilar y cargar en tu ESP32. Asegúrate de modificar las credenciales de tu red Wi-Fi y los datos de tu broker MQTT.

#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>

// Definición de pines y constantes
#define DHTPIN 4          // Pin GPIO donde está conectado el DHT22
#define DHTTYPE DHT22     // Tipo de sensor
#define RELAY_PIN 16      // Pin GPIO para controlar el relé del ventilador

const char* ssid = "TU_SSID_WIFI";
const char* password = "TU_PASSWORD_WIFI";
const char* mqtt_server = "broker.hivemq.com";

WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(DHTPIN, DHTTYPE);

unsigned long lastMsg = 0;
const long interval = 10000; // Intervalo de lectura en milisegundos
float humedadLimite = 65.0;  // Umbral de humedad para activar el sistema

void setup_wifi() {
  delay(10);
  Serial.println();
  Serial.print("Conectando a ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi conectado");
  Serial.println("Dirección IP: ");
  Serial.println(WiFi.localIP());
}

void reconnect() {
  while (!client.connected()) {
    Serial.print("Intentando conexión MQTT...");
    String clientId = "ESP32SmartCloset-";
    clientId += String(random(0xffff), HEX);
    if (client.connect(clientId.c_str())) {
      Serial.println("conectado");
      client.publish("smartcloset/status", "Sistema Online");
    } else {
      Serial.print("falló, rc=");
      Serial.print(client.state());
      Serial.println(" intentando de nuevo en 5 segundos");
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, HIGH); // Apagado por lógica inversa común en módulos relé
  
  dht.begin();
  setup_wifi();
  client.setServer(mqtt_server, 1883);
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  unsigned long now = millis();
  if (now - lastMsg > interval) {
    lastMsg = now;

    float h = dht.readHumidity();
    float t = dht.readTemperature();

    if (isnan(h) || isnan(t)) {
      Serial.println("Error al leer del sensor DHT22!");
      return;
    }

    // Publicar datos en tópicos MQTT
    char msgH[8];
    dtostrf(h, 1, 2, msgH);
    client.publish("smartcloset/humidity", msgH);

    char msgT[8];
    dtostrf(t, 1, 2, msgT);
    client.publish("smartcloset/temperature", msgT);

    Serial.print("Humedad: ");
    Serial.print(h);
    Serial.print("%  Temperatura: ");
    Serial.print(t);
    Serial.println("°C");

    // Lógica de control de humedad
    if (h > humedadLimite) {
      digitalWrite(RELAY_PIN, LOW); // Enciende ventilador (lógica inversa)
      client.publish("smartcloset/action", "Ventilador ENCENDIDO por exceso de humedad");
      Serial.println("¡Alerta! Humedad alta. Ventilador activado.");
    } else {
      digitalWrite(RELAY_PIN, HIGH); // Apaga ventilador
      client.publish("smartcloset/action", "Ventilador APAGADO (Niveles normales)");
      Serial.println("Humedad en niveles seguros. Ventilador apagado.");
    }
  }
}

Calibración y Pruebas del Sistema 🧪

Una vez cargado el código en el ESP32, es momento de verificar el correcto funcionamiento operativo mediante pruebas controladas:

  1. Monitoreo Serial: Abre el monitor serie a 115200 baudios y comprueba que se conecte correctamente a la red Wi-Fi y al broker MQTT.
  2. Prueba de Sensor: Respira cerca del sensor DHT22 para simular un incremento repentino de humedad. Observa cómo el valor sube en la consola.
  3. Verificación de Actuadores: Si la lectura supera el 65% (o el umbral que hayas configurado), el relé debe activarse haciendo clic audible y encendiendo el ventilador conectado.
🔥 Importante: Si utilizas componentes de corriente alterna (como un extractor de 220V), extrema las precauciones con el aislamiento eléctrico o prioriza siempre el uso de ventiladores de corriente continua (DC) de 5V o 12V.

Preguntas Frecuentes (FAQ) 🙋‍♂️

¿Puedo integrar este sistema con Home Assistant o Node-RED?¡Absolutamente! Al utilizar el protocolo MQTT, puedes suscribirte fácilmente a los tópicos `smartcloset/humidity`, `smartcloset/temperature` y `smartcloset/action` desde cualquier plataforma domótica basada en código abierto como Home Assistant para crear automatizaciones avanzadas y gráficos históricos.
¿Qué pasa si se pierde la conexión Wi-Fi?El ESP32 continuará ejecutando su bucle principal de control localmente basándose en la última lectura del sensor, asegurando que la mitigación de humedad no se detenga aunque falle la red inalámbrica.

Conclusión y Próximos Pasos 🎉

¡Felicidades! Has desarrollado con éxito un Sistema IoT de Mitigación de Humedad en Armarios Inteligentes utilizando un ESP32. No solo has integrado sensores y actuadores físicos, sino que has implementado conectividad en la nube mediante MQTT para asegurar la protección a largo plazo de tus prendas más preciadas.

Como próximos pasos, te animamos a explorar la adición de una pantalla OLED I2C para ver los datos de forma local en el exterior del armario, o integrar notificaciones push mediante servicios como Telegram Bot API.

Tutoriales relacionados

Comentarios (0)

Aún no hay comentarios. ¡Sé el primero!