1. 项目概述
这个基于STM32的智能鞋柜项目,是我去年花了三个月时间从零开始设计实现的完整解决方案。传统鞋柜最大的痛点就是环境控制问题——鞋子放久了容易发霉、产生异味,尤其在南方的梅雨季节更是让人头疼。市面上虽然有一些智能鞋柜产品,但要么功能单一,要么价格昂贵。于是我决定用STM32F103C8T6这款性价比极高的单片机为核心,打造一个功能全面但成本可控的智能鞋柜系统。
整个系统最核心的创新点在于实现了"感知-决策-执行"的完整闭环:通过多种传感器实时监测鞋柜内部环境,当检测到异常时自动触发相应的调控措施。比如湿度超标就启动除湿,检测到粉尘就自动通风,还能定时进行紫外线消毒。所有环境参数和系统状态都能通过OLED屏直观显示,用户也可以通过手机APP远程查看和控制。
2. 系统架构设计
2.1 硬件架构
整个硬件系统采用模块化设计,主要分为以下几个部分:
-
主控模块:STM32F103C8T6最小系统板,这是整个系统的大脑。选择这款芯片主要考虑三点:72MHz主频足够处理多传感器数据;丰富的外设接口(5个USART、2个I2C、3个SPI、2个ADC);以及超高的性价比(单价不到10元)。
-
传感器阵列:
- DHT11温湿度传感器:监测鞋柜内温湿度
- GP2Y1010AU0F PM2.5传感器:检测粉尘浓度
- MQ-135空气质量传感器:检测有害气体
- E18-D80NK光电传感器:检测柜门开关状态
- GL5516光敏电阻:检测光照强度
-
执行机构:
- 5V加热片:用于升温除湿
- 散热风扇:用于通风换气
- UV-C紫外线灯管:用于杀菌消毒
- LED照明灯:柜内照明
- 有源蜂鸣器:异常报警
-
人机交互模块:
- 0.96寸OLED显示屏(SSD1306驱动)
- 6个轻触按键
- BT04A蓝牙4.0模块
-
电源系统:
- 主电源:12V/2A适配器
- 电压转换:LM2596降5V给执行机构
- AMS1117-3.3V给主控和传感器供电
2.2 软件架构
软件采用分层设计,在Keil MDK环境下用C语言开发:
-
硬件抽象层(HAL):封装了所有外设的底层驱动,包括:
- 各传感器的数据采集接口
- OLED显示驱动
- 蓝牙通信协议栈
- PWM输出控制
-
业务逻辑层:实现核心功能逻辑
c复制void System_Task(void) { Sensor_Update(); // 更新所有传感器数据 Env_Control(); // 环境调控逻辑 Display_Update(); // 刷新OLED显示 BT_Process(); // 处理蓝牙通信 } -
应用层:处理用户交互和系统配置
3. 关键功能实现
3.1 多传感器数据融合
环境监测的准确性直接影响调控效果。项目中采用了多种传感器,需要解决几个关键问题:
-
DHT11温湿度采集:
- 单总线协议,需要严格遵循时序
- 实际测试发现,连续读取间隔需大于2秒
- 加入了CRC校验确保数据可靠性
-
粉尘传感器数据处理:
- GP2Y1010AU0F输出的是模拟电压
- 需要ADC采集后进行线性化处理
- 实测电压与粉尘浓度的换算公式:
c复制// 电压(mV)转浓度(ug/m3) float voltage = ADC_Value * 3300.0 / 4095; float density = 0.17 * voltage - 0.1;
-
传感器数据滤波:
- 采用滑动平均滤波算法
- 设置5个样本的窗口大小
- 有效消除了随机干扰
3.2 智能调控逻辑
系统的自动调控逻辑是核心价值所在,主要实现以下功能:
-
温湿度控制:
- 温度低于18℃:启动加热片
- 湿度高于65%:启动风扇
- 采用PID算法实现平滑控制
-
空气质量调控:
- PM2.5 > 75μg/m³:启动风扇+报警
- MQ-135值 > 600:启动风扇+报警
- 加入30秒延时防止误触发
-
智能消毒:
- 柜门关闭持续30分钟后
- 启动UV灯消毒15分钟
- 柜门打开立即关闭UV灯
3.3 蓝牙远程控制
通过BT04A模块实现手机APP连接,关键点包括:
-
通信协议设计:
- 自定义简单高效的帧结构
- 包含起始符、长度、命令字、数据、校验和
- 支持查询和设置两种操作
-
数据同步机制:
- 定时(每10秒)上传传感器数据
- 状态变化时立即推送通知
- 支持历史数据查询
-
APP交互设计:
- 开发了简易Android控制端
- 显示实时环境数据曲线
- 支持手动控制各执行机构
4. 电路设计要点
4.1 传感器接口电路
不同传感器需要不同的接口设计:
-
模拟传感器电路:
- PM2.5和MQ-135输出模拟信号
- 需要RC滤波电路(10KΩ+0.1μF)
- ADC基准电压使用3.3V
-
数字传感器电路:
- DHT11数据线加上拉电阻(4.7KΩ)
- 光电传感器输出加缓冲电路
-
抗干扰设计:
- 传感器电源并联0.1μF去耦电容
- 信号线尽量短
- 避免与大电流线路平行走线
4.2 执行机构驱动
执行机构多为大电流设备,需要特别注意:
-
继电器驱动电路:
- 使用ULN2003达林顿阵列驱动
- 继电器线圈反并联续流二极管
- 触点容量5A/250VAC
-
PWM控制:
- 风扇速度通过PWM调节
- 使用TIM3_CH1输出PWM波
- 频率设置为25kHz避免噪音
-
安全隔离:
- 强电部分与弱电完全隔离
- 保持8mm以上爬电距离
- 使用光耦隔离控制信号
5. 软件开发关键点
5.1 实时操作系统选择
虽然可以使用裸机轮询,但为了更好的实时性,我选择了FreeRTOS:
-
任务划分:
- Sensor_Task:传感器数据采集
- Control_Task:环境调控
- Display_Task:界面刷新
- BT_Task:蓝牙通信
-
任务优先级:
- 控制任务优先级最高
- 蓝牙任务使用队列通知
-
内存管理:
- 静态分配所有任务栈空间
- 使用FreeRTOS自带的内存管理
5.2 低功耗优化
虽然接市电,但仍做了功耗优化:
-
动态时钟调节:
- 空闲时降低主频到36MHz
- 使用Tickless模式
-
传感器采样策略:
- 温湿度每10秒采样一次
- 粉尘传感器每30秒采样
- 光敏传感器仅在开柜门时采样
-
显示控制:
- 无操作30秒后降低亮度
- 2分钟后关闭背光
6. 制作与调试经验
6.1 结构设计要点
-
传感器布局:
- 温湿度传感器放在柜体中部
- 粉尘传感器靠近底部
- UV灯安装在顶部
-
风道设计:
- 进气口在底部
- 出气口在顶部
- 形成对流循环
-
安全考虑:
- UV灯必须有物理遮挡
- 加热片温度不超过50℃
- 所有线缆加护套
6.2 调试技巧分享
-
传感器校准:
- DHT11与标准温湿度计对比
- 粉尘传感器用香烟测试
- MQ-135用酒精棉片测试
-
故障排查:
- 使用逻辑分析仪抓时序
- 分段测试各模块功能
- 加入详细的调试日志
-
性能优化:
- 使用DMA传输ADC数据
- 关键代码用寄存器操作
- 优化算法减少浮点运算
7. 项目改进方向
经过实际使用,发现还有优化空间:
-
增加WiFi连接:
- 替换蓝牙为ESP8266
- 支持云端数据存储
- 实现微信小程序控制
-
加入机器学习:
- 学习用户使用习惯
- 预测最佳消毒时间
- 自适应调节阈值
-
提升续航能力:
- 加入锂电池备用电源
- 太阳能充电功能
- 深度睡眠模式
这个项目从构思到实现共耗时3个月,物料成本约200元,但实现了远超同类商业产品的功能。最让我自豪的是它的稳定性——已经连续运行半年多没有出现任何故障。通过这个项目,我不仅深入掌握了STM32的各种外设使用,更锻炼了从需求分析到产品落地的全流程开发能力。
