1. 项目概述:智能外卖柜的硬件架构与核心功能
作为一名嵌入式系统开发者,我最近完成了一个基于STM32的智能外卖存放柜项目。这个设备的核心目标是解决外卖配送"最后一公里"的痛点——当用户无法即时取餐时,外卖食品面临的温度失控、错拿丢失等问题。整套系统以STM32F103C8T6为主控,配合温度控制、身份验证和状态监测三大模块,实现了外卖的智能暂存。
选择STM32F103C8T6作为主控芯片主要基于三点考量:首先,它的72MHz主频和丰富外设(12个定时器、2个DMA控制器)能轻松处理多任务需求;其次,内置的64KB Flash和20KB SRAM足够存储我们的程序代码和临时数据;最重要的是,其3.3V工作电压与多数传感器兼容,简化了电路设计。实际使用中,这颗芯片在驱动OLED屏、处理传感器数据的同时,还能保持低于40mA的工作电流,验证了选型的合理性。
硬件架构上(如图1),系统分为五个关键部分:
- 环境感知层:DHT11温湿度传感器+HC-SR04超声波模块
- 人机交互层:0.96寸OLED屏+矩阵键盘
- 执行机构层:电磁锁+PTC加热片+散热风扇
- 通信模块:SIM800C GSM模块(短信通知)
- 控制核心:STM32最小系统
实际调试中发现,DHT11的响应速度较慢(约2秒/次),在后续版本中可考虑改用DS18B20数字温度传感器提升采样频率。
2. 核心电路设计与实现细节
2.1 电源管理电路设计
系统需要同时提供5V(继电器、GSM模块)和3.3V(MCU、传感器)电压。我们采用两级稳压方案:
- 第一级:LM2596-5.0将输入12V降压至5V
- 第二级:AMS1117-3.3将5V转换为3.3V
关键设计要点:
- 每个稳压芯片输出端并联100μF电解电容(滤低频噪声)和0.1μF陶瓷电容(滤高频噪声)
- GSM模块单独增加220μF钽电容应对瞬时电流(发送短信时电流可达2A)
- 所有数字器件电源入口放置10Ω电阻+0.1μF电容组成π型滤波
c复制// 电源状态监测代码示例
void PWR_Check(void) {
float vol = ADC_Read(0) * 3.3 / 4096 * 2; // 分压电阻1:1
if(vol < 3.0) {
OLED_ShowString(1,1,"Low Power!");
GSM_SendAlert("System voltage low!");
}
}
2.2 温度控制模块实现
温度控制采用PID算法,硬件由以下部分组成:
- 加热元件:5V PTC陶瓷加热片(最大功率15W)
- 冷却元件:4028散热风扇(配半导体制冷片)
- 温度采集:DHT11(精度±2℃,测量范围0-50℃)
控制逻辑如下表所示:
| 温度区间 | 执行动作 | 参数设置 |
|---|---|---|
| <40℃ | 开启加热,占空比PID调节 | Kp=2.5, Ki=0.1, Kd=0.5 |
| 40-60℃ | 维持状态(最佳食用温度) | - |
| >60℃ | 开启风扇冷却,占空比PID调节 | Kp=3.0, Ki=0.2, Kd=1.0 |
实测数据表明,系统能在8分钟内将柜内温度从25℃升至60℃,稳态控制精度可达±1.5℃。
3. 软件系统架构与关键算法
3.1 主程序流程图设计
采用时间片轮询架构,确保各任务实时性:
- 上电初始化(外设、变量、中断)
- 进入主循环:
- 每100ms:扫描键盘输入
- 每1s:读取传感器数据
- 每5s:更新OLED显示
- 事件驱动:短信到达中断、开门信号中断
c复制void main(void) {
System_Init();
while(1) {
if(TIM2_100msFlag) {
Key_Scan();
TIM2_100msFlag = 0;
}
if(TIM3_1sFlag) {
Sensor_Update();
TIM3_1sFlag = 0;
}
}
}
3.2 超声波测距算法优化
原始HC-SR04模块的测距公式为:
$$ distance = \frac{340 \times t}{2} $$
其中t为回波时间(μs)
在实际应用中,我们发现两个问题:
- 高温下声速变化导致误差(每℃变化0.6m/s)
- 多次反射产生虚假回波
改进措施:
- 加入温度补偿(通过DHT11数据):
$$ V_{sound} = 331.4 + 0.6 \times T $$ - 采用滑动窗口滤波(窗口大小=5):
c复制#define WINDOW_SIZE 5 float distance_filter() { static float buffer[WINDOW_SIZE]; static int index = 0; buffer[index++] = Get_HCSR04_Distance(); if(index >= WINDOW_SIZE) index = 0; return (buffer[0]+buffer[1]+buffer[2]+buffer[3]+buffer[4])/5; }
优化后测距误差从±3mm降低到±1mm。
4. 系统调试与性能测试
4.1 硬件测试项目
我们建立了完整的测试流程(表2):
| 测试项 | 方法 | 合格标准 | 实测结果 |
|---|---|---|---|
| 温度控制精度 | 设置40℃,记录波动范围 | ±2℃内 | ±1.5℃ |
| 电磁锁响应 | 连续触发100次 | 无卡死,动作时间<500ms | 平均响应320ms |
| 功耗测试 | 满负荷运行24小时 | 总耗电<0.5kWh | 0.42kWh |
| 短信送达率 | 发送100条验证码 | 成功率>99% | 100% |
4.2 典型问题排查记录
问题1:GSM模块频繁掉线
- 现象:发送短信时出现"ERROR"响应
- 排查:
- 测量电源纹波(正常<50mV)
- 检查SIM卡接触(良好)
- 最终发现是天线阻抗不匹配
- 解决:更换为弹簧天线,增加匹配电路
问题2:PTC加热片温度不均匀
- 现象:柜内上下温差达8℃
- 改进:
- 增加微型离心风扇强制对流
- 在加热片背面添加铝基散热板
- 效果:温差降至2℃以内
5. 应用场景扩展与优化建议
当前系统已在大学宿舍楼试点部署,数据显示:
- 平均使用频次:32次/天/柜
- 取餐时间缩短:从平均8分钟降至1分钟
- 外卖投诉率下降:67%
后续优化方向:
- 节能模式:加入人体红外感应,无人时自动降低刷新率
- 多柜组网:通过RS485总线连接多个柜体,统一管理
- 视觉识别:替换超声波传感器为摄像头+OpenMV方案
这个项目给我的深刻启示是:硬件开发必须紧密结合实际场景。例如最初设计的密码长度为6位,但实测发现用户更倾向4位简易密码。这提醒我们,技术指标的先进性必须与用户体验达成平衡。
