1. 项目背景与核心价值
最近在整理工作室设备时,发现老式温湿度计经常出现数据漂移问题。作为一个电子爱好者,我决定用单片机打造一个更可靠的家用温湿度控制器。这个项目不仅能精确监测环境参数,还能自动控制加湿器、空调等设备,特别适合对室内环境要求较高的书房、温室或电子设备间。
传统温湿度计只能被动显示数据,而我们的设计加入了以下创新点:
- 采用工业级传感器确保数据准确性
- 增加历史数据记录功能
- 实现设备联动控制
- 低功耗设计可连续工作30天
2. 硬件系统设计
2.1 核心器件选型
经过对比测试,最终确定的硬件方案如下表所示:
| 组件类型 | 选型型号 | 关键参数 | 选择理由 |
|---|---|---|---|
| 主控芯片 | STM32F103C8T6 | 72MHz主频,64KB Flash | 性价比高,外设丰富 |
| 温湿度传感器 | SHT30 | ±2%RH精度,±0.2℃精度 | I2C接口,响应快 |
| 显示模块 | 0.96寸OLED | 128x64分辨率 | 低功耗,可视角度大 |
| 执行机构 | 5V继电器模块 | 10A负载能力 | 可直接控制家电 |
| 电源模块 | AMS1117 | 5V/1A输出 | 支持USB供电 |
提示:SHT30传感器需要特别注意上电时序,首次通电后需等待至少15ms才能进行通信。
2.2 电路设计要点
原理图设计时特别注意了以下关键点:
- 传感器信号线走线尽量短,并添加10K上拉电阻
- 继电器线圈并联续流二极管(1N4007)
- 主控芯片所有未用IO口设置为模拟输入模式
- 电源输入端加入100μF电解电容滤波
实测中发现,当继电器动作时会在电源线上产生约200mV的电压波动。通过在继电器电源支路增加470μF电容后,波动降低到50mV以内。
3. 软件系统实现
3.1 程序架构设计
采用模块化编程方式,主要功能划分为:
c复制main.c // 主程序调度
sht30_driver.c // 传感器驱动
oled_show.c // 显示处理
relay_control.c // 继电器控制
data_logger.c // 数据记录
传感器数据采集采用状态机实现:
- 发送测量命令
- 等待15ms测量周期
- 读取数据并校验CRC
- 数据滤波处理
- 更新显示和控制
3.2 关键算法实现
温度控制采用增量式PID算法:
c复制float PID_Calculate(float setpoint, float actual)
{
static float last_error = 0;
static float integral = 0;
float error = setpoint - actual;
integral += error * dt;
float derivative = (error - last_error) / dt;
last_error = error;
return Kp*error + Ki*integral + Kd*derivative;
}
参数整定经验:
- 先设Ki=Kd=0,增大Kp至系统开始振荡
- 取振荡时Kp值的60%作为最终Kp
- Ki取Kp/Ti,Ti一般取振荡周期的0.5倍
- Kd取Kp*Td,Td一般取Ti的1/8
4. 系统调试与优化
4.1 传感器校准方法
发现传感器存在约3%的湿度偏差,采用两点校准法:
- 在干燥环境中(如装有硅胶的密封盒)记录读数RH_dry
- 在饱和盐溶液环境(如75%RH标准盐溶液)记录读数RH_wet
- 计算校准公式:
c复制RH_true = (raw_value - RH_dry) * 75 / (RH_wet - RH_dry)
4.2 低功耗优化技巧
通过以下措施将待机功耗从25mA降至3.8mA:
- 将OLED刷新率从60Hz降至1Hz
- 采用中断唤醒模式,每10秒测量一次
- 关闭未用外设时钟
- 将未用IO口设置为模拟输入
实测发现,STM32的GPIO在输出模式下即使不工作也会消耗约0.1mA电流,这点容易被忽视。
5. 外壳设计与安装
使用3D打印制作防水外壳,注意要点:
- 传感器位置开孔直径比探头小0.5mm实现压合固定
- 顶部设计45°斜面便于查看屏幕
- 背面预留扎带孔位
- 使用透明的PLA材料方便观察指示灯
安装位置建议:
- 远离空调直吹位置
- 距离地面1.2-1.5米高度
- 避免阳光直射
- 与受控设备保持适当距离
6. 系统功能扩展
现有框架可轻松扩展以下功能:
- 通过蓝牙模块连接手机APP
- 增加CO2浓度监测
- 添加语音播报功能
- 接入智能家居系统
- 太阳能供电方案
我在继电器输出端预留了光耦隔离接口,方便后续接入220V设备时增加隔离保护。实际测试中,用这个系统成功实现了对书房除湿机的精确控制,将湿度稳定维持在50%±3%的范围内。