Arduino 多区域地暖智能控制器:单片机替代昂贵商用系统 (EvoHome 平替)
项目缘起
作者家中地暖仅靠客厅单一温控器,导致厨房过热/过冷。商用多区控制器 (如 Honeywell EvoHome) 价格昂贵,遂自研基于 Arduino UNO/Mega 的多区地暖控制器,成本不足商用 1/10,运行一年零故障,年省电费 100~200 欧元。
核心功能
- 多区独立控温:每区独立温控器(热电执行器/阀门) + 继电器,互不干扰。
- 泵智能管理:仅有区域需热时才启动地暖循环泵;阀门开启需 3~5 分钟,泵延迟启动防干烧。
- 夏季维护运行:无需热时每 36 小时强制运行泵 8 分钟,防卡死。
- 聚合温控信号:任一区需热即闭合“总温控”继电器启动壁挂炉;无需热时断开。
- 无地暖区域兼容:并联现有暖气片温控旋钮至“No_Zone”输入,统一纳入逻辑。
- 看门狗复位:硬件 WDT 保障死机自动复位,工业级可靠性。
- 完全离线:不联网,避免 IoT 攻击面,物理按键/旋钮即可调节。
硬件配置 (UNO 版最多 5 区)
| 功能 | 引脚 | 器件 |
|---|---|---|
| 壁挂炉总温控 | D4 | 继电器 (常开串入炉温控线) |
| 地暖循环泵 | D5 | 继电器 (控制泵 220V 供电) |
| 区域 1 阀门 (客厅) | D7 | 继电器驱动 230V 热电执行器 |
| 区域 2 阀门 (厨房) | D6 | 同左 |
| 区域 3 阀门 (餐厅) | D3 | 同左 |
| 区域 1 温控器 | D8 | 干节点信号,内部上拉 |
| 区域 2 温控器 | D9 | 同左 |
| 区域 3 温控器 | D11 | 同左 |
| 无地暖区温控 | D10 | 并联多个暖气片温控旋钮 |
| 指示 LED (运行/加热) | D12/D13 | 可选 |
需 8 路 5V 继电器板 (Keyes/孙悟空等),执行器选 Honeywell MT8-230-NC (常闭、断电关阀、230V 驱动)。
软件架构:状态机 + 非阻塞定时
主循环 10 Hz (正常) / 500 Hz (FAST_MODE 测试)。三大状态:
IDLE:无需热,泵关、阀关、炉关。执行夏季维护泵运行检查。ON:有区域需热,炉开、相应阀开、延迟 5 分钟待阀全开后启泵。COOLDOWN:需热结束,炉关、全阀开、泵继续运行 30 分钟散热,随后回 IDLE。
关键代码结构 (节选)
// 设备抽象基类
class IODevice { ... };
class Thermostat : IODevice { // 防抖读取干节点
bool IsOn() { /* 连续 5 次读同值才翻转 */ }
};
class Valve : Manipulator { // 带开/关过渡计时
bool ValveIsOpen() { return IsOn() && transitionCount >= VALVE_TIME; }
void Update() { /* 计时器递增/递减 */ }
};
class Pump : Manipulator { // 维护运行计时
bool doMaintenanceRun() { return doMaintenance; }
void Update() { /* 运行/维护双计时器 */ }
};
// 状态机
enum State { idle, on, cooldown };
State CVState = idle;
void loop() {
wdt_reset(); // 喂狗
FUPump.Update();
for (v: zones) v.valve.Update();
CVState.doProcessingActions(); // 根据状态执行逻辑
}
配置区块 (用户仅改此处)
#define NR_ZONES 3
Zone Zones[NR_ZONES] = {
{"Living", Valve(7), Thermostat(8)},
{"Kitchen", Valve(6), Thermostat(9)},
{"Dining", Valve(3), Thermostat(11)}
};
// 引脚宏定义见上表,增减区域只改此数组与 NR_ZONES
串口日志示例 (含时间戳 dd:hh:mm:ss)
00:00:05:12: State change from [idle] to [on] 00:00:05:12: Kitchen Valve on pin(6) = On 00:00:10:12: Floor Unit Pump on pin(5) = On // 阀开 5 分钟后泵才启动 00:00:45:12: State change from [on] to [cooldown] 00:01:15:12: State change from [cooldown] to [idle]
级联扩展 (多台 Arduino 控制多台壁挂炉/地暖分区)
每台地暖分集水器配一套控制器,通过“总温控”继电器并联控制各自壁挂炉,或由主控制器统筹。原理图展示了级联接法。
经验总结
- 热电执行器动作慢 (3~5 min),必须在泵启动前预开阀门,代码中
VALVE_TIME=3000(5 min) 已含安全余量。 - 温控器干节点易受干扰,软件 5 次连续采样去抖动极其关键。
- 看门狗
WDTO_1S配合 10 Hz 主循环,喂狗间隔 100 ms,极其可靠。 - 不联网设计避免了固件升级、云端宕机、安全漏洞等后顾之忧;如需远程查看,可另加只读 MQTT 网关。
- 年省电费 ~150 欧元,投资回报期 < 1 年。
制造工艺
- 太阳能供暖系统:从被动式到主动式的可持续家居供暖方案
- 树莓派监测中央供暖锅炉:硬件、软件与部署指南
- 基于 Web 控制的 DMX 灯光系统 – Arduino 主控制器
- 自动游戏助手:为玩家打造的智能任务自动化装置
- DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
- Unopad:基于 Arduino 的无缝 Ableton Live MIDI 控制器
- Arduino 驱动的真空荧光显示器(VFD)控制器套件
- Arduino OpenTherm 智能供暖控制:实现中央供暖系统的监控与自动化
- Alexa 语音控制 Arduino 智能家居中枢:基于 Yun + PubNub + AWS Lambda 全栈实现
- 智能影音柜风扇控制器 - Arduino Nano、DHT11 与继电器实现最优散热
- PWM功率控制器:构建脉宽调制灯驱动器
- 洗地机巅峰性能维护指南:刷盘、吸水胶条、润滑三大核心