当前位置: 首页 > news >正文

基于STM32的智能药箱系统开发实战:从硬件搭建到云端互联

1. 为什么需要智能药箱

记得去年我奶奶因为忘记吃药导致血压飙升住院,当时我就在想,如果能有个自动提醒吃药的装置该多好。后来发现这个问题其实困扰着很多家庭——据统计,65岁以上老年人中,有超过60%存在漏服、错服药物的情况。这就是我做智能药箱项目的初衷。

传统药箱就是个塑料盒子,而智能药箱要解决三个核心痛点:忘记吃药时间不知道还剩多少药药品存储环境不合适。我设计的这个系统用STM32做大脑,配合各种传感器,不仅能语音提醒吃药,还能监测药量、温湿度,甚至把数据传到手机APP上。

2. 硬件选型与电路设计

2.1 核心控制器选择

选STM32F103C8T6这颗芯片是经过反复对比的。它有72MHz主频、64KB Flash,关键是价格只要十几块钱。有次我贪便宜试过国产替代芯片,结果ADC精度差得离谱,最后还是换回了STM32。

2.2 传感器模块搭配

药量检测我用的是HX711+称重传感器方案,这里有个坑要注意:不同量程的传感器价格差很多。我最初选了5kg量程的,结果检测药片时精度不够,换成1kg的后分辨率能达到0.1g。

温湿度监测用DHT11就够用,成本不到10块钱。如果对精度要求高可以换SHT30,不过价格要贵四五倍。实际测试发现,药箱内部温差不大,DHT11完全能满足需求。

2.3 外围电路设计

显示部分我强烈推荐0.96寸OLED,比LCD1602省电,显示效果也好。电路连接特别简单,四根线搞定I2C通信。第一次接线时我把SDA和SCL接反了,调试了半天才发现问题。

WiFi模块选ESP8266-01S,体积小价格低。记得一定要加电平转换电路,我刚开始直接接3.3V,结果模块经常死机,后来加了AMS1117稳压才稳定。

3. 关键功能实现

3.1 药量检测算法

药量检测不是简单读取重量就行,要考虑去皮和动态校准。我的做法是:

  1. 上电时自动记录空箱重量
  2. 每次开箱后重新校准基准值
  3. 采用滑动平均滤波消除波动
// 示例代码 float get_medicine_weight() { static float base_weight = 0; float current = HX711_Read(); if(current < base_weight + 5) { // 5g阈值 base_weight = current; // 自动校准基准 } return current - base_weight; }

3.2 定时提醒功能

用STM32的RTC实现定时提醒,这里要注意备份寄存器用法。有次断电后时间重置,后来发现是没启用VBAT供电。现在我的做法是:

  • 配置RTC时钟源为LSE(32.768kHz晶振)
  • 启用RTC备份寄存器存储设置
  • 每隔1小时同步一次网络时间

3.3 云端数据传输

ESP8266连接阿里云IoT平台,我踩过三个坑:

  1. AT指令超时设置太短导致经常断连
  2. 没做心跳包维护被服务器断开
  3. JSON数据格式错误解析失败

现在稳定运行的方案是:

  • 每30秒发一次心跳包
  • 数据采用精简JSON格式
  • 加入重试机制

4. 软件设计要点

4.1 开发环境搭建

推荐用STM32CubeMX生成初始化代码,能省去大量配置时间。我习惯的配置顺序是:

  1. 时钟树配置(HSE 8MHz,PLL到72MHz)
  2. 外设使能(USART、I2C、SPI等)
  3. 中间件配置(FreeRTOS如果要用)
  4. 生成MDK-ARM工程

4.2 多任务处理

用FreeRTOS创建了三个主要任务:

  1. 传感器数据采集(优先级最高)
  2. 用户界面刷新(中等优先级)
  3. 网络通信(最低优先级)

任务间通过消息队列传递数据,比如当检测到药量不足时,会同时触发本地提醒和云端报警。

4.3 低功耗优化

为了省电做了这些优化:

  • 不用时关闭OLED背光
  • 传感器采用间歇工作模式
  • WiFi每15分钟同步一次数据
  • 主频动态调整(72MHz↔8MHz)

实测优化后待机电流从120mA降到了35mA,2000mAh电池能用三天。

5. 常见问题解决方案

5.1 传感器读数不稳定

遇到ADC跳变大的问题,可以:

  1. 在传感器电源端加0.1μF去耦电容
  2. 软件端采用中值滤波
  3. 避免与大功率器件共用电源

5.2 WiFi频繁断连

ESP8266连接不稳定的解决方法:

// 示例配置 AT+CWMODE=1 // Station模式 AT+CWJAP="SSID","password" // 连接WiFi AT+CIPRECVMODE=1 // 透传模式 AT+CIPSTART="TCP","iot.aliyun.com",1883 // 连接服务器

5.3 药箱误识别

红外感应容易受环境光干扰,我的改进方案:

  • 改用红外对射式传感器
  • 增加防抖算法(连续检测到3次才确认)
  • 安装遮光罩

6. 项目进阶方向

现在已经实现基础功能,下一步准备:

  1. 增加语音识别模块,支持声控开箱
  2. 开发微信小程序替代原APP
  3. 加入药品图片识别功能
  4. 改用锂电池供电并优化充电电路

最近测试发现,加入TFT触摸屏后用户体验提升明显,但成本增加了60块钱,这个要权衡考虑。有朋友建议加个指纹锁,我觉得对老年人来说可能操作太复杂了。

http://www.jsqmd.com/news/563950/

相关文章:

  • 163MusicLyrics:3秒获取双平台歌词的开源工具革新方案
  • 163MusicLyrics:跨平台歌词提取工具全解析
  • Ubuntu 20.04离线装MySQL 8.0.20,我踩过的那些依赖包的坑(附libaio1、libmecab2下载链接)
  • 告别Navicat!免费神器DBeaver保姆级配置教程(含中文设置与驱动加速)
  • S2-Pro模型管理利器:Ollama国内镜像源加速下载与使用
  • TensorFlow-v2.15性能优化:让你的模型训练速度提升3倍
  • 千问3.5-2B模型推理加速:利用.accelerate库优化性能
  • OpenClaw + Bedrock AgentCore SDK 实战:AI Agent 从开发到生产的完整路径
  • Qwen All-in-One效果实测:情感分析与对话生成,一个模型全搞定
  • 告别Melodic自带的老版本!保姆级教程:在Ubuntu 18.04上从Gazebo9升级到Gazebo11
  • VQF算法实战剖析:为什么它的‘近惯性系低通滤波’能吊打传统互补滤波?
  • 手把手教你用ABB机器人安全区域功能:与发那科干涉区设置的对比实操
  • 2026年PVC工作牌应用白皮书四川市场选型参考:四川PVC工作牌公司/四川PVC工作证公司/四川UV水晶标公司/选择指南 - 优质品牌商家
  • 手把手教你用DeepLabV3+(含Decoder)搞定PASCAL VOC图像分割,附TensorFlow代码
  • 别光看芯片!手把手教你用XC7A100T核心板搭建一个千兆网+光纤通信的硬件原型
  • 高速PCB设计必看:阻焊层和助焊层的5个常见误区及解决方法
  • UE5 - 动态材质与电子围栏:ArchvizExplorer与Map Border Collection的深度整合
  • 从图像到点云:手把手教你用OrbbecSDK_ROS2玩转深度相机数据(附RViz2可视化与常用服务调用)
  • 别再死记硬背了!用Wireshark抓包实战,5分钟搞懂GRE、L2TP、IPsec的区别
  • 车载激光雷达设计:如何用1550nm单模光纤优化空间光耦合(含F数、MFD选型指南)
  • 2026年知名的猫窝骨架玻纤杆/东莞玻纤/东莞玩具支撑杆玻纤推荐公司 - 行业平台推荐
  • Qt实战:用QWebEngineView打造一个带多标签页的简易浏览器(附完整源码)
  • TeXstudio 4.9.3:开源 LaTeX 编辑器新升级
  • Fay数字人框架终极指南:30分钟打造你的AI虚拟助手
  • 手把手教你用Docker部署Qwen2.5-7B,体验vLLM推理加速的魅力
  • Qwen2.5-72B-GPTQ-Int4部署教程:离线环境无网络安装与证书配置
  • Realistic Vision V5.1 GPU显存碎片整理:避免OOM的torch.cuda.memory_summary实践
  • 2026年知名的景观护栏/庭院护栏生产厂家推荐 - 行业平台推荐
  • Unity游戏性能优化第一步:用SystemInfo类摸清玩家电脑的‘家底’(附完整代码)
  • 2026年质量好的大载重金属周转箱/宁波金属周转箱生产厂家推荐 - 行业平台推荐