
Esquema Rápido
Termostato con Arduino: Guía Completa
Si está buscando información sobre cómo funciona un termostato y cómo puede construir su propio termostato Arduino DIY, está en el lugar correcto, ¡siga leyendo o marque esta página para más adelante!
Antes de comenzar, debo decir que he pospuesto esta publicación durante bastante tiempo, la razón principal es que no puede escribir un tutorial sobre cómo crear un termostato Arduino, porque cada unidad de HVAC es ligeramente diferente. Por esa razón, he decidido explicar cómo construí la mía con la esperanza de que algunas personas puedan inspirarse en ella.
Introducción a los termostatos
Antes de entrar en detalles sobre cómo puede abordar la construcción de un termostato Arduino de bricolaje, quiero guiarlo a través de los conceptos básicos de los diferentes tipos de termostatos y cómo funcionan, si esto es demasiado básico para usted, pase a la parte de construcción.
Definición de termostato
Sé que esto es muy básico, pero necesitaba comenzar con algo… Hablando en términos generales, un termostato es un dispositivo que detecta la temperatura y toma medidas para elevarla o disminuirla hasta que esté lo más cerca posible del punto de ajuste o temperatura objetivo. Aunque esta publicación solo se enfocará en máquinas HVAC, hay toneladas de sistemas que requieren un termostato: un calentador de agua, un horno, etc.
En caso de que no lo supiera (yo no lo sabía), HVAC significa Calefacción, Ventilación y Aire acondicionado. En esta publicación, le explicaré cómo tener un control básico sobre su sistema HVAC (si tiene uno) usando un Arduino.
Termostato vs termómetro
Puede que lo sepas, pero como algunas personas me preguntaron al respecto, voy a comentar unas pocas palabras …
La principal diferencia es que un termómetro solo detecta la temperatura y proporciona información, no realiza ninguna acción para afectar la temperatura ambiente. Un termostato en el otro lado, no solo monitorea la temperatura, sino que también puede regularla usando cosas como su sistema de calefacción central.
Diferentes tipos de termostatos
Hablemos de los diferentes tipos de termostato desde 2 puntos de vista, el cableado y la funcionalidad que ofrecen.
Alambrado
Hay varios tipos de termostatos. En esta sección, hablaré de los más populares y te daré algunos consejos sobre cómo identificarlos.
Termostatos de voltaje de línea
Este tipo de termostato se utiliza generalmente para sistemas de calefacción individuales como zócalos o sistemas radiantes. La forma en que funcionan es bastante simple. El termostato está conectado en serie con el sistema de calefacción y cuando el dispositivo alcanza la temperatura de consigna, detiene el flujo de corriente a través del termostato. Este tipo de sistemas generalmente están conectados a 240V, así que tenga cuidado si decide manipularlos. No es que 120V no puedan meterte en problemas …
Termostatos de bajo voltaje
Hoy en día, el termostato de baja tensión es la opción más común para instalaciones domiciliarias. Los encontrará controlando todo tipo de sistemas de calefacción central que utilizan petróleo, gas o electricidad. Este tipo de termostatos tiene varias ventajas sobre el tipo de voltaje de línea:
- Son más eficientes en la forma en que manejan el flujo de corriente.
- El voltaje de funcionamiento está entre 24 V y 50 V, lo que reduce la exposición a voltajes más altos. Esa es la razón porque ve que los cables dentro del termostato no son tan gruesos como para el primer tipo.
- Hay muchas opciones en el espacio de los termostatos programables.
La principal diferencia es que los termostatos de bajo voltaje no controlan directamente el flujo de corriente, sino que le dicen al sistema de calefacción central qué hacer en función de la temperatura ambiente.
Termostatos de salida
Estos no son muy comunes, pero aún puede ver algunos de ellos. En aras de la simplificación, les diré que son como un enchufe inteligente con sensor de temperatura. Le permite especificar una temperatura de punto de ajuste y cuando se alcanza, se enciende o apaga automáticamente. Bastante simple, ¿no?
Funcionalidad
Independientemente del tipo de termostato, algunos de ellos se pueden programar hasta cierto punto. Puedo pensar principalmente en tres tipos. No vendo termostatos, por lo que esta clasificación está completamente inventada …
Termostato tonto
Este es el tipo de termostato más básico. Selecciona una temperatura de punto de ajuste y el termostato hará todo lo posible para mantenerla dentro del rango.
Termostato no tan tonto
En esta categoría, encontrará termostatos que son un poco más caros pero ofrecen una funcionalidad significativamente mayor. Se basan en los mismos principios que el termostato tonto, pero le brindan una forma mucho más granular de especificar la temperatura.
Por ejemplo, si sigue un horario similar cada semana en términos de a qué hora se despierta y a qué hora regresa del trabajo, puede programar su termostato Not-So-Dumb para calentar la casa justo antes de que lo necesite y mantener el resto del tiempo. Esto ya puede resultar en una gran cantidad de ahorros para su factura de servicios públicos.
Termostato inteligente
Los termostatos inteligentes van un paso más allá para ayudarte a ahorrar energía en casa. Algunas características que puede encontrar en los termostatos inteligentes son:
- Posibilidad de programar la temperatura con gran granularidad.
- Detección de presencia para mantener la temperatura bajo control solo cuando hay alguien en casa.
- Control por voz mediante dispositivos como Google Home o Amazon Alexa.
- Controle la configuración con su teléfono inteligente cuando no esté en casa o cuando esté en casa pero sea demasiado vago para caminar hasta el termostato.
Lo que estamos tratando de construir en esta publicación son los cimientos de un termostato inteligente.
Diagrama de cableado del termostato para bajo voltaje
Aquí está la última parte de la teoría antes de comenzar a construir el termostato Arduino DIY.
La siguiente tabla le da una idea del color y la función de los terminales de acuerdo con los estándares de la industria. La parte complicada aquí es que los estándares de la industria no siempre son el estándar …
Color | Código de terminal | Propósito | Descripción |
rojo | R | 24 corriente alterna | Este es el terminal de alimentación de 24 V. La mayoría de los termostatos de bajo voltaje funcionan con este voltaje, aunque puede encontrarlos hasta 50V.No es raro encontrar 2 cables rojos RH y RC. En este caso, ambos llevan 24 VCA y puede usarlos para energizar por separado calor y frío. |
Negro | C | 24 CA Común | Este es el terreno común para los 24V. |
Blanco | W | Calor | Este es el terminal que se energizará para el calor. |
Amarillo | Y | Compresor | Este es el terminal que energiza el compresor. |
naranja | O | RV encendido en fresco | Los terminales O y B interactúan con la válvula de inversión. La válvula inversa controla el flujo de refrigerante en el sistema de tuberías, lo que básicamente le permite proporcionar aire frío o caliente. O energizado pide aire fresco. |
Azul | segundo | RV EN CALOR | Igual que la terminal O pero para pedir calor. Es muy común ver estos dos terminales combinados en uno con la leyenda O / B.El estándar de la industria es que cuando se activa O / B, la unidad proporciona aire frío. Si no está energizado, proporciona calor. Como siempre, esto depende de la unidad HVAC. |
Verde | GRAMO | Ventilador interior | El terminal verde generalmente controla el ventilador al nivel que su sistema lo permite. |
Sin estándar definido | Y2 | 2da etapa Cool | Y2 básicamente activa una función para aumentar la potencia de su compresor. Solo se requiere en climas extremadamente calurosos. |
Sin estándar definido | W2 | Serie de 2da etapa | Terminal similar a Y2 pero para proporcionar calor. |
Sin estándar definido | mi | Calor de emergencia | Esta función apaga la bomba de calor en caso de emergencia y cambia a la electricidad. |
Quiero hacer todo lo posible para que comprendas lo que encontrarás cuando abras el termostato, así que haré dos cosas. Primero, daré dos de los ejemplos más comunes que puede encontrar. En segundo lugar, te proporcionaré los pasos que seguí para descubrir cómo funciona el mío, espero que te ayude …
Diagrama de cableado del termostato: Ejemplo 1
Color | Código de terminal | Propósito |
rojo | R | 24 corriente alterna |
Negro | C | 24 CA Común |
Blanco | W | Calor |
Amarillo | Y | Compresor |
Verde | GRAMO | Ventilador interior |
- CALOR: En la mayoría de los casos, conectar R a W ENCENDERÁ la calefacción. A veces, también necesita conectar R a G. Eso depende de su sistema.
- CA: En la mayoría de los casos, conectar R a Y encenderá la CA. A veces, también necesita conectar R a G. Eso depende de su sistema.
Digo a veces porque esto depende totalmente del fabricante, NO TOMES NADA POR OTORGADO.
Ejemplo 2 de cableado del termostato
Color | Código de terminal | Propósito |
rojo | R | 24 corriente alterna |
Negro | C | 24 CA Común |
Amarillo | Y | Compresor |
naranja | TRANSMISIÓN EXTERIOR | Válvula inversa |
Verde | GRAMO | Ventilador interior |
Este es un caso un poco más complicado.
En este esquema, debe energizar Y para comenzar a soplar aire, luego, dependiendo de si O / B está activo o no, soplará aire caliente o frío. Como en el caso anterior, en ocasiones tendrás que energizar también G.
Como dije, esto es lo que he visto en base a mi experiencia reemplazando termostatos, habiendo dicho eso, no soy un técnico, por lo que probablemente haya todo un mundo por ahí que no conozco …
Para finalizar esta sección, quiero guiarlo a través de los pasos que tomé para averiguar cómo funcionaba mi termostato HVAC. Esto es lo que me ayudó a realizar ingeniería inversa y replicar el mismo comportamiento usando relés y un Arduino.
¿Cómo funciona su termostato?
1. Abra su termostato actual y verifique cómo está cableado.
Si ve cinco o más cables delgados con diferentes colores, es probable que su unidad esté usando un termostato de bajo voltaje. Si este no es su caso, probablemente sea un termostato de voltaje de línea.
También puede ver si la leyenda de sus terminales se parece a alguno de los ejemplos anteriores.
Si quita alguno de los cables, asegúrese de tomar una foto primero, si su memoria es tan buena como la mía, no lo recordará más tarde …
2. Busque las especificaciones de su termostato en Internet.
Verifique lo que dice el fabricante sobre la unidad. En mi caso, necesitaba conectar R a Y para encender la unidad. Si O / B no está energizado, sopla aire caliente, si está energizado, sopla aire frío. El terminal G se enciende automáticamente cuando se energiza el terminal Y.
Confiar pero verificar
Incluso si las especificaciones de su unidad son claras como el cristal, lo que generalmente no lo es … siempre es bueno verificar que la comprensión del cableado sea correcta.
3. Verifica tu comprensión con un multímetro.
Para verificar que su comprensión es correcta, puede usar un multímetro. Mida el voltaje entre el terminal C y el resto de terminales. Configure su termostato en los diferentes modos (CA, CALOR…) y verifique qué terminales están energizados en cada función.
Esto te dará una idea bastante clara de los terminales que tendrás que conectar para activar los diferentes modos.
Estoy seguro de que lo sabe, pero nunca deje que los terminales R y C se pongan en contacto, el resultado de esto no puede ser bueno …
Cómo construir su propio termostato inteligente Arduino
Si bien generalmente trato de escribir tutoriales detallados adecuados para todos, definitivamente este no es uno de ellos. No soy un experto en HVAC, solo un tipo con mucha curiosidad que ha investigado un poco, así que por favor, si decides hacer este proyecto, lo haces bajo tu propio riesgo. Si no tiene al menos un conocimiento básico de la electricidad y la electrónica, le desaconsejaría hacerlo.
Cosas que debe saber antes de comenzar:
- El proyecto del termostato Arduino se basa en el marco de MySensors, por lo que primero debe familiarizarse con él. Te recomendaría que sigas el tutorial de Sensores de automatización del hogar DIY porque te ayudará a ponerte al día en poco tiempo.
- Debe tener una comprensión decente de Arduino y cómo programarlo. Si aún no está familiarizado con él. Consulte Introducción a Arduino .
- Si no ha jugado con relés antes, consulte Cómo controlar un relé con Arduino. Agregaría la información aquí, pero para ser honesto, Internet está lleno de tutoriales sobre eso …
Lista de la compra
Aquí está la lista de componentes que necesitará, si ha seguido los Sensores de automatización del hogar de bricolaje, ya debería tener todo excepto la placa de relés.
Unidades | Descripción | Amazonas |
1 | NRF24L01 | Enlace |
1 | Arduino Nano | Enlace |
1 | Cables de salto | Enlace |
1 | Sensor de temperatura y humedad DHT22 | Enlace |
1 | 4 canales – Placa de relés | Enlace |
Para este proyecto, estoy usando Arduino Nano, principalmente porque no tengo restricciones de tamaño, pero cualquier Arduino lo hará.
¿Qué es Relay?
Un relé es un interruptor operado electrónicamente … ¿qué? En pocas palabras, un relé nos permite abrir y cerrar un circuito que conduce una carga de alto voltaje con una señal de bajo voltaje, 5V en este caso, como el que puede proporcionar Arduino. Este magnífico componente proporciona a un pequeño microcontrolador la capacidad de controlar dispositivos que requieren un voltaje más alto, como una bombilla, por ejemplo.
En este punto, es posible que ya tenga una idea de cómo el relevo nos ayudará aquí. El relé energizará los diferentes terminales que conectan R con Y y O / B, lo que hará que nuestro HVAC encienda el CALOR o el CA.
Termostato Arduino: cableado
Si siguió el tutorial de Sensores de automatización del hogar de bricolaje , solo tendrá que conectar algunos cables adicionales para que su termostato Arduino esté en funcionamiento. El diagrama que voy a mostrar está basado en mi propio termostato Arduino, tendrá que conectar las cosas según sus propios hallazgos, pero puedo ayudarlo a hacerlo si se comunica conmigo.
Código del termostato Arduino
De la misma manera que el cableado, el código será ligeramente diferente para su termostato Arduino, deberá adaptarlo a sus propias necesidades. He añadido comentarios al código para intentar que sea lo más sencillo posible. Preste especial atención a la función hvacCommand () y a la definición de los pines para los relés, debería poder usar el resto del código tal como está.
#include <DHT.h> #define MY_DEBUG#define MY_RADIO_NRF24#define MY_NODE_ID 2 //Specify the ID of every sensor. This will help you identifying the MQTT messages.#define CHILD_ID_TEMP 0 //ID of the temperature sensor#define CHILD_ID_HUM 1 //ID of the Humidity Sensor#define CHILD_ID_HVAC_COOL 2 //ID of the sensor that indicates when the AC is ON. #define CHILD_ID_HVAC_HEAT 3 //ID of the sensor that indicates when HEAT is ON. //The Pin where the DHT22 sensor is connected.#define DHT_DATA_PIN 3//Constant to identify the DHT sensor type. In my case is DHT22#define DHTTYPE DHT22 //Allows you to define an offset for the temperature. It is useful if the sensor is inside an enclosure for example. #define SENSOR_TEMP_OFFSET 0// The relays are controlled by the pin 7 and 8. You can call then in a way that is meaningful to you.#define RELAY_HEAT 7 #define RELAY_REVERSE_VALVE 8 #include <MySensors.h> /**************************************************//****************** CONSTANTS *********************//**************************************************///Constant to specify how often will the thermostat evaluate the temperature and take an action. Turn on the AC for example. static const uint64_t UPDATE_INTERVAL = 10000;static const uint64_t FORCE_UPDATE_N_READS = 3;static const uint8_t = 10; /**************************************************//****************** VARIABLES *********************//**************************************************///Variables to keep track of the temperature and the humidity. float lastTemp;float lastHum;float temperature = 24.0;float humidity;float targetTemp = 24.0;int statusHVAC = 0;uint8_t nNoUpdatesTemp;uint8_t nNoUpdatesHum; /**************************************************//****************** MESSAGES **********************//**************************************************/ //Define your mysensor messages to communicate with OpenHab MyMessage msgHum(CHILD_ID_HUM, V_HUM);MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);MyMessage msgCool(CHILD_ID_HVAC_COOL, V_CUSTOM);MyMessage msgHeat(CHILD_ID_HVAC_HEAT, V_CUSTOM); DHT dht(DHT_DATA_PIN, DHTTYPE); void presentation() { present(CHILD_ID_HUM, S_HUM); present(CHILD_ID_TEMP, S_TEMP); present(CHILD_ID_HVAC_COOL, S_HVAC); present(CHILD_ID_HVAC_HEAT, S_HVAC);} void setup(){ //Before I do anything, I want to make sure that all the relays are opened (nothing is connected) //Setup all the Arduino Pins pinMode(RELAY_HEAT, OUTPUT); pinMode(RELAY_REVERSE_VALVE, OUTPUT); digitalWrite(RELAY_HEAT,HIGH); digitalWrite(RELAY_REVERSE_VALVE,HIGH); delay(2000); //Wait 2 seconds before starting sequence dht.begin(); //Load the latest target temperature and status from the eprom, just in case my arduino loses power. targetTemp = loadState(0); statusHVAC = loadState(1);} void loop() { //Retrieve teh value of the temperature and the hummidiy from the DHT22 sendTemperatureHumiditySensor(); //Take an action opening or closing the relays if needed. HVACycle(); wait(UPDATE_INTERVAL);} /**************************************************//**************** AUX. FUNCTIONS ******************//**************************************************/ //This is the main function, it turn ON or OFF AC or HEAT when the current temperature falls out of range. void HVACycle(){ if(statusHVAC == 0) { hvacCommand(0,1); hvacCommand(0,2); printStatus(); } if(statusHVAC == 1) { if(temperature > targetTemp) { if(abs(temperature – targetTemp) >= 1) { hvacCommand(0,1); printStatus(); } else printStatus(); } else { if(abs(temperature – targetTemp) >= 1) { hvacCommand(1,1); printStatus(); } else printStatus(); } } if(statusHVAC == 2) { if(temperature > targetTemp) { if(abs(temperature – targetTemp) >= 1) { hvacCommand(1,2); printStatus(); } else printStatus(); } else { if(abs(temperature – targetTemp) >= 1) { hvacCommand(0,2); printStatus(); } else printStatus(); } }} void printStatus(){ Serial.print(«\nTemperature: «); Serial.print(temperature); Serial.print(«\nTarget: «); Serial.print(targetTemp); Serial.print(«\nStatus: «); Serial.print(abs(temperature – targetTemp)); Serial.print(«\nMode: «); Serial.print(statusHVAC); } /************ hvacCommand ****************//* command: 0 -> ON 1 -> OFF * hvacStatus: 1-> HEAT 2-> AC *//*****************************************/ //This function is very important. It basically describes how to turn ON the AC or the HEAT opening or closing the relays. //Review it carefully and adapt it to your needs.void hvacCommand(int command,int hvacStatus){ if(command == 0) { if(digitalRead(RELAY_REVERSE_VALVE) != HIGH) digitalWrite(RELAY_REVERSE_VALVE, HIGH); if(digitalRead(RELAY_HEAT) != HIGH) digitalWrite(RELAY_HEAT, HIGH); send(msgHeat.set(0)); send(msgCool.set(0)); } else if(command == 1) { if(hvacStatus==1) { //When I close the relay between terminals R and Y my unit turns ON the HEAT if(digitalRead(RELAY_HEAT) != LOW) digitalWrite(RELAY_HEAT, LOW); send(msgHeat.set(1)); } if(hvacStatus==2) { //When I close the relays between terminals R and Y and R and Reverse Valve (O/B) my unit turn ON the AC. Please adapt it to your own needs. if(digitalRead(RELAY_REVERSE_VALVE) != LOW) digitalWrite(RELAY_REVERSE_VALVE, LOW); if(digitalRead(RELAY_HEAT) != LOW) digitalWrite(RELAY_HEAT, LOW); send(msgCool.set(1)); } } } /* send(msgHeat.set(1)) and send(msgCool.set(1)) are only for accountability purposes. * I want to send a message to my Home Automation Controller when the unit turns ON a function. * It helps me keeping track of the usage. */ /* This functions reads the temperature from the DHT22 and send it to the gateway. * You can probabbly use it as it is. */ void sendTemperatureHumiditySensor() { temperature = dht.readTemperature(); humidity = dht.readHumidity(); if (isnan(temperature)) { Serial.println(«Failed reading temperature from DHT!»); } else if (temperature != lastTemp || nNoUpdatesTemp == FORCE_UPDATE_N_READS) { lastTemp = temperature; nNoUpdatesTemp = 0; temperature += SENSOR_TEMP_OFFSET; send(msgTemp.set(temperature, 1)); #ifdef MY_DEBUG Serial.print(«T: «); Serial.println(temperature); #endif } else { nNoUpdatesTemp++; } if (isnan(humidity)) { Serial.println(«Failed reading humidity from DHT»); } else if (humidity != lastHum || nNoUpdatesHum == FORCE_UPDATE_N_READS) { lastHum = humidity; nNoUpdatesHum = 0; send(msgHum.set(humidity, 1)); #ifdef MY_DEBUG Serial.print(«H: «); Serial.println(humidity); #endif } else { nNoUpdatesHum++; } } /* This function listens to the gateway to receive the commands * It captures the target temperature and the mode of the Arduino thermostat: AC or HEAT. */ void receive(const MyMessage &message) { Serial.print((«New message: «)); Serial.println(message.type); Serial.println(message.getInt()); if (message.type == V_HVAC_SETPOINT_COOL) { Serial.print(«Setting Temperature To: «); Serial.println(message.getInt()); targetTemp = message.getFloat(); saveState(0, targetTemp); //Save the targetTemperature on the EPROM so you can retrieve if the arduino loses power. } if (message.type == V_HVAC_FLOW_STATE) { Serial.print(F(«Setting Mode To: «)); Serial.println(message.getInt()); statusHVAC = message.getInt(); saveState(1, statusHVAC); } } |
Agregue los elementos al controlador de automatización del hogar
Aquí tiene los elementos de los elementos que deberá agregar a su archivo de elementos en caso de que esté utilizando OpenHab.
Number thermostat_livingroom_temp «Target Temperature [%.1f]» {mqtt=»>[mosquitto:mygateway1-in/1/1/1/0/44:state:*:${state}]»} Number thermostat_livingroom_mode «Mode [%.1f]» {mqtt=»>[mosquitto:mygateway1-in/1/1/1/0/21:command:*:${command}]»} Number mqtt_livingroom_temperature «Temperature [%.1f]» {mqtt=»<[mosquitto:mygateway1-out/1/0/1/0/0:state:default]»}Number mqtt_livingroom_humidity «Humidity [%.1f]» {mqtt=»<[mosquitto:mygateway1-out/1/1/1/0/1:state:default]»}Switch thermostat_livingroom_hvacCool «HVAC LIVINGROOM COOL» {mqtt=»<[mosquitto:mygateway1-out/1/2/1/0/48:state:ON:1],<[mosquitto:mygateway1-out/1/2/1/0/48:state:OFF:0]»} Switch thermostat_livingroom_hvacHeat «HVAC LIVINGROOM HEAT» {mqtt=»<[mosquitto:mygateway1-out/1/3/1/0/48:state:ON:1],<[mosquitto:mygateway1-out/1/3/1/0/48:state:OFF:0]»} |
Por favor, avíseme en los comentarios si hay algo que no está claro o si le gustaría que agregue.
Mejoras futuras
El termostato Arduino tiene mucho margen de mejora, aquí hay algunas cosas en las que puedo pensar …
- Agregue un sensor de movimiento para ENCENDER y APAGAR la unidad según la presencia.
- Agregue un modo AUTO.
- Incluya sensores externos para capturar la temperatura de la habitación en diferentes ubicaciones.
- Incluya una pantalla OLED para controlar la temperatura.
- ¿Algo más? dimelo en los comentarios.
BK Hobby tiene un excelente contenido relacionado con los sensores de temperatura que usan NodeMCU, si no está suscrito al canal, ¡realmente se lo está perdiendo! Les dejo aquí un video sobre sus sensores de temperatura por si quieren verlo.https://www.youtube.com/embed/fA91LcJRbhI?feature=oembed&enablejsapi=1&origin=https://www.smarthomeblog.net
Conclusión
Como dije antes, este no fue un tutorial paso a paso, sino más bien un recorrido. Investigué mucho cuando comencé mi proyecto de termostato Arduino y pensé que podría ser útil para algunas personas que intentan hacer lo mismo.
Espero que hayas aprendido algo hoy y te hayas inspirado para tu próximo proyecto.
Si te gusta o odias esta publicación, cuéntamelo por correo electrónico o en los comentarios, ¡también si tienes preguntas, por supuesto!