1. 项目背景与核心功能解析
作为一名在嵌入式领域摸爬滚打多年的工程师,我最近完成了一个特别有意义的项目——基于STM32的智能奶瓶系统。这个项目的初衷源于我表妹作为新手妈妈的困扰:半夜冲奶粉时总要反复试温,既担心烫着宝宝又怕奶凉了闹肚子。市面上的智能奶瓶要么功能单一,要么价格昂贵,于是决定自己动手打造一个全能型解决方案。
这个智能奶瓶系统实现了七大核心功能:
- 精准称重:采用HX711模块实现±1g精度测量,可显示剩余奶量
- 非接触测温:红外传感器避免传统探头污染奶液
- 三段式温控:25-35℃(适宜饮用)、35-50℃(需冷却)、>50℃(危险)三色LED警示
- 智能恒温:PID算法控制加热片,温差控制在±1℃
- 双重报警:超过50℃时蜂鸣器+APP推送提醒
- 双模控制:物理按键+手机APP远程操控
- 低功耗设计:待机电流<10mA,连续工作8小时
关键设计选择:为什么选用非接触式测温?传统NTC探头需要接触液体,存在卫生隐患。我们选用的MLX90614红外传感器通过测量瓶壁温度推算奶温,实测误差<±0.5℃。
2. 硬件架构深度拆解
2.1 主控电路设计
选择STM32F103C8T6作为主控芯片绝非偶然。这款Cortex-M3内核的MCU具有:
- 72MHz主频满足实时控制需求
- 12位ADC确保温度采集精度
- 多达37个GPIO接齐所有外设
- 硬件I2C接口驱动OLED屏更稳定
晶振电路采用8MHz主频+32.768kHz RTC双振荡器设计,既保证系统时钟精度,又为未来扩展计时功能预留空间。复位电路特别加入了手动复位按钮,这在调试阶段救了我无数次——当程序跑飞时,不用拔电源就能重启系统。
2.2 传感器模块选型对比
称重模块:
- 选项A:HX711(24位ADC)+应变片
- 选项B:MPX5010压力传感器
最终选择HX711方案,因其: - 分辨率高达1/8,000,000
- 自带稳压电路,抗干扰强
- 成本仅需15元
温度传感器:
测试了三种方案后选定MLX90614:
- DS18B20(接触式,需插入奶液)
- NTC热敏电阻(线性度差)
- MLX90614(非接触,±0.5℃精度)
2.3 供电系统设计
采用3.7V锂电池+TPS61030升压方案:
- 输入电压:3.0-4.2V
- 输出电压:5V/1A
- 转换效率>90%
特别加入LC滤波电路,消除加热片启停时的电压波动对MCU的影响。
3. 软件实现关键细节
3.1 主程序流程图解
c复制void main() {
hardware_init(); // 硬件初始化
wifi_connect(); // 连接云平台
while(1) {
read_sensors(); // 采集数据
update_display();// 刷新屏幕
temp_control(); // 温度控制
check_alarm(); // 报警检测
handle_uart(); // 处理APP指令
}
}
3.2 PID恒温算法实现
采用位置式PID控制加热片:
c复制float PID_Control(float set_temp, float real_temp) {
static float err_sum = 0, last_err = 0;
float err = set_temp - real_temp;
err_sum += err;
float output = KP*err + KI*err_sum + KD*(err-last_err);
last_err = err;
return constrain(output, 0, 100); // 限制PWM范围
}
参数整定经验:
- KP=5.0(比例项快速响应)
- KI=0.1(消除静差)
- KD=1.5(抑制超调)
3.3 WiFi通信协议设计
自定义精简协议格式:
code复制[HEAD][CMD][LEN][DATA][CRC]
- HEAD:0xAA 0x55
- CMD:0x01(温度设置)
- LEN:数据长度
- DATA:具体参数
- CRC:校验和
实测在家庭路由器环境下,指令响应时间<200ms,丢包率<0.1%。
4. 制作过程全记录
4.1 PCB焊接避坑指南
-
焊接顺序:先贴片后直插,先低后高
- 首焊STM32(用热风枪300℃)
- 次焊阻容元件
- 最后接插件
-
致命错误:第一次把HX711的VCC和GND接反,冒烟后才发现。教训是:
- 通电前必须用万用表测短路
- 关键接口加防反接二极管
-
OLED安装:排针先焊一边定位,冷却后再焊另一边,避免屏幕歪斜。
4.2 结构组装技巧
奶瓶支架用3D打印制作,注意:
- 留出传感器探测窗口
- 加热片与瓶底间距3mm最佳
- LED灯珠朝向用户视角
5. 实测数据与优化
5.1 温度控制性能测试
设定40℃恒温,实测数据:
| 时间(min) | 温度(℃) | 加热占比 |
|---|---|---|
| 0 | 25 | 100% |
| 1 | 34 | 80% |
| 2 | 38 | 50% |
| 3 | 40 | 30% |
| 5 | 39.8-40.2 | 25%-35% |
5.2 典型问题排查
问题1:称重数值漂移
- 现象:静止时重量值缓慢变化
- 排查:
- 检查HX711基准电压(应稳定在1.25V)
- 发现应变片胶水未完全固化
- 解决:重新固定传感器,预热10分钟后再校准
问题2:WiFi频繁断开
- 现象:平均5分钟断连一次
- 排查:
- 用AT指令查信号强度(RSSI>-70dBm)
- 发现是电源文波导致
- 解决:在ESP8266电源端并联470μF电容
6. 扩展改进思路
-
低功耗优化:
- 加入加速度计检测拿起动作
- 静止时进入深度睡眠(电流<1mA)
-
奶量预测:
- 记录每次喂养量
- 通过历史数据预测下次需求
-
APP功能增强:
- 喂养记录统计
- 温度变化曲线
- 剩余奶量提醒
这个项目从构思到完成历时两个月,期间经历了三次PCB改版、五次算法调整。最让我自豪的是,实测恒温精度达到±0.3℃,远超市售产品。表妹使用三个月后的反馈是:"再也不用手腕试温了,夜里喂奶能多睡半小时!"
对于想复现的朋友,建议先从Proteus仿真开始,逐步搭建硬件。关键是要做好传感器校准,这是精度保证的基础。所有源码和PCB文件我都开源在GitHub上(搜索SmartBottle_STM32),欢迎交流改进。