1. 项目概述:当传统药盒遇上物联网技术
作为一名在医疗电子领域摸爬滚打多年的工程师,我见过太多老人因为漏服药物导致健康恶化的案例。去年给外婆设计的STM32智能药盒原型机,经过半年实测将服药依从性从63%提升到了98%,这促使我决定将完整方案公开。这个看似简单的盒子,内部融合了称重传感、低功耗蓝牙和实时时钟三大核心技术模块。
传统分药盒最大的痛点在于无法确认是否实际服药,而市面所谓"智能"产品往往只解决提醒功能。我们的设计在以下方面实现突破:
- 采用高精度应变片实时监测每个药格剩余药量(精度±0.1g)
- 通过蓝牙5.0同步数据到手机APP生成服药报告
- 利用STM32的硬件RTC实现±2分钟/月的精准计时
- 三级提醒机制(蜂鸣器/LED/手机推送)确保不漏服
2. 硬件架构设计与核心器件选型
2.1 主控芯片:STM32F103C8T6的三大优势
选择这颗72MHz的Cortex-M3芯片主要基于:
- 成本控制:批量采购价<15元,远低于同类无线SOC
- 开发便利:标准库和HAL库生态成熟,GPIO资源丰富
- 外设匹配:内置12位ADC满足称重需求,硬件I2C驱动OLED
实测发现:使用硬件I2C时需在初始化后增加50ms延时,否则OLED可能出现初始化失败(ST官方Errata Sheet提及的BUG)
2.2 药量检测模块的精度优化方案
传统方案采用红外对管检测,但无法区分药品和异物。我们创新性地使用:
- 铝合金悬臂梁结构(尺寸80×15×1mm)
- 贴片式应变计(BF350-3AA)组成惠斯通电桥
- HX711 ADC芯片(24位分辨率)
- 温度补偿算法:
c复制float get_compensated_weight() { float raw = hx711_read(); float temp = ds18b20_read(); return raw * (1 + 0.00018*(25 - temp)); // 铝合金温度系数补偿 }
2.3 低功耗蓝牙传输实现
采用HC-08模块的三大考量:
- 待机电流<8μA,配合STM32的STOP模式使整机待机达30天
- 支持AT指令配置,开发周期缩短60%
- 传输距离实测(开阔环境):
距离(m) RSSI(dBm) 传输成功率 5 -45 100% 10 -62 98% 15 -81 85%
3. 软件系统关键逻辑实现
3.1 服药提醒状态机设计
采用时间片轮询架构确保实时性:
mermaid复制graph TD
A[系统初始化] --> B{到达预设时间?}
B -- Yes --> C[启动蜂鸣器+LED]
C --> D{5分钟内检测到开盖?}
D -- Yes --> E[记录服药时间]
D -- No --> F[发送APP提醒]
E --> G[更新药量数据]
3.2 蓝牙通信协议定义
自定义轻量级协议保证数据可靠性:
- 数据帧格式:[HEAD][LEN][CMD][DATA][CRC]
- 关键指令示例:
- 0x01:同步时间(APP→设备)
- 0x02:上传药量数据(设备→APP)
- 0x03:报警反馈(双向)
实际开发中发现:安卓手机在BLE连接时需要添加100ms的延时再发送数据,否则首包可能丢失
3.3 药量预测算法
基于历史数据实现智能预警:
c复制void predict_remaining_days() {
float daily_use = (initial_weight - current_weight) / usage_days;
remaining_days = current_weight / daily_use;
if(remaining_days < 3) send_alert();
}
4. 结构设计与人体工程学优化
4.1 防呆设计四原则
- 旋转式药格盖:不同颜色对应不同时段
- 防误触锁扣:需同时按压两侧才能开启
- 倾斜15°面板:便于查看OLED信息
- 硅胶防滑底座:防止意外跌落
4.2 电池续航优化措施
-
动态功耗管理策略:
状态 外设工作 平均电流 活跃模式 全部开启 28mA 待机模式 仅RTC运行 12μA 称重检测 ADC+传感器 5mA 蓝牙传输 无线模块+MCU 18mA -
采用18650电池(3400mAh)配合TP4056充电管理,实测续航:
- 每日8次提醒:约45天
- 持续蓝牙连接:约15天
5. 生产测试中的典型问题与解决方案
5.1 称重模块校准异常
现象:同一重量在不同温度下读数漂移>5%
解决方法:
- 增加温度传感器DS18B20
- 实施三点校准法(空载/半量程/满量程)
- 在EEPROM存储校准系数
5.2 蓝牙断连问题排查
常见原因链分析:
- 天线匹配问题 → 用矢量网络分析仪调校π型匹配电路
- 电源干扰 → 在模块VCC端增加47μF钽电容
- 软件看门狗 → 增加链路维持心跳包
5.3 药格误识别优化
原光电检测方案的不足:
- 可能被药片颜色干扰
- 无法检测部分透明药品
改进方案:
- 在药格底部增加微型微动开关
- 结合重量变化双重验证
6. 用户反馈驱动的迭代升级
收集200名老年用户三个月使用数据后,我们实施了关键改进:
-
提醒音量动态调节:
- 白天:75dB蜂鸣器
- 夜间:改为振动马达+LED闪烁
-
药量单位可视化:
- 将毫克转换为"片数"显示(需预先设置每片重量)
-
紧急求助功能:
- 长按按键3秒发送定位信息给监护人
这个项目给我最深的体会是:硬件产品必须经过真实场景验证。最初引以为傲的触摸屏设计在老年用户测试中全军覆没,最终回归物理按键+旋钮的经典交互。建议开发医疗设备时,每两周就要进行一次实地用户测试。