Arduino OpenTherm 智能供暖控制:实现中央供暖系统的监控与自动化
项目背景
想知道锅炉何时运行、如何加热?想用 Arduino 实现供暖自动化?OpenTherm 协议是欧洲主流燃气壁挂炉与温控器的通讯标准。本项目开发的 Arduino OpenTherm Shield 让你能轻松监控、控制、拦截甚至网关化 OpenTherm 总线,实现 DIY 智能温控、壁炉联动、远程监控等高级功能。
硬件架构
- Arduino UNO / 兼容板 (需支持 D2/D3 外部中断) ×1
- Arduino OpenTherm Shield ×1(自制或购买 DIY 套件)
- 24V 500mA 电源模块 ×1(网关/监听模式下为总线供电)
OpenTherm 协议可获取的数据与命令
| 数据项 | 说明 |
|---|---|
| 室温 / 设定温度 | 核心控制参数 |
| 供/回水温度 | 监控锅炉工况 |
| 生活热水温度/压力/流量* | 需锅炉配套传感器 |
| 室外温度* | 需室外传感器 |
| 锅炉状态 | 运行/待机/故障 |
| 调节比 (0-100%) | 燃烧功率指示 |
| 排烟温度* | 需锅炉支持 |
| 运行统计 | 累计燃烧时长等 |
* 标星项需锅炉配备相应传感器
四大典型应用模式
1. 自制智能温控器
仅需 5V 供电,Shield 直连锅炉 OpenTherm 端子。Arduino 运行 PID/模糊/学习算法,完全接管供暖逻辑,接入 Home Assistant/Apple HomeKit 等。
2. 总线监听器
Shield 并联在锅炉-温控器总线上(不打断通讯),Arduino 被动解码所有帧,上传 MQTT/InfluxDB 做数据分析、故障预警。
3. 中间网关
Shield 串联在总线中(打断原有连接),Arduino 运行网关固件:转发温控器→锅炉指令,转发锅炉→温控器应答,中间可注入/修改/屏蔽任意帧。作者即用此模式实现壁炉联动:有柴火余热时屏蔽锅炉点火指令,改用壁炉换热器供暖。
4. 模拟锅炉/温控器
配合另一设备做协议栈测试、产品开发验证。
Shield 硬件设计
- 参考 OpenTherm Gateway (PIC 单片机) 电路,移植至 Arduino UNO 形制
- 核心:光耦隔离收发、比较器整形、高压保护、24V 总线供电转 5V/3.3V
- Gerber 文件开源,推荐 PCBWay 打样(蓝色阻焊同价绿色,交期快、服务好)
软件库与示例
Arduino OpenTherm IO Library:GitHub
封装了帧收发、超时重试、数据结构解析 (f88浮点、u16/s16整型),极大简化应用开发。
示例 1:温控器模式读取从机配置
void loop() {
if (OPENTHERM::isIdle()) {
message.type = OT_MSGTYPE_READ_DATA;
message.id = OT_MSGID_SLAVE_CONFIG;
OPENTHERM::send(BOILER_OUT, message);
} else if (OPENTHERM::isSent()) {
OPENTHERM::listen(BOILER_IN, 800);
} else if (OPENTHERM::getMessage(message)) {
// 解析 message.f88() 等字段
OPENTHERM::stop();
delay(100);
} else if (OPENTHERM::isError()) {
OPENTHERM::stop();
}
}
示例 2:网关模式双向转发
enum { MODE_LISTEN_MASTER, MODE_LISTEN_SLAVE } mode;
void loop() {
if (mode == MODE_LISTEN_MASTER) {
if (OPENTHERM::isSent() || OPENTHERM::isIdle() || OPENTHERM::isError()) {
OPENTHERM::listen(THERMOSTAT_IN);
} else if (OPENTHERM::getMessage(message)) {
OPENTHERM::send(BOILER_OUT, message); // 转发给锅炉
mode = MODE_LISTEN_SLAVE;
}
} else { // MODE_LISTEN_SLAVE
if (OPENTHERM::isSent()) {
OPENTHERM::listen(BOILER_IN, 800);
} else if (OPENTHERM::getMessage(message)) {
OPENTHERM::send(THERMOSTAT_OUT, message); // 回复温控器
mode = MODE_LISTEN_MASTER;
} else if (OPENTHERM::isError()) {
mode = MODE_LISTEN_MASTER;
}
}
}
进阶应用:OpenTherm Regulator
作者下一篇将详细介绍如何在网关模式下注入算法:读取室外温度、壁炉水温、室温设定,动态决定“锅炉点火”还是“壁炉循环泵启动”,实现多热源智能切换,大幅降低燃气费。
原理图与 PCB
原理图含光耦隔离电路、比较器、DC-DC 降压、Arduino 引脚映射。Gerber 文件可直接下单打板。
制造工艺
- 树莓派监测中央供暖锅炉:硬件、软件与部署指南
- 打造低成本家庭无线传感器网络:Arduino + 树莓派 + Xively 物联网平台
- 树莓派接入 TGS2600 气体传感器检测有毒气体:电阻阶梯模拟数字转换
- Arduino与树莓派构建互联网控制视频流机器人完整指南
- 用 Alexa 控制吊扇:分步指南
- DIY 蓝牙控制 Arduino 间谍小车
- FlickMote:基于手势的智能家居红外遥控器
- 使用 Arduino Nano 和 NeoPixel 打造动态跑马灯 LED 照明
- Arduino Cloud 集成:随时随地监控家中温度
- 通过 Arduino IoT Cloud 用 Alexa 控制电视:分步指南
- 连接GrabCAD Print与Stratasys 3D打印机——分步指南
- 燃油供暖降本增效三策略:双层玻璃、优级燃油、远程监控