1. 项目概述:低成本智能药箱的设计初衷
作为一名在嵌入式医疗设备领域摸爬滚打多年的工程师,我见过太多华而不实的智能药箱方案。这次分享的STM32F103C8T6智能药箱项目,核心目标就是用最经济的方案实现最实用的功能。这款蓝色药丸大小的MCU虽然售价不到20元,但配合精心设计的模块化架构,完全能满足日常用药管理的核心需求。
这个项目的设计初衷源于两个实际痛点:一是市面主流智能药箱动辄上千元的售价让普通家庭望而却步;二是多数产品过度追求花哨功能(比如不必要的联网模块)反而增加了使用复杂度。我们的方案在物料成本控制在200元以内的前提下,实现了定时提醒、药品分类管理、存量监测等核心功能。特别适合需要长期服药的慢性病患者和独居老人使用。
2. 硬件架构设计解析
2.1 主控芯片选型考量
选择STM32F103C8T6这颗Cortex-M3内核芯片主要基于三点考量:
- 性价比优势:相比同价位国产芯片,ST的生态更成熟,开发工具链完善
- 资源匹配度:72MHz主频+64KB Flash完全满足需求,内置RTC实现低功耗计时
- 扩展能力:多达37个GPIO可灵活配置,支持SPI/I2C等常用接口
实际采购建议:推荐选择正品ST官方渠道,虽然比山寨芯片贵3-5元,但稳定性有保障。特别注意要选择LQFP48封装版本,便于手工焊接。
2.2 关键外设模块配置
整个系统采用模块化设计,主要外设包括:
- 显示模块:0.96寸OLED(SSD1306驱动,I2C接口)
- 输入模块:4x4矩阵键盘(GPIO扫描方式)
- 存储模块:AT24C02 EEPROM(存储药品信息)
- 传感器:HX711称重模块(监测药品余量)
- 报警模块:有源蜂鸣器+三色LED
各模块连接方式采用分层设计:
c复制// 典型接口初始化代码示例
void Hardware_Init(void)
{
I2C1_Init(); // OLED+EEPROM
GPIO_Key_Init(); // 矩阵键盘
HX711_Init(); // 称重传感器
}
3. 核心功能实现细节
3.1 药品定时提醒系统
这是整个项目的核心功能,实现要点包括:
- 基于STM32内置RTC的时钟校准
- 使用32.768kHz外部晶振保证计时精度
- 编写自动闰年补偿算法
- 多级提醒机制设计:
- 首次提醒:蜂鸣器短鸣+LED闪烁
- 未响应处理:5分钟后增强提醒(持续蜂鸣)
- 紧急提醒:30分钟后触发预设紧急联系人(需配合GSM模块)
c复制// 提醒任务调度逻辑
void Check_Alarm(void)
{
if(RTC_Time == Medication_Time){
Beep(1000); // 1kHz频率鸣响
LED_Blink(500); // 500ms间隔闪烁
if(++miss_count > 3) Send_Alert();
}
}
3.2 药品余量监测方案
采用称重法监测药品余量,关键实现步骤:
- 传感器校准:
- 空载时记录初始AD值
- 放入标准砝码获取比例系数
- 动态补偿算法:
- 温度漂移补偿(每8小时自动归零校准)
- 数字滤波(采用滑动平均滤波法)
实测数据:使用10kg量程HX711模块,经校准后可达±5g测量精度,完全满足药片计数需求。注意要避免传感器长期过载。
4. 低功耗优化实践
4.1 电源管理模式设计
为延长电池续航(项目采用18650锂电池供电),实施了以下优化:
-
运行模式分级:
- 活跃模式(用户操作时):全速运行
- 待机模式:关闭显示屏,CPU降频至8MHz
- 休眠模式:仅RTC运行,其他外设断电
-
功耗实测数据对比:
模式 电流消耗 唤醒时间 活跃模式 45mA - 待机模式 3.2mA <50ms 休眠模式 15μA 2s
4.2 软件层面的省电技巧
- 中断驱动设计:
- 键盘扫描改为下降沿触发
- 称重传感器数据采用DMA传输
- 时钟树优化:
- 不使用的外设时钟自动关闭
- 合理配置Flash等待周期
5. 生产测试中的经验总结
5.1 常见问题排查指南
根据首批50套样机的测试数据,整理出典型问题及解决方案:
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| OLED显示花屏 | I2C上拉电阻缺失 | 添加4.7kΩ上拉电阻 |
| 称重数据跳变 | 电源纹波过大 | 增加LC滤波电路 |
| RTC走时不准 | 晶振负载电容不匹配 | 调整匹配电容(通常6-12pF) |
| 按键响应迟钝 | 消抖时间设置过长 | 将消抖时间从50ms改为20ms |
5.2 可靠性提升建议
- 电磁兼容处理:
- 在电机驱动线路添加TVS二极管
- 敏感信号线走内层
- 结构设计注意:
- 称重传感器要避免侧向受力
- 电池仓设计防反插结构
6. 功能扩展方向探讨
虽然当前版本功能已经完备,但预留了以下扩展接口:
- 蓝牙4.0模块接口(PA9/PA10)
- 可实现手机用药记录同步
- 支持固件无线升级(OTA)
- 微型打印机接口(SPI2)
- 打印用药清单
- 生成服药记录凭证
硬件上预留的扩展焊盘位置,建议采用1.27mm间距的排针,既节省空间又方便后期扩展。软件架构上采用模块化设计,新增功能只需在app_task.c中添加相应任务即可。