基于滞回控制的 Arduino 恒温系统设计与实现
项目背景
本项目演示一种基于滞回(迟滞)比较器的温度闭环控制系统,模拟空调/恒温箱的核心逻辑:当温度升至上限阈值(25℃)开启制冷(绿灯),降至下限阈值(23℃)关闭制冷(红灯),两阈值之间形成“死区”,避免执行器频繁动作,延长设备寿命。系统采用 Arduino 101(Intel Curie 架构)主控,DHT22 高精度温湿度传感器,配合 DFRobot LCD 按键扩展板实现人机交互。
硬件架构
| 模块 | 型号 | 接口/引脚 | 功能 |
|---|---|---|---|
| 主控板 | Arduino 101 | D2/D3 控制 LED,D12 接 DHT22 | 核心逻辑、PWM 输出、BLE 预留 |
| 温湿度传感器 | DHT22 (AM2302) | 单总线,D12,±0.5℃/±2%RH | 环境参数采集 |
| 执行指示 | 红/绿 LED ×2 | D2(制冷指示),D3(加热/停机指示),330Ω 限流 | 直观显示控制状态 |
| 人机界面 | DFRobot LCD Keypad Shield | 占用 D8-D13, A0,16×2 字符+5按键 | 参数设置、实时显示、菜单操作 |
| 上拉电阻 | 10kΩ | DHT22 数据线上拉 | 保证总线电平稳定 |
滞回控制算法详解
核心逻辑
// 伪代码:滞回温控主循环
#define T_UPPER 25.0 // 开启制冷阈值
#define T_LOWER 23.0 // 关闭制冷阈值
bool coolingActive = false; // 状态机变量
unsigned long lastRead = 0;
const int READ_INTERVAL = 2000; // 2秒采样周期
void loop() {
if (millis() - lastRead >= READ_INTERVAL) {
lastRead = millis();
float t = dht.readTemperature();
float h = dht.readHumidity();
updateDisplay(t, h);
if (!coolingActive && t >= T_UPPER) { // 越过上限,开启制冷
coolingActive = true;
digitalWrite(COOL_LED, HIGH);
digitalWrite(HEAT_LED, LOW);
} else if (coolingActive && t <= T_LOWER) { // 回落下限,关闭制冷
coolingActive = false;
digitalWrite(COOL_LED, LOW);
digitalWrite(HEAT_LED, HIGH);
}
}
handleKeypad(); // 按键处理:调整阈值、查看历史、手动模式等
}
关键特性
- 死区宽度 ΔT = 2℃:可通过按键在 0.5-5℃ 范围内调节,平衡控制精度与动作频次。
- 非阻塞定时:采用
millis()轮询,不阻塞按键响应与串口通信。 - 传感器异常保护:连续 3 次读取 NaN 则报警并锁定输出,防止失控。
- 掉电记忆:阈值与状态写入 EEPROM,上电自动恢复。
软件模块设计
任务调度
主循环采用“时间片轮询+状态机”架构,包含四个并发任务:
- 传感器采集任务:2s 周期读取 DHT22,CRC 校验,异常重试。
- 控制判决任务:滞回比较器逻辑,驱动 LED/继电器(预留)。
- 显示刷新任务:1s 更新 LCD 实时温湿度、设定值、系统状态图标。
- 按键扫描任务:50ms 去抖扫描 5 键,支持短按/长按组合功能。
菜单系统
- 主界面:实时温湿度 + 制冷状态图标 + 上/下限值
- 设置菜单:上限/下限温度、死区宽度、温度单位(℃/℉)、背光亮度
- 历史曲线:最近 24h 温度折线图(利用 LCD 自定义字符绘制)
- 手动模式:强制开启/关闭制冷,用于测试执行器
电路原理图要点
- DHT22 数据线接 10kΩ 上拉至 5V,建议在传感器端并联 0.1μF 滤波电容。
- LED 串联 330Ω 限流电阻,共阴接地,阳极分别接 D2/D3。
- LCD Keypad Shield 直接堆叠于 Arduino 101 顶部,注意引脚冲突(D12 被占用,需飞线改接 DHT22)。
- 预留 5V/3.3V/GND 排针,便于扩展继电器模块控制真实压缩机/加热丝。
测试与验证
- 基准测试:恒温箱设定 20℃→30℃ 循环,记录 LED 翻转温度点,验证滞回宽度一致性。
- 抗干扰测试:旁路通讯干扰源(手机、对讲机),观察读数稳定性。
- 长时运行:连续 72h 供电,监测内存泄漏、时钟漂移、按键失灵情况。
- 用户体验:邀请非专业人员完成“修改上限至 28℃”任务,记录操作步骤与错误率。
工程化改进方向
- 替换为 PT100/热电偶 + MAX31865,提升工业级精度与量程。
- 引入 PID 算法替代滞回,配合固态继电器相位控制,实现平滑调功。
- 增加 RS485/Modbus 接口,接入 SCADA 系统集中管理。
- 设计专用 PCB,集成隔离电源、看门狗、浪涌防护,满足 EMC 标准。
- 增加数据记录功能(SD 卡/Flash),支持导出 CSV 供质量追溯。
制造工艺
- Arduino 数字骰子:LCD 显示随机点数的电子骰子
- 智能窗帘:基于Arduino与太阳能的自动光控系统
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- Arduino 电源控制中心:N-FET/P-FET/继电器/RTC 多功能扩展板
- Arduino + DHT11 + 以太网盾板温湿度数据记录仪
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- DIY 钢铁侠人偶:Arduino 控制超声波触发音效与灯光
- 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- 打造功能完整的 Arduino 驱动 3D 打印机械臂:分步指南
- DIY Arduino 加湿器控制器:继电器安全控制高压电路
- 非接触体温筛查闸机:Arduino MKR1000 + 红外测温 + 舵机控制