Conecte o aquecimento central ao Arduino
Componentes e suprimentos
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
Sobre este projeto
Você já se perguntou quando e por que sua caldeira está funcionando e aquecendo sua casa? Quer automatizar seu sistema de aquecimento com o Arduino? A blindagem OpenTherm foi projetada para você. Ele permitirá que você monitore e controle sua caldeira OpenTherm com o Arduino.


Antecedentes
No ano passado, quis combinar a minha caldeira de aquecimento a gás com um regulador de lareira. Minha caldeira BAXI e termostato são muito inteligentes, então eu queria naturalmente estender a caldeira para controlar a lareira também. Eu estava farto de todas aquelas extensões BAXI oficiais caras que me permitiam fazer isso.
Então, eu construí um gateway OpenTherm que me permitiu interceptar a comunicação entre o termostato e a caldeira e colocar um algoritmo que acionaria uma caldeira ou usaria o calor da lareira - [mais sobre o regulador].
Como havia muitas pessoas que queriam algo semelhante, decidi criar um módulo - o escudo do Arduino - que permitiria a qualquer pessoa controlar facilmente o aquecimento de sua casa.

Para que serve o escudo?
- Crie sua própria caldeira baseada em Arduino com um termostato OpenTherm existente. Muito improvável que alguém fizesse isso, mas é possível.
- Use a blindagem para construir seu próprio termostato baseado em Arduino para assumir totalmente a sua caldeira e aquecimento doméstico. Perfeito para automação residencial. Este aplicativo requer apenas uma fonte de alimentação externa de 5 V.
- Coloque um escudo OpenTherm nas linhas entre a caldeira e o termostato existentes e crie um monitor para ver quando e como a caldeira está aquecendo sua casa. Você pode até interceptar a comunicação para, por exemplo, controlar o aquecimento sem fio.
- OpenTherm permite ter um intermediário ( gateway ) dispositivo que se comunica com a caldeira e o termostato. Foi assim que usei o escudo para criar um regulador OpenTherm.
Dados e comandos disponíveis
- temperatura ambiente
- ponto de ajuste da temperatura ambiente
- temperatura da água de aquecimento
- temperatura da água de retorno
- temperatura da água quente sanitária *
- pressão de água quente sanitária *
- taxa de fluxo de água quente doméstica *
- temperatura externa *
- status da caldeira (funcionando / não funcionando / erro)
- nível de modulação
- temperatura de exaustão *
- estatísticas de quanto tempo a caldeira funcionou
* observe que eles estão disponíveis apenas se sua caldeira estiver equipada com os acessórios necessários
Construindo o escudo
O circuito eletrônico é baseado no projeto de gateway OpenTherm que utiliza microcontrolador PIC. Eu o adaptei para o Arduino e criei um bom layout compatível com o Arduino UNO.

Você pode usar os arquivos esquemáticos e Gerber acima para criar o escudo por conta própria. Estou fabricando minhas placas por PCBWay - Protótipo de PCB de maneira fácil. Você pode mandá-los criar e enviar essas lindas belezas azuis em apenas uma semana. A máscara de solda azul tem o mesmo preço que a verde básica! Eu também adoro o atendimento ao cliente, nada é um problema. Ou você pode solicitar um kit DIY pré-embalado.

Usando a blindagem para criar um termostato
O primeiro exemplo mostrará como usar a blindagem para criar seu próprio termostato personalizado. O que você precisa:
- Caldeira OpenTherm
- Arduino UNO, WeMos D1 ou qualquer placa compatível com Arduino UNO. O único requisito para a placa é o suporte de interrupção de pino nos pinos 2 e 3.
- Fonte de alimentação 5V. Não há necessidade de fonte de alimentação de 24 V nesta configuração, pois ela só é necessária se você se comunicar com um termostato.

Conecte sua caldeira com o escudo Arduino OpenTherm conforme mostrado na imagem acima, coloque o escudo no seu Arduino e você pode começar a programar. A biblioteca Arduino OpenTherm IO contém o seguinte exemplo para mostrar como se comunicar com a caldeira.
void loop () {if (OPENTHERM ::isIdle ()) {message.type =OT_MSGTYPE_READ_DATA; message.id =OT_MSGID_SLAVE_CONFIG; mensagem.valorHB =0; mensagem.valorLB =0; Serial.print ("->"); OPENTHERM ::printToSerial (mensagem); Serial.println (); OPENTHERM ::enviar (BOILER_OUT, mensagem); // enviar mensagem para a caldeira} else if (OPENTHERM ::isSent ()) {OPENTHERM ::listen (BOILER_IN, 800); // espera a resposta da caldeira} else if (OPENTHERM ::getMessage (message)) {// a caldeira respondeu OPENTHERM ::stop (); Serial.print ("<-"); OPENTHERM ::printToSerial (mensagem); Serial.println (); Serial.println (); atraso (100); // atraso mínimo antes da próxima comunicação} else if (OPENTHERM ::isError ()) {OPENTHERM ::stop (); Serial.println ("<- Tempo limite"); Serial.println (); }}
Primeiro, verifique se não há comando pendente com OPENTHERM ::isIdle . Se não, você pode enviar o próximo. Neste exemplo, você solicita os sinalizadores de configuração do escravo. Se o comando foi enviado com sucesso, você deve começar a ouvir uma resposta da caldeira com OPENTHERM ::listen ligar. Método OPENTHERM ::getMessage retornará verdadeiro assim que houver uma resposta pendente do escravo e se algo deu errado ou ocorreu o tempo limite do método OPENTHERM ::isError retornar verdadeiro. A biblioteca contém a estrutura de mensagem OpenTherm que contém dados decodificados do protocolo, então você não precisa se preocupar com os formatos. Verifique se o código-fonte está bem documentado. Todos os tipos de mensagens estão listados nas constantes ou você pode verificar a documentação do OpenTherm.
struct OpenthermData {tipo de byte; byte id; byte valueHB; byte valueLB; float f88 (); void f88 (valor flutuante); uint16_t u16 (); void u16 (valor uint16_t); int16_t s16 (); void s16 (valor int16_t);}
Usando a blindagem para criar um monitor, gateway ou regulador
O segundo exemplo mostrará como conectar um dispositivo intermediário ao barramento OpenTherm para monitorar a caldeira e o termostato ou interceptar sua comunicação. O que você precisa:
- termostato OpenTherm
- Fonte de alimentação 24 V 500 mA

Conecte a blindagem no barramento entre a caldeira e o termostato conforme mostrado na imagem acima. Você pode ver que ele interrompe o barramento entre esses dois dispositivos. Agora sua comunicação é interrompida, a menos que você carregue um software de gateway em seu Arduino que encaminhe comandos e respostas do termostato para a caldeira e vice-versa. Novamente, há um excelente exemplo na 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 (mensagem); Serial.println (); OPENTHERM ::enviar (BOILER_OUT, mensagem); // encaminha a mensagem para o modo boiler =MODE_LISTEN_SLAVE; }} else if (mode ==MODE_LISTEN_SLAVE) {if (OPENTHERM ::isSent ()) {OPENTHERM ::listen (BOILER_IN, 800); // a resposta precisa ser enviada de volta em 800ms} else if (OPENTHERM ::getMessage (message)) {Serial.print ("<-"); OPENTHERM ::printToSerial (mensagem); Serial.println (); Serial.println (); OPENTHERM ::enviar (THERMOSTAT_OUT, mensagem); // enviar mensagem de volta ao modo termostato =MODE_LISTEN_MASTER; } else if (OPENTHERM ::isError ()) {mode =MODE_LISTEN_MASTER; Serial.println ("<- Tempo limite"); Serial.println (); }}}
O gateway simplesmente começa a escutar os comandos do termostato. Se houver solicitação detectada, ele irá analisá-la e encaminhá-la para a caldeira. O Gateway agora começará a escutar a resposta da caldeira. Se houver resposta recebida em 800ms, o gateway encaminhará a resposta de volta para o termostato. O termostato e a caldeira nunca saberão que há algo extra entre eles. Como você pode ver, há muito espaço para escrever seu próprio código que pode capturar as mensagens e ler informações úteis delas (status, temperaturas, pressão, estatísticas, ...). Você pode até ignorar ou descartar solicitações ou respostas de que não gosta.
Como você pode ver, é realmente fácil se comunicar com o seu sistema de aquecimento inteligente e torná-lo ainda mais inteligente. No próximo artigo, vou mostrar o uso mais prático desse hardware no meu regulador OpenTherm.
Código
Biblioteca Opentherm IO para Arduino
https://github.com/jpraus/arduino-openthermEsquemas

Processo de manufatura
- Monitorando minha caldeira de aquecimento central
- Construindo uma rede de sensores sem fio em sua casa
- Conecte um sensor ao Raspberry Pi para avisá-lo quando houver gases nocivos por perto!
- Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
- Como conectar o GrabCAD Print à sua impressora 3D Stratasys
- Dicas para melhorar a eficiência do óleo de aquecimento para sua empresa
- Habilite o controle Alexa para o seu ventilador de teto
- Arduino Spybot
- FlickMote
- Adicione iluminação animada (letreiro) aos seus projetos