Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Sistema de Ventilación Inteligente para Sótanos: Control de Humedad con Arduino

Componentes y suministros

ComponenteDescripciónCantidad
Arduino Nano R3 Controlador principal. 1
Expansor IO Interfaz I2C para sensores y actuadores. 1
Paquete Expansor IO Incluye módulos necesarios. 1

Aplicaciones y servicios

Sobre el proyecto

Características

Sistema de Ventilación Inteligente para Sótanos: Control de Humedad con Arduino

Lista completa de materiales

Diagrama de cableado

Sistema de Ventilación Inteligente para Sótanos: Control de Humedad con Arduino

Pantalla OLED

Muestra temperatura, humedad relativa/absoluta interior/exterior, estado ventilador y versión.

Sistema de Ventilación Inteligente para Sótanos: Control de Humedad con Arduino

¿Por qué usar Expansor IO?

Construcción del sistema

  1. Conecta Arduino Nano al Expansor IO y programa con el código adjunto. El header de 6 pines es puerto serie debug (no necesario en instalación final).
  2. Cambia la dirección ONEWIRE_TO_I2C_ROM a la de tu módulo 1-Wire a I2C.
  3. Conecta ventiladores a 110VAC.
  4. Perfora caja para prensacables PG7 (12V entrada) y PG9 (sensores/ventiladores).
  5. Instala ventiladores en rejilla de extracción (hacia fuera). Asegura rejillas de entrada abiertas en lado opuesto.
  6. Pasa cable sensor exterior por acceso existente, alejado de obstáculos. Verifica lecturas con partes meteorológicos locales.
  7. Conecta sensores a jacks keystone y monta en interior (ubicación central o zona crítica).
  8. Une cables RJ11 50ft a sensores y lleva a punto de acceso para caja de control.
  9. Ensambla todo en caja estanca con cinta doble cara y espuma. Prueba desconectando Arduino del expansor y controlando relé manualmente desde PC.

Actualización 20/03/2019

Tras meses funcionando en videosanitario, bajó humedad relativa de >95% (fuga calentador) a <50%. Sistema robusto.

Cambio a pantalla SH1106 1.3" (más legible). Cambio trivial en código: ST10 → ST13.

Actualización 12/09/2019

Versión 1.1: solucionado arranque en frío con OLED en blanco. Sigue ventilando el videosanitario.

Código: Sistema Ventilación Sótano/Video Sanitario v1.1

/* IO Expander * Basement/Crawlspace Ventilation System v1.1 */
#include <math.h>
#include <SoftwareSerial.h>
#include <avr/wdt.h>
#include "IOExpander.h"

#define FAHRENHEIT
#define ONEWIRE_TO_I2C_ROM "i4s71"
#define INIT_OLED "st13;si;sc;sd"
#define HUMIDITY_SENSOR_INSIDE "s6t1"
#define HUMIDITY_SENSOR_OUTSIDE "s8t1"
#define FAN_ON "r1o"
#define FAN_OFF "r1f"
#define ABSOLUTE_DELTA_FAN_ON 1.0
#define ABSOLUTE_DELTA_FAN_OFF 0.5
#define OUTSIDE_RELATIVE_FAN_ON 88
#define OUTSIDE_RELATIVE_FAN_OFF 90
#define MINIMUM_TEMPERATURE 15
#define FAN_ON_TIME (20*60*1000L)
#define FAN_OFF_TIME (20*60*1000L)
#define SERIAL_TIMEOUT 5000

struct HS { float temp; float relative; float absolute; bool error; };

int led = 13;
bool init_oled = true;
long ontime, offtime;

#ifdef FAHRENHEIT
#define C2F(temp) CelsiusToFahrenheit(temp)
float CelsiusToFahrenheit(float celsius) { return ((celsius*9)/5)+32; }
#else
#define C2F(temp) (temp)
#endif

void SerialPrint(const char* str, float decimal, char error) {
  Serial.print(str);
  if (error) Serial.print(F("NA")); else Serial.print(decimal, 1);
}

float AbsoluteHumidity(float temp, float relative) {
  // Fórmula Buck (1981)
  return (6.1121 * pow(2.718281828, (17.67 * temp) / (temp + 243.5)) * relative * 18.01534) / ((273.15 + temp) * 8.21447215);
}

void ReadHumiditySensor(HS* hs) {
  SerialCmd("sr");
  if (SerialReadFloat(&hs->temp) && SerialReadFloat(&hs->relative)) {
    hs->absolute = AbsoluteHumidity(hs->temp, hs->relative);
    hs->error = false;
  } else hs->error = true;
  SerialReadUntilDone();
}

void setup() {
  Serial.begin(115200);
  pinMode(led, OUTPUT);
  wdt_enable(WDTO_8S);
  offtime = millis() - FAN_OFF_TIME;
}

void loop() {
  HS inside, outside;
  static bool fan = false, cycle = false;
  static long last_time = -(60L * 1000L);

  Serial.println();
  if (SerialReadUntilDone()) {
    if (millis() - last_time > 60L * 1000L) {
      if (SerialCmdDone(HUMIDITY_SENSOR_INSIDE)) ReadHumiditySensor(&inside);
      if (SerialCmdDone(HUMIDITY_SENSOR_OUTSIDE)) ReadHumiditySensor(&outside);

      if (inside.error || outside.error) fan = false;
      else {
        if (fan) {
          if (outside.relative >= OUTSIDE_RELATIVE_FAN_OFF || inside.absolute - outside.absolute <= ABSOLUTE_DELTA_FAN_OFF)
            cycle = fan = false;
          else {
            if (cycle && outside.temp <= MINIMUM_TEMPERATURE && millis() - ontime > FAN_ON_TIME) fan = false;
          }
          if (!fan) offtime = millis();
        } else {
          if (outside.relative <= OUTSIDE_RELATIVE_FAN_ON && inside.absolute - outside.absolute >= ABSOLUTE_DELTA_FAN_ON)
            cycle = fan = true;
          if (cycle && outside.temp <= MINIMUM_TEMPERATURE)
            fan = (millis() - offtime > FAN_OFF_TIME) ? true : false;
          if (fan) ontime = millis();
        }
      }

      if (fan) SerialCmdDone(FAN_ON); else SerialCmdDone(FAN_OFF);

      if (SerialCmdNoError(ONEWIRE_TO_I2C_ROM)) {
        if (init_oled) { SerialCmdDone(INIT_OLED); init_oled = false; }
        // Comandos de dibujo en OLED (omitidos por brevedad)
        SerialPrint("sf1;sa1;sd70,12,\"\"", C2F(inside.temp), inside.error);
        SerialPrint("\";sd70,30,\"\"", inside.relative, inside.error);
        SerialPrint("\";sd70,48,\"\"", inside.absolute, inside.error);
        SerialPrint("\";sd127,12,\"\"", C2F(outside.temp), outside.error);
        SerialPrint("\";sd127,30,\"\"", outside.relative, outside.error);
        SerialPrint("\";sd127,48,\"\"", outside.absolute, outside.error);
        Serial.print("\";");
        Serial.print("sf0;sa0;sd0,0,\"\"");
        if (fan) Serial.print("FAN"); else Serial.print("v1.1");
        Serial.println("\";sd");
        SerialReadUntilDone();
      } else init_oled = true;
      last_time = millis();
    }
    delay(1000);
  } else {
    digitalWrite(led, HIGH); delay(500);
    digitalWrite(led, LOW); delay(500);
    init_oled = true;
  }
  wdt_reset();
}

Esquemático

Sistema de Ventilación Inteligente para Sótanos: Control de Humedad con Arduino

Proceso de manufactura

  1. Sistema de Asistencia RFID Fiable con Arduino y Python
  2. Robot de Detección Humana con Arduino Uno: Integración de Sensores Paso a Paso
  3. Construye un Spybot controlado por Bluetooth con Arduino
  4. FlickMote: Mando IR por gestos para Smart Home
  5. TV‑B‑Gone DIY con Arduino: Mando universal para apagar cualquier TV
  6. Construye un Reloj Maestro LED Personalizado con Alarma – Visible desde 12 Metros
  7. SERENA: Sistema de Alarma Personalizado Arduino Mega 2560 con Pantalla TFT LCD Táctil
  8. Sistema automático de riego para plantas con Arduino
  9. Sistema de monitorización de incendios forestales en tiempo real con alertas SMS
  10. Sistema de control de asistencia RFID en tiempo real con Arduino y Google Sheets
  11. Entendiendo los Sistemas de Ventilación: Manteniendo el Aire Interior Fresco y Saludable