1. 项目背景与核心价值
作为一名嵌入式开发工程师,我最近完成了一个基于STM32的智能药盒项目。这个看似简单的设备,实际上解决了老年人用药管理的三大痛点:忘记服药、重复服药和剂量错误。根据临床统计,超过50%的老年患者存在用药依从性问题,而智能药盒正是针对这一需求的技术解决方案。
传统药盒只是简单的分格容器,而我们的设计在硬件上集成了称重传感器、实时时钟和提醒模块,软件层面实现了用药记录、远程通知和剂量计算。整套系统成本控制在200元以内,比市面同类产品便宜60%以上,特别适合社区养老机构批量采购使用。
2. 硬件系统设计
2.1 核心器件选型
主控芯片选用STM32F103C8T6,这款Cortex-M3内核的MCU具有以下优势:
- 72MHz主频足够处理称重数据滤波和UI刷新
- 内置64KB Flash完美容纳我们的固件程序
- 丰富的GPIO和通信接口(3个USART、2个SPI、2个I2C)
- 价格仅15元左右,性价比极高
称重模块采用HX711+5kg称重传感器组合:
- 24位ADC分辨率,理论精度可达0.01g
- 内置128倍信号放大器,直接输出数字信号
- 成本控制在30元以内
2.2 电路设计要点
电源部分采用双路设计:
- 主电路:5V/2A电源适配器供电
- 备份电路:CR2032纽扣电池维持RTC运行
- 加入二极管防反接和LC滤波电路
传感器接口特别注意:
- HX711的DT和SCK引脚需接10K上拉电阻
- 称重传感器采用全桥接法,使用屏蔽线连接
- 在传感器供电端并联0.1μF去耦电容
3. 软件架构实现
3.1 系统任务划分
采用FreeRTOS实现多任务管理:
- 主控任务(优先级3):协调各子系统
- 称重任务(优先级4):每100ms采样一次
- UI任务(优先级2):处理按键和显示
- 通信任务(优先级1):通过蓝牙传输数据
3.2 关键算法实现
药量检测采用动态基线算法:
c复制float getMedicineWeight() {
static float baseline = 0;
float raw = HX711_Read();
if(abs(raw - baseline) > 10.0) { // 10g变化阈值
baseline = raw; // 更新基线值
}
return raw - baseline; // 返回净重
}
定时提醒使用RTC中断触发:
c复制void RTC_IRQHandler(void) {
if(RTC_GetITStatus(RTC_IT_ALRA) != RESET) {
BEEP_On(); // 触发蜂鸣器
LED_Blink(3); // LED闪烁3次
RTC_ClearITPendingBit(RTC_IT_ALRA);
}
}
4. 结构设计与人机交互
4.1 药盒机械结构
采用3D打印外壳设计要点:
- 药仓倾斜15°便于药物滑落
- 称重平台与外壳柔性连接,避免应力干扰
- 防呆设计确保药盒只能按正确方向放置
4.2 用户界面优化
OLED显示采用分级菜单:
- 主界面:当前时间+下次服药时间
- 二级菜单:各药仓剩余药量
- 设置菜单:时间设置/药品种类设置
按键反馈设计:
- 短按:确认/下一项
- 长按2秒:进入设置
- 双击:手动触发称重
5. 实际应用测试
5.1 精度测试结果
使用标准砝码测试称重模块:
| 标准值(g) | 测量值(g) | 误差 |
|---|---|---|
| 10.00 | 10.03 | +0.3% |
| 50.00 | 49.95 | -0.1% |
| 100.00 | 100.12 | +0.12% |
5.2 典型使用场景
晨间用药流程:
- 7:00 - 蜂鸣器响铃+LED闪烁
- 用户按下任意键停止提醒
- 系统自动记录本次服药时间
- 称重系统检测药量变化
- 通过蓝牙同步数据到手机APP
6. 常见问题解决方案
6.1 称重漂移问题
现象:空载时读数缓慢变化
解决方法:
- 检查传感器固定是否牢固
- 在代码中增加软件滤波:
c复制#define FILTER_LEN 10
float filterBuffer[FILTER_LEN];
float movingAverage(float newVal) {
static int index = 0;
filterBuffer[index] = newVal;
index = (index + 1) % FILTER_LEN;
float sum = 0;
for(int i=0; i<FILTER_LEN; i++) {
sum += filterBuffer[i];
}
return sum / FILTER_LEN;
}
6.2 低功耗优化
待机电流从25mA降至1.8mA的措施:
- 关闭未使用的外设时钟
- OLED采用动态刷新(仅变化时更新)
- 称重模块间歇工作(每10分钟唤醒一次)
7. 项目扩展方向
现有系统可进一步升级:
- 增加WiFi模块实现云端同步
- 加入NFC识别药品包装
- 开发语音交互功能
- 整合血压、血糖监测模块
我在实际部署中发现,老年用户更偏好物理按键+大字体显示的组合,触摸屏操作反而容易造成困扰。后续版本考虑增加应急呼叫按钮,直接联动社区医疗系统。