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

Controlador de calefacción multizona

Componentes y suministros

Arduino UNO
Utilice un Mega si necesita controlar más de 5 zonas (incluida la zona extra para el resto de su casa sin calefacción por suelo radiante)
× 1
Tablero de relés de 5 voltios de 8 canales Keyes
Necesita una placa con 4 relés para controlar 2 zonas de piso (1 bomba, 1 CV, 2 válvulas ), Se necesita un relevo adicional por cada zona de piso adicional
× 1
Actuador termoeléctrico lineal pequeño Honeywell MT8-230-NC (230 V CA )
Este es solo uno de los muchos posibles actuadores disponibles; Necesita 1 actuador (válvula) por grupo de unidades de piso
× 1

Acerca de este proyecto

Construí este dispositivo porque mi cocina estaba demasiado caliente o demasiado fría con un solo termostato en mi vida. Los controladores de calefacción multizona comerciales (como EvoHome) son muy costosos. Este programa captura la inteligencia de estos costosos sistemas, alojados en una simple placa Arduino Uno. Esto resolvió completamente mi problema.

Aspectos destacados / características:

  • Solo necesita configurar la fijación y el número de zonas
  • Un Arduino Uno simple puede controlar hasta 5 zonas de unidades de piso
  • Con un Arduino Mega, el número de zonas es casi ilimitado

Los controles del programa proporcionados:

  • La bomba de la unidad de piso
  • Agrega todas sus zonas como un solo termostato al calentador central
  • Válvulas utilizadas para abrir / cerrar zonas
  • Un temporizador Watch Dog para garantizar un funcionamiento sólido como una roca

Permite calefacción individual por zona:

  • Por zona, un termostato para detectar la solicitud de calefacción
  • Por zona, un relé para controlar una o más válvulas para abrir / cerrar los grupos de unidades de piso de esa zona
  • Una habitación con varios grupos de unidades de piso se puede considerar como una zona de calefacción (conecte las válvulas en paralelo al relé de zona)
  • Esto no solo es más conveniente, sino que también ahorra energía y las habitaciones ya no se calientan demasiado

Controla la bomba de la unidad de suelo:

  • Básicamente, solo hace funcionar la bomba cuando se necesita para calentar. Esto ya le permite ahorrar entre 100 y 200 euros de electricidad al año (en comparación con hacer funcionar la misma bomba las 24 horas del día, los 7 días de la semana (80 vatios equivalen a 2 kW por hora por día =0,50 euros por día)
  • Activa la bomba de la unidad de piso al menos una vez cada 36 horas, durante 8 minutos si no hubo ninguna solicitud de calefacción (verano)
  • Evita que la bomba funcione sin abrir primero las válvulas; Teniendo en cuenta que estas válvulas necesitan de 3 a 5 minutos

Opcionalmente, también puede controlar el resto de su casa (habitaciones sin calefacción por suelo radiante):

  • Aquí normalmente tendrá perillas de termostato en sus radiadores; por lo que solo se calentarán las habitaciones que estén frías
  • Simplemente agregue un termostato en las habitaciones que desea controlar. Conecte estos termostatos en paralelo a la entrada No_Zone

Notas finales:

No es necesario controlar todas las zonas; solo las zonas que se calientan o permanecen demasiado frías (de lo contrario, use las perillas ajustables manualmente en la unidad del piso)

Decidí explícitamente no conectar el dispositivo a Internet:

  • Aumentaría el riesgo de mal funcionamiento (tiene que ser sólido como una roca)
  • Puede usar termostatos inteligentes para controlar su casa. Este controlador no ofrece nada adicional para adaptarse de forma remota

Código

  • ProjectCV.ino
  • Devices.h
ProjectCV.ino C / C ++
 / * * Controlador de calefacción de unidad de piso para múltiples habitaciones / zonas v1.0 * * Copyright:la licencia pública general GNU versión 3 (GPL-3.0) por Eric Kreuwels, 2017 * Créditos:Peter Kreuwels por definir todos los casos de uso que debe tenerse en cuenta * * Aunque esta configuración ya se ejecuta durante más de un año completo para mi planta baja, no soy responsable de ningún error en el código * Puede usarse como una buena base para sus propias necesidades, y debería ser probado antes de usar * * Aspectos destacados / características:* - Solo necesita configurar la fijación y el número de zonas * - Un Arduino Uno simple puede controlar hasta 5 zonas de la unidad de piso * - Con un Arduino Mega, el número de zonas es casi ilimitado * - Los controles de Programa provistos:* - la bomba de la unidad de piso * - Agrega todas sus zonas como un solo termostato al calentador CV * - Válvulas para abrir / cerrar zonas * - Permite calefacción individual por zona; * - Por zona, un termostato para detectar la solicitud de calefacción * - Por zona, un relé para controlar una o más válvulas para abrir / cerrar los grupos de unidades de piso de esa zona * - Una habitación con varios grupos de unidades de piso se puede considerar como una calefacción Zona (Conecte las válvulas en paralelo al relé de zona) * - Esto no solo es más conveniente, sino que ahorra energía y las habitaciones ya no se calientan demasiado * - Controla la bomba de la unidad de piso * - Básicamente, solo hace funcionar la bomba cuando Necesario para calentar. Esto ya le permite ahorrar entre 100 y 200 euros de electricidad al año, * en comparación con el funcionamiento de la misma bomba las 24 horas del día, los 7 días de la semana (80 vatios equivalen a 2 kW por hora =0,50 euros por día) * - Activa la bomba de la unidad de suelo al menos una vez cada 36 horas, durante 8 minutos si no hubo ninguna solicitud de calefacción (verano) * - Evita que la bomba funcione sin abrir primero las válvulas; Teniendo en cuenta que estas válvulas necesitan de 3 a 5 minutos * - Opcionalmente, también puede controlar el resto de su casa (habitaciones sin calefacción por suelo radiante) * - Aquí normalmente tendrá perillas de termostato en sus radiadores; para que solo se calienten las habitaciones que estén frías * - Simplemente agregue un termostato en las habitaciones que desea controlar. Conecte estos termostatos en paralelo a la entrada No_Zone * - Notas finales:* - No todas las zonas necesitan ser controladas; solo las zonas que se calientan o permanecen demasiado frías con * perillas ajustadas manualmente en la unidad del piso * / # incluyen  // para Watchdog // ADVERTENCIA:FAST_MODE es para propósitos de prueba / evaluación / depuración ( el circuito funciona 50 veces más rápido) // Tenga cuidado al usar FAST_MODE con una bomba de piso real, ya que puede dañarse con las válvulas cerradas // Las válvulas necesitan un mínimo de 3 minutos para abrirse. En FAST_MODE, el programa no espera lo suficiente antes de iniciar la bomba // #define FAST_MODE // ejecución 50 veces más rápida; ¡considere desconectar su CV / bomba real! // En funcionamiento normal, el bucle se ejecuta 10 veces por segundo; por lo que 10 conteos / segundo (600 representa aproximadamente 1 minuto) #define VALVE_TIME 3000L // 5 minutos para abrir / cerrar una válvula (en el sitio seguro; toma típicamente de 3 a 5 minutos) #ifdef FAST_MODE # define PUMP_MAINTENANCE_TIME 108000L // Para evaluación , activa la operación de mantenimiento de la bomba de la unidad de piso una vez cada 4 minutos (marca de tiempo 3 horas) # else # define PUMP_MAINTENANCE_TIME 1300000L // Activa la operación de mantenimiento de la bomba de la unidad de piso una vez cada 36 horas. Necesario para mantener la bomba funcionando mode) // Esto permite una mayor disipación del calor en el piso (normalmente toma de 15 a 30 minutos) #include "./Devices.h" // válvulas, bombas, clases de termostato (use las constantes definidas arriba) struct Zone {String name; Válvula de válvula; Termostato termostato;}; /////////////////////////////////////////////// ///////// BLOQUE DE CONFIGURACIÓN // Configure / reordene su fijación a su gusto (Este es mi cableado en un Arduino Uno); // Nota:los pines 1 y 2 aún están libres para agregar una zona adicional # define HEATER_PIN 4 // salida a un relé que está cableado con la entrada del termostato de su sistema de calefacción # define FU_PUMP_PIN 5 // salida a un relé que cambia el Unidad de piso Bomba # define LIVING_VALVE 7 // Zona 1:salida a un relé que controla la (s) válvula (s) #define KITCHEN_VALVE 6 // Zona 2:salida a un relé que controla la (s) válvula (s) #define DINING_VALVE 3 // Zona 3:salida a un relé que controla la (s) válvula (s) #define LIVING_THERMO 8 // Zona 1; entrada cableada al termostato en el living # define KITCHEN_THERMO 9 // Zona 2; entrada cableada al termostato de la cocina # definir DINING_THERMO 11 // Zona 3; entrada cableada al termostato en el comedor # definir NO_ZONE_THERMO 10 // Opcionalmente:termostatos en habitaciones sin calefacción por suelo radiante # definir HEATING_LED 12 // Encendido cuando calienta, Alterna durante enfriamiento, está Apagado en modo inactivo # define INDICATION_LED 13 // Alterna el encendido LED de placa para indicar que la placa funciona; se puede quitar fácilmente para liberar un pin IO adicional !! // Configure las Zonas / habitaciones de la unidad de piso. Cada zona / habitación posee un nombre, válvula y termostato:#define NR_ZONES 3Zone Zones [NR_ZONES] ={{"Living Room", Valve (LIVING_VALVE, "Living Valve"), Termostato (LIVING_THERMO, "Living Thermostat")}, { "Área de cocina", Válvula (KITCHEN_VALVE, "Válvula de cocina"), Termostato (KITCHEN_THERMO, "Termostato de cocina")}, {"Comedor", Válvula (DINING_VALVE, "Válvula de comedor"), Termostato (DINING_THERMO, "Termostato de comedor" )}}; // FIN DEL BLOQUE DE CONFIGURACIÓN ///////////////////////////////////////// /////////// Algunos dispositivos fijos:LED iLED (INDICATION_LED, "LED indicador"); // se puede quitar si se queda sin IO'sLED hLED (HEATING_LED, "LED de calefacción"); Manipulador CV (HEATER_PIN, "CV Heater"); Pump FUPump (FU_PUMP_PIN, "Floor Unit Pump"); Termostato ZonelessThermo (NO_ZONE_THERMO , "Termostato sin zona"); // Para el resto de la casa, no relacionado con la unidad de piso zonevoid printConfiguration () {Serial.println ("------ Configuración de la placa:---------"); iLED.Print (); hLED.Print (); CV.Print (); FUPump.Print (); ZonelessThermo.Print (); para (int i =0; i  0) {cooldownCount--; } return checkCoolDownNeeded (); } bool checkCoolDownNeeded () {return (cooldownCount> 0); } void Print () {switch (_State) {caso inactivo:Serial.print ("inactivo"); descanso; caso en:Serial.print ("en"); descanso; enfriamiento del caso:Serial.print ("enfriamiento"); descanso; }}}; // El estado global machineState CVState; void setup () {// inicializaciones Serial.begin (115200); printTimeStamp (); Serial.print (":"); # ifdef FAST_MODE Serial.println ("¡El controlador de zona CV se inició en el modo de prueba! \ N" "- El tiempo de la placa es aproximadamente 50 veces más rápido \ n" "- El ciclo de mantenimiento de la bomba se ejecuta cada 3 horas en lugar de una vez por 36 horas "); # else Serial.println (" CV Zone Controller iniciado. Marcas de tiempo (dd:hh:mm:ss) "); # endif Serial.println (" - Formato de marcas de tiempo (dd:hh:mm:ss) "); printConfiguration (); wdt_enable (WDTO_1S); // Perro guardián:reinicia la placa después de un segundo, si no se recibe "palmadita al perro"} void loop () {#ifdef FAST_MODE delay (2); // 50 veces más rápido, por lo que los minutos se convierten en segundos para fines de depuración; por lo que cada recuento de enfriamiento o inactividad es de 0.002 segundos # si no, demora (100); // Funcionamiento normal:se repite aproximadamente 10 veces por segundo; por lo que cada recuento de enfriamiento o inactividad es de 0.1 segundos # endif // Use el LED de indicación para mostrar que la placa está activa iLED.Alternate (); // una vez por bucle () la bomba y las válvulas necesitan opdate hteir administatrion FUPump.Update (); for (int i =0; i  permanecer en este estado si (FloorPumpingAllowed ()) {FUPump.On (); } else {FUPump.Off (); }} else if (CVState.checkCoolDownNeeded ()) {// Continuar en estado de enfriamiento para mantener la bomba funcionando por un tiempo CVState (State ::cooldown); } else {// salta el tiempo de reutilización de la unidad de suelo, vuelve a inactivo CVState (State ::inactivo); }} void coolDownProcessing () {hLED.Alternate (); if (HeatingRequested ()) {// devuelve verdadero cuando uno de los termostatos está cerrado CVState (State ::on); } else {if (CVState. whileCoolDownNeeded ()) {if (FloorPumpingAllowed ()) {FUPump.On (); } else {FUPump.Off (); }} else {CVState (Estado ::inactivo); }}} void idleProcessing () {if (HeatingRequested ()) {// devuelve verdadero cuando uno de los termostatos está cerrado CVState (State ::on); } else {// Durante el período de inactividad, esta verificación activará la bomba de la unidad de piso durante 8 minutos cada 36 horas para mantenerlas operativas if (FUPump.doMaintenanceRun ()) {if (FUPump.IsOff ()) {if (allValvesOpen () ==false) {// comienza a abrir solo una vez printTimeStamp (); Serial.println (":Iniciar ciclo diario para la bomba de la unidad de piso; abrir válvulas:"); allValvesOn (); } if (FloorPumpingAllowed ()) {// esto toma aproximadamente 5 minutos después de activar las válvulas (6 segundos en modo de prueba) printTimeStamp (); Serial.println (":Iniciar el ciclo diario para la bomba de la unidad de piso; iniciar la bomba"); FUPump.On (); }}} else if (FUPump.IsOn ()) {// no se necesita mantenimiento. Así que detenga la bomba si todavía se está ejecutando printTimeStamp (); Serial.println (":detener el ciclo diario de la bomba de la unidad de piso; detener la bomba y cerrar las válvulas"); FUPump.Off (); allValvesOff (); }}} /////////////////////////////////////////////////// /////////////////////// Métodos auxiliares utilizados por los controladores estatales ////////////////////// ///////////////////// void allValvesOff () {for (int i =0; i  
Dispositivos.h C / C ++
 // Clases auxiliares para dispositivos IOextern void printTimeStamp (); // definido en el archivo ino principal // IODevice:clase base para todos los dispositivos IO; necesita specializationclass IODevice {// vars protected:bool _IsOn; int _Pin; String _Name; // constructor public:IODevice (int pin, String name) {_IsOn =false; _Pin =pin; _Name =nombre; } // métodos virtual bool IsOn () =0; // resumen virtual bool IsOff () {// predeterminado para todos return! IsOn (); } vacío DebugPrint () {printTimeStamp (); Serial.print (":"); Impresión(); } void Print () {Serial.print (_Name); Serial.print ("en pin ("); Serial.print (_Pin); if (_IsOn) Serial.println (") =Activado"); else Serial.println (") =Desactivado"); }}; // Termostato:lee una entrada digital agregando algo de sobrepresión dender class Thermostat:public IODevice {// vars private:int _Counter; // se usa para evitar la lectura de conmutación intermitente (dender) // constructor public:Thermostat (int pin, String name):IODevice (pin, name) {_Counter =0; pinMode (_Pin, INPUT_PULLUP); } // métodos virtual bool IsOn () {if (digitalRead (_Pin) ==HIGH &&_IsOn ==true) // abrir contacto mientras está encendido {if (_Counter ++> 5) // solo actuar después de 5 veces la misma lectura { _IsOn =falso; DebugPrint (); _Contador =0; }} else if (digitalRead (_Pin) ==LOW &&_IsOn ==false) // contacto cerrado mientras está apagado {if (_Counter ++> 5) // solo actúa después de 5 veces la misma lectura {_IsOn =true; DebugPrint (); _Contador =0; }} más {_Counter =0; } return _IsOn; }}; // Manipulador:el dispositivo de trabajo más básico en una clase de salida digital Manipulador:public IODevice {// vars private:// constructor public:Manipulator (int pin, String name):IODevice (pin, name) {pinMode ( _Pin, SALIDA); escritura digital (_Pin, ALTA); } // métodos void On () {if (_IsOn ==false) {_IsOn =true; escritura digital (_Pin, BAJA); onSwitch (); }} void Off () {if (_IsOn ==true) {_IsOn =false; escritura digital (_Pin, ALTA); onSwitch (); }} virtual void onSwitch () {// disparador para claases hijo; cambio de estado activado / desactivado DebugPrint (); } virtual bool IsOn () {return _IsOn; }}; // Válvula:controla válvulas termostáticas en una salida digital. // Estas válvulas reaccionan lentamente (3-5 minutos) por lo que esta clase agrega esta conciencia de transición // loop () debe llamar a Update () para realizar un seguimiento de si la válvula está completamente abierta o cerrada class Valve:public Manipulator {private:long transitionCount; // constructor public:Valve (int pin, String name):Manipulator (pin, name) {transitCount =0; } bool ValveIsOpen () {return (IsOn () &&(transitCount> =VALVE_TIME)); // al menos 5 minutos en estado de encendido} // ¡¡¡Ejecutar una vez por pasada en el bucle de boceto () !!! Void Update () {if (IsOn ()) {if (transiciónCount  0) transiciónCount--; }}}; // Bomba:es necesario activar una bomba varias veces a la semana para que sigan funcionando. // loop () debe llamar a Update () para realizar un seguimiento cuando se necesita una activación de mantenimiento class Pump:public Manipulator {// las válvulas reaccionan lentamente (3-5 minutos) por lo que esta clase agrega esta conciencia de transición private:long counter; bool doMaintenance; // constructor public:Pump (int pin, String name):Manipulator (pin, name) {contador =0; doMaintenance =falso; } bool doMaintenanceRun () {return doMaintenance; } virtual void onSwitch () {// cambio en el estado de encendido / apagado Manipulator ::onSwitch (); contador =0; } // ejecuta este método cada pasada en loop () void Update () {if (IsOn ()) {if (contador  250) #else if (counter ++> 5) #endif {/ / contador de LED de alternancia =0; si (IsOn ()) Off (); else On (); }}}; 

Esquemas

Cableado detallado de periféricos (bomba, válvulas, termostatos, LED) Ejemplo de cableado de varios controladores 'en cascada'. Un controlador por unidad de piso Algunos registros reales del Serial Monitor para comprender la funcionalidad. Las marcas de tiempo muestran, por ejemplo, una demora de 5 minutos entre la apertura de las válvulas y el encendido de la bomba de la unidad de piso. logexample_fTczkAa0tf.txtInspirational

Proceso de manufactura

  1. Controlador de potencia PWM
  2. Sistema de calefacción solar
  3. Supervisión de mi caldera de calefacción central
  4. Mantenimiento de una fregadora de suelos
  5. Controlador DMX operado por la web
  6. Dispositivo de automatización de tareas de videojuegos
  7. Controlador de juego Arduino
  8. Unopad - Controlador MIDI Arduino con Ableton
  9. Controlador de pantalla fluorescente al vacío
  10. Conecte su calefacción central a Arduino
  11. Controlador Arduino Home activado por Alexa