1. 项目概述
浴室环境控制一直是个让人头疼的问题。作为一个经常被水汽困扰的南方人,我深知镜面起雾、空气潮湿、温度不适带来的烦恼。这次我用STM32设计了一套智能控制系统,能够自动调节浴室温度、湿度和空气质量,让每次沐浴都成为享受。
这个系统核心在于实时监测和智能调节。通过多个传感器采集环境数据,STM32进行分析判断,再控制相应设备工作。整个系统成本控制在200元以内,适合家庭DIY改造。下面我会详细讲解设计思路、硬件选型、程序实现和调试经验。
2. 硬件设计与选型
2.1 主控芯片选择
选用STM32F103C8T6作为主控,主要考虑以下几点:
- 72MHz主频足够处理多个传感器数据
- 内置ADC方便读取模拟信号
- 丰富的外设接口(I2C、SPI、USART等)
- 价格仅10元左右,性价比极高
- 完善的开发环境和丰富的资料
相比Arduino,STM32性能更强且更便宜。虽然学习曲线稍陡,但对于这种需要精确控制的项目更合适。
2.2 传感器选型与配置
2.2.1 温度检测
使用两个DS18B20数字温度传感器:
- 一个检测环境温度(安装在墙面)
- 一个检测卫浴温度(靠近淋浴区)
选择理由:
- 数字输出,抗干扰能力强
- 精度±0.5℃满足需求
- 单总线接口节省IO口
- 防水型号可直接接触水汽
注意:卫浴区的传感器必须选用防水型号,并做好密封处理。
2.2.2 湿度检测
使用DHT11温湿度传感器:
- 湿度测量范围20-90%RH
- 温度测量范围0-50℃
- 数字信号输出
- 成本仅几元钱
虽然精度不如DHT22,但对于浴室环境监测已经足够。
2.2.3 空气质量检测
选用MQ-135气体传感器:
- 检测NH3、NOx、苯、CO2等
- 模拟量输出
- 需要预热时间约20分钟
- 价格约15元
注意:需要定期校准,建议每3个月用标准气体校准一次。
2.3 执行机构设计
2.3.1 温度调节
采用PTC加热器+小风扇组合:
- PTC加热功率500W
- 12V直流风扇用于散热
- 通过继电器控制
- 安全温度保护设计
制冷方案:
- 使用电脑散热风扇
- 外接通风管道
2.3.2 通风除湿
选用浴室专用换气扇:
- 电压220V AC
- 风量80m³/h
- 通过固态继电器控制
- 带防潮设计
2.4 电路设计要点
-
电源模块:
- 220V转5V/2A(供主控)
- 220V转12V/3A(供执行机构)
- 加入保险丝和过压保护
-
信号隔离:
- 高低压部分用光耦隔离
- 继电器线圈加续流二极管
-
PCB设计:
- 高压走线间距>3mm
- 传感器信号线加屏蔽
- 预留测试点
3. 软件设计与实现
3.1 开发环境搭建
使用Keil MDK开发:
- 安装STM32CubeMX配置外设
- 生成初始化代码
- 移植HAL库
- 添加必要的中间件(FreeRTOS)
3.2 传感器驱动开发
3.2.1 DS18B20驱动
关键点:
- 严格时序控制(us级延时)
- CRC校验确保数据准确
- 多设备识别处理
c复制// 示例读取温度代码
float DS18B20_ReadTemp(void)
{
uint8_t temp[2];
DS18B20_Start();
DS18B20_Read(temp, 2);
return (float)((temp[1]<<8)|temp[0])/16.0;
}
3.2.2 DHT11驱动
注意:
- 起始信号后等待20ms
- 40bit数据时序解析
- 校验和验证
3.2.3 MQ-135数据处理
需要:
- ADC采样(12位精度)
- 软件滤波(移动平均)
- 浓度换算算法
3.3 控制逻辑实现
3.3.1 温度控制算法
采用PID控制:
c复制typedef struct {
float Kp, Ki, Kd;
float integral;
float prev_error;
} PID;
float PID_Calculate(PID* pid, float setpoint, float input)
{
float error = setpoint - input;
pid->integral += error;
float derivative = error - pid->prev_error;
pid->prev_error = error;
return pid->Kp*error + pid->Ki*pid->integral + pid->Kd*derivative;
}
参数整定:
- Kp=2.0, Ki=0.5, Kd=1.0(初始值)
- 通过实际测试调整
3.3.2 湿度控制策略
分级控制:
- 湿度<60%:不动作
- 60-70%:低速换气
- 70-80%:高速换气
-
80%:换气+加热除湿
3.3.3 空气质量控制
动态阈值:
- 基准值:凌晨4点自动校准
- 超标判断:当前值>基准值30%
3.4 用户界面设计
-
OLED显示:
- 实时数据展示
- 设置界面
- 状态指示
-
按键控制:
- 模式切换
- 参数设置
- 手动控制
-
状态指示灯:
- 不同颜色表示不同状态
- 蜂鸣器报警提示
4. 系统调试与优化
4.1 传感器校准
-
温度传感器:
- 冰水混合物校准0℃
- 沸水校准100℃(考虑海拔修正)
-
湿度传感器:
- 饱和盐溶液校准
- 75%RH(NaCl溶液)
- 33%RH(MgCl2溶液)
-
气体传感器:
- 清洁空气中校准基准
- 使用标准气体校准
4.2 控制参数整定
-
PID参数调整步骤:
- 先设Ki=Kd=0
- 增大Kp至系统开始振荡
- 取振荡时Kp值的50%作为最终Kp
- 调整Ki消除静差
- 加入Kd抑制超调
-
实测参数:
- 温度控制:Kp=3.2, Ki=0.8, Kd=2.5
- 换气延时:开启后持续5分钟
4.3 抗干扰措施
-
软件滤波:
- 滑动平均(窗口大小10)
- 中值滤波
- 限幅滤波
-
硬件改进:
- 增加电源滤波电容
- 信号线加磁珠
- 良好接地
-
异常处理:
- 传感器断线检测
- 数据合理性检查
- 看门狗复位
5. 常见问题与解决方案
5.1 DS18B20读取失败
可能原因:
- 上拉电阻不合适(建议4.7K)
- 时序不精确(检查延时函数)
- 接线过长(建议<20m)
解决方法:
- 用示波器检查波形
- 降低总线速度
- 缩短接线距离
5.2 MQ-135数据不稳定
处理方案:
- 确保预热时间足够(至少20分钟)
- 增加硬件滤波电路(RC低通)
- 软件端采用滑动平均滤波
- 避免安装在气流剧烈变化处
5.3 继电器频繁动作
优化方法:
- 增加控制死区(如温度±0.5℃内不动作)
- 采用时间比例控制
- 继电器最小间隔时间设置(如30秒)
5.4 系统死机问题
排查步骤:
- 检查堆栈大小是否足够
- 添加看门狗
- 检查中断优先级配置
- 内存泄漏检测
6. 实际使用效果
经过两周的实际测试,系统表现如下:
-
温度控制:
- 设定25℃时,实际维持在24.5-25.5℃
- 加热响应时间约3分钟
- 制冷效果取决于室外温度
-
湿度控制:
- 淋浴后湿度从90%降至70%约需8分钟
- 镜面起雾现象完全消除
-
空气质量:
- CO2浓度维持在800ppm以下
- 异味及时排除
功耗情况:
- 待机:3W
- 加热状态:约500W
- 换气状态:约30W
7. 扩展改进方向
-
增加无线功能:
- 蓝牙连接手机APP
- WiFi远程监控
-
语音控制:
- 集成语音识别模块
- 支持语音指令
-
节能优化:
- 根据使用习惯学习
- 预测控制算法
-
外观设计:
- 3D打印外壳
- 防水防潮处理
这个项目从构思到实现用了约1个月时间,期间遇到了不少问题,但最终效果令人满意。特别提醒:高压部分操作务必注意安全,建议有一定电子基础的朋友尝试。
