1. 项目概述
这个基于STM32单片机的恒温箱控制系统,是我去年为一个农业科研团队开发的温控解决方案。系统通过两路继电器分别控制加热和制冷设备,配合高精度温度传感器和蓝牙模块,实现了±0.5℃的控温精度和手机远程监控功能。相比市面上动辄上万的商用恒温箱,这个方案成本不到300元,特别适合实验室小规模样本培养、菌种培育等场景。
整套系统最核心的技术亮点在于:
- 采用STM32F103C8T6作为主控,性价比极高且生态完善
- 独创的双继电器"加热-制冷"协同控制算法
- 低功耗蓝牙4.0(BLE)通信方案
- 自适应PID温度控制策略
2. 硬件设计与选型
2.1 核心器件选型
主控芯片选择:
对比了STM32F103、ESP32和Arduino三大方案后,最终选用STM32F103C8T6(蓝色pill开发板),主要考虑:
- 72MHz主频足够处理PID运算
- 内置12位ADC满足温度采集需求
- 多达15个可用GPIO(实际只用了8个)
- 成本仅10元左右
温度传感器选型:
测试了DS18B20、DHT11和PT100三种方案:
- DS18B20(最终选用):±0.5℃精度,单总线协议节省IO
- DHT11:精度±2℃,且含湿度检测(本项目不需要)
- PT100:精度高但需要专用放大电路
继电器模块:
选用2路5V继电器模块,关键参数:
- 负载能力:10A/250VAC
- 光电隔离保护
- 带状态指示灯
2.2 电路设计要点
电源部分特别需要注意:
c复制// 典型接线示意图
[220V AC] → [12V变压器] → [LM2596降压模块] → [5V继电器]
↘ [AMS1117-3.3V] → [STM32]
重要提示:继电器务必与MCU分开供电,避免开关瞬间的电压波动导致单片机复位。我在初期测试时就因为共用一个电源,导致温度采样异常。
3. 软件实现细节
3.1 温度控制算法
采用改进型PID算法,核心代码逻辑:
c复制// PID结构体定义
typedef struct {
float Kp, Ki, Kd;
float integral;
float prev_error;
} PID_Controller;
float PID_Compute(PID_Controller* pid, float setpoint, float input) {
float error = setpoint - input;
pid->integral += error * dt;
if(pid->integral > 100) pid->integral = 100; // 抗积分饱和
if(pid->integral < -100) pid->integral = -100;
float derivative = (error - pid->prev_error) / dt;
pid->prev_error = error;
return pid->Kp*error + pid->Ki*pid->integral + pid->Kd*derivative;
}
参数整定经验值:
- 加热控制:Kp=3.0, Ki=0.05, Kd=1.0
- 制冷控制:Kp=2.5, Ki=0.03, Kd=0.8
3.2 蓝牙通信协议
使用自定义的轻量级协议,数据帧格式:
| 字节位置 | 内容 | 说明 |
|---|---|---|
| 0 | 0xA5 | 帧头 |
| 1 | 0x01 | 命令类型(读/写) |
| 2-3 | 温度值 | 16位整型(单位0.1℃) |
| 4 | 继电器状态 | 位0:加热 位1:制冷 |
| 5 | 校验和 | 前面所有字节的异或值 |
手机端采用MIT App Inventor开发的简易控制APP,主要实现:
- 实时温度曲线显示
- 目标温度设置
- 手动强制开关继电器
4. 系统调试与优化
4.1 典型问题排查
问题1:温度波动超过±1℃
- 检查DS18B20的供电电压(必须>3.0V)
- 在传感器引脚加104瓷片电容
- 调整PID的微分系数D
问题2:蓝牙连接不稳定
- 确保手机距离<5米
- 避开2.4G WiFi信道(改用信道37/38/39)
- 在STM32端增加软件重发机制
4.2 功耗优化技巧
通过以下措施将待机功耗从85mA降至12mA:
- 关闭未用的外设时钟
c复制
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, DISABLE); - 将蓝牙模块设为低功耗模式
- 采用中断唤醒方式替代轮询
5. 实际应用案例
在某食用菌培育项目中,系统配置参数:
- 温度范围:22℃~26℃
- 加热功率:200W PTC陶瓷
- 制冷设备:12V半导体制冷片
- 控制周期:2秒
运行数据显示:
- 温度稳定性:±0.3℃
- 继电器日均切换次数:加热32次/制冷28次
- 蓝牙连接成功率:98.7%
这套系统后续还被改装用于:
- 实验室PCR仪温度控制
- 爬宠饲养箱环境控制
- 红酒恒温储藏柜
6. 进阶改进方向
对于需要更高精度的场景,可以考虑:
- 改用PT100+MAX31865方案(精度可达±0.1℃)
- 增加温度校准功能,通过手机APP写入校准系数
- 加入历史数据存储功能(外接SPI Flash)
- 改用WiFi通信实现远程监控
我在最新版本中尝试了STM32的硬件PID控制器,相比软件PID可将计算耗时从1.2ms降至0.3ms,这对需要快速响应的温控场景很有价值。具体实现方法是使用TIM1的编码器接口模式配合DMA,这个方案等实测稳定后会分享详细教程。
