Integra tu calefacción central con Arduino para control inteligente
Componentes y suministros
| Arduino UNO | × | 1 |
| Shield Arduino OpenTherm | × | 1 |
| Fuente de alimentación 24V | × | 1 |
Sobre este proyecto
¿Alguna vez te has preguntado cuándo y por qué tu caldera está funcionando y calentando tu hogar? ¿Quieres automatizar tu sistema de calefacción con Arduino? El shield OpenTherm está diseñado para ti. Te permitirá monitorear y controlar tu caldera OpenTherm con Arduino.
Antecedentes
El año pasado quise combinar mi caldera de gas con un regulador de chimenea. Mi caldera BAXI y termostato son bastante inteligentes, así que quería naturalmente extender la caldera para controlar la chimenea también. Estaba harto de todas esas extensiones oficiales caras de BAXI que me permitirían hacerlo.
Así que construí yo mismo una pasarela OpenTherm que me permitió interceptar la comunicación entre el termostato y la caldera y colocar un algoritmo que dispararía la caldera o usaría el calor de la chimenea - [más sobre el regulador].
Como había mucha gente que quería algo similar, decidí crear un módulo - shield de Arduino - que permitiera a cualquiera controlar muy fácilmente la calefacción de su casa.
¿Para qué sirve el shield?
- Crear tu propia caldera basada en Arduino con un termostato OpenTherm existente. Es muy improbable que alguien lo haga, pero es posible.
- Usar el shield para construir tu propio termostato basado en Arduino para tomar el control total de tu caldera y calefacción doméstica. Perfecto para automatización del hogar. Esta aplicación solo requiere una fuente de alimentación externa de 5V.
- Colocar un shield OpenTherm en las líneas entre la caldera y el termostato existentes y crear un monitor para ver cuándo y cómo la caldera está calentando tu hogar. Incluso puedes interceptar la comunicación para, por ejemplo, controlar la calefacción de forma inalámbrica.
- OpenTherm permite tener un dispositivo intermediario (pasarela) que se comunica tanto con la caldera como con el termostato. Así es como usé el shield para crear un regulador OpenTherm.
Datos y comandos disponibles
- Temperatura de la habitación
- Punto de ajuste de temperatura de la habitación
- Temperatura del agua de calefacción
- Temperatura del agua de retorno
- Temperatura de agua caliente sanitaria*
- Presión de agua caliente sanitaria*
- Caudal de agua caliente sanitaria*
- Temperatura exterior*
- Estado de la caldera (funcionando / no funcionando / error)
- Nivel de modulación
- Temperatura de escape*
- Estadísticas de cuánto tiempo estuvo funcionando la caldera
* Nota: estos solo están disponibles si tu caldera está equipada con los accesorios necesarios
Construyendo el shield
El circuito electrónico está basado en el proyecto OpenTherm gateway que usa microcontrolador PIC. Lo adapté para Arduino y creé un diseño compatible con Arduino UNO.
Puedes usar el esquema anterior y los archivos Gerber para crear el shield por tu cuenta. Yo fabrico mis placas con PCBWay - Prototipos PCB de forma fácil. Puedes hacer que creen y envíen estas hermosas placas azules en solo una semana. La máscara de soldadura azul cuesta lo mismo que la verde básica. También me encanta su servicio al cliente, nada es un problema. O puedes pedir un kit DIY preempaquetado.
Usando el shield para crear un termostato
El primer ejemplo te mostrará cómo usar el shield para crear tu propio termostato personalizado. Lo que necesitas:
- Caldera OpenTherm
- Arduino UNO, WeMos D1 o cualquier placa compatible con Arduino UNO. El único requisito para la placa es el soporte de interrupción de pin en los pines 2 y 3.
- Fuente de alimentación 5V. No se necesita fuente de 24V en esta configuración ya que solo es necesaria si te comunicas con un termostato.
Conecta tu caldera con el shield OpenTherm de Arduino como se muestra en la imagen de arriba, coloca el shield en tu Arduino y puedes empezar a programar. La biblioteca Arduino OpenTherm IO contiene el siguiente ejemplo para mostrarte cómo comunicarte con la caldera.
void loop() {
if (OPENTHERM::isIdle()) {
message.type = OT_MSGTYPE_READ_DATA;
message.id = OT_MSGID_SLAVE_CONFIG;
message.valueHB = 0;
message.valueLB = 0;
Serial.print("-> ");
OPENTHERM::printToSerial(message);
Serial.println();
OPENTHERM::send(BOILER_OUT, message); // enviar mensaje a la caldera
} else if (OPENTHERM::isSent()) {
OPENTHERM::listen(BOILER_IN, 800); // esperar respuesta de la caldera
} else if (OPENTHERM::getMessage(message)) {
// la caldera respondió
OPENTHERM::stop();
Serial.print("<- ");
OPENTHERM::printToSerial(message);
Serial.println();
Serial.println();
delay(100); // retraso mínimo antes de la siguiente comunicación
} else if (OPENTHERM::isError()) {
OPENTHERM::stop();
Serial.println("<- Timeout");
Serial.println();
}
}
Primero, verifica si no hay ningún comando pendiente con OPENTHERM::isIdle. Si no, puedes enviar el siguiente. En este ejemplo, solicitas las banderas de configuración del esclavo. Si el comando se envió correctamente, tienes que empezar a escuchar una respuesta de la caldera con la llamada OPENTHERM::listen. El método OPENTHERM::getMessage devolverá true tan pronto como haya una respuesta pendiente del esclavo y si algo salió mal o ocurrió un timeout, el método OPENTHERM::isError devuelve true. La biblioteca contiene la estructura de mensaje OpenTherm que contiene datos decodificados del protocolo, así que no necesitas preocuparte por los formatos. Revisa el código fuente, está bien documentado. Todos los tipos de mensajes están listados en las constantes o puedes consultar la documentación de OpenTherm.
struct OpenthermData {
byte type;
byte id;
byte valueHB;
byte valueLB;
float f88();
void f88(float value);
uint16_t u16();
void u16(uint16_t value);
int16_t s16();
void s16(int16_t value);
}
Usando el shield para crear un monitor, pasarela o regulador
El segundo ejemplo te mostrará cómo adjuntar un dispositivo intermediario al bus OpenTherm para monitorear la caldera y el termostato o interceptar su comunicación. Lo que necesitas:
- Termostato OpenTherm
- Fuente de alimentación 24V 500mA
Conecta el shield en el bus entre la caldera y el termostato como se muestra en la imagen de arriba. Puedes ver que interrumpe el bus entre estos dos dispositivos. Ahora tu comunicación está rota a menos que subas un software de pasarela a tu Arduino que reenvíe comandos y respuestas del termostato a la caldera y viceversa. De nuevo hay un excelente ejemplo en la biblioteca Arduino OpenTherm IO.
void loop() {
if (mode == MODE_LISTEN_MASTER) {
if (OPENTHERM::isSent() || OPENTHERM::isIdle() || OPENTHERM::isError()) {
OPENTHERM::listen(THERMOSTAT_IN);
} else if (OPENTHERM::getMessage(message)) {
Serial.print("-> ");
OPENTHERM::printToSerial(message);
Serial.println();
OPENTHERM::send(BOILER_OUT, message); // reenviar mensaje a la caldera
mode = MODE_LISTEN_SLAVE;
}
} else if (mode == MODE_LISTEN_SLAVE) {
if (OPENTHERM::isSent()) {
OPENTHERM::listen(BOILER_IN, 800); // la respuesta debe enviarse en 800ms
} else if (OPENTHERM::getMessage(message)) {
Serial.print("<- ");
OPENTHERM::printToSerial(message);
Serial.println();
Serial.println();
OPENTHERM::send(THERMOSTAT_OUT, message); // enviar mensaje de vuelta al termostato
mode = MODE_LISTEN_MASTER;
} else if (OPENTHERM::isError()) {
mode = MODE_LISTEN_MASTER;
Serial.println("<- Timeout");
Serial.println();
}
}
}
La pasarela simplemente empieza a escuchar los comandos del termostato. Si se detecta una solicitud, la analizará y la reenviará a la caldera. La pasarela ahora empezará a escuchar la respuesta de la caldera. Si se recibe una respuesta en 800ms, la pasarela reenviará la respuesta de vuelta al termostato. Tanto el termostato como la caldera nunca sabrán que hay algo extra entre ellos. Como puedes ver, hay mucho espacio para escribir tu propio código que pueda capturar los mensajes y leer información útil de ellos (estado, temperaturas, presión, estadísticas,...). Incluso puedes anular o desechar solicitudes o respuestas que no te gusten.
Como puedes ver, es realmente fácil comunicarse con tu sistema de calefacción inteligente y hacerlo aún más inteligente. En el próximo artículo te mostraré un uso más práctico de este hardware en mi regulador OpenTherm.
Código
Biblioteca Opentherm IO para Arduino
https://github.com/jpraus/arduino-opentherm
Esquemas
Diagrama esquemático del shield OpenTherm.
Proceso de manufactura
- Monitorización de caldera de calefacción central con Raspberry Pi – Hardware, software y guía de configuración
- Construya una Red de Sensores Inalámbrica Económica para su Hogar
- Conecte un Sensor de Gas TGS2600 a Raspberry Pi para Detección de Gases Nocivos
- Construya un robot con streaming de vídeo controlado por Internet con Arduino y Raspberry Pi
- Controla tu Ventilador de Techo con Alexa: Guía Paso a Paso
- Construye un Spybot controlado por Bluetooth con Arduino
- FlickMote: Mando IR por gestos para Smart Home
- Crear iluminación de marquesina LED dinámica con Arduino Nano y NeoPixels
- Monitoriza la Temperatura de tu Hogar desde Cualquier Lugar con Integración Arduino Cloud
- Conectar GrabCAD Print a su impresora 3D Stratasys – Guía paso a paso
- Maximice Beneficios: Estrategias Comprobadas de Eficiencia en Calefacción por Gasóleo