智能分药器:精准用药管理系统
项目动机
现有分药器分非电动和自动两类,虽多有提醒功能,但均需人工按日/周装填药格,导致患者依赖他人。疫情下家属/护工探视困难,亟需一款免人工整理、无障碍交互、助患者独立用药的智能分药器。市面主流产品仍有巨大改进空间。
系统架构
SmartPill 含两大子系统:
- SmartPill Dispenser:实体设备,负责药丸整理、存储、分发,作为患者主交互界面
- SmartPill Web App:Web 管理界面,医生/监护人远程配置药方、追踪服药记录
医生可在 Web 配置最多 4 种药,每种药每天最多 3 次服药时间,远程调整剂量无需患者操作。针对痴呆、视障、听障人群设计:大屏幕引导装药、声光提醒准时服药。智能机构自动分配药丸至对应仓位,定时定量出药。设备经 AVR-IoT 板 WiFi 接入 AWS 云,实现远程监控配置。App 记录服药情况,漏服自动通知家属。
分药器机械结构

除屏幕外全 3D 打印(PLA),STL 文件开源。核心部件:
- 底座:支撑整机,含超声波传感器安装孔、出药翻板
- 滑块:顶部承载药仓,底部斜坡导药至翻板,内部预留电子仓
- 侧板:防潮、防尘、隔热
- Nextion NX8048T070 7寸触摸屏:人机交互界面
- 上盖组件:防护(上)、隔离药仓与转鼓(下)
- Parallax 360° 反馈舵机:驱动转鼓定位
- 转鼓:连接外部与药仓的旋转通道
- 后门:滑块进出维护通道
- 扬声器:语音播报
- HC-SR04 超声波传感器:检测取药杯是否就位
- 药仓 ×4:各含 SG90 舵机,定时定量出药。原型 4 仓,可扩展
组装指引
- 滑块分三段打印,先热熔嵌螺母组装主体,电子装入后再装盖
- 药仓组装:部件 1+7 连接并固定 SG90,部件 3+4(含轴承)组装,最后装部件 2,整体锁在滑块顶部
- 屏幕锁侧板,插排线;两侧板卡入底座至咔哒声
- 上盖两件嵌螺母,夹入转鼓与 Parallax 舵机并锁紧
- 最后锁后门


电子系统
主控 Arduino Mega 2560,负责:
- 4 路 SG90 舵机(药仓出药)+ 1 路 Parallax 360° 舵机(转鼓定位)
- Nextion 触摸屏交互
- RTC 实时时钟(I2C)
- 声音反馈
- AVR-IoT 板串口通信(UART)
- 4 对 IR 红外对管检测出药

建议在木板上按原理图焊接排线或自制 PCB。原理图见文末。
Web App 开发
目标:简化设备配置与他人用药监管。核心功能:
- 易用的设备初始化:患者信息、药品、剂量、时间
- 服药记录监控



技术栈
- 后端:AWS API Gateway (HTTP API REST)
- 前端:Ionic + Angular(免费开源,基于 NodeJS,提供 iOS/Android 原生组件,用 HTML/CSS/JS/Angular 开发)
需预装 Node.js。Ionic 官方文档指导快速上手。关键步骤:
$ npm install -g @ionic/cli
$ ionic start smartpill-webui blank
$ cd smartpill-webui
$ ionic serve
应用结构
路由模块 app-routing.module.ts 定义导航,支持参数传递。核心服务 post.service.ts 封装 HTTP 交互(GET/POST/DELETE/PUT),定义 Post/Dep/Log 接口。配置页面 page-config 列出所有药方,FAB 按钮跳转编辑页 page-edit-pill(新建/编辑复用,通过路由参数区分)。编辑页用 Ionic 组件(多选时间段、药名输入)采集数据提交 API。列表页用 Angular 生命周期钩子自动刷新。删除操作带二次确认弹窗。日志页 page-status 只读展示服药历史,含时间图标、日期、患者名、药品名。
AWS 无服务器架构

全无服务器架构,自动弹性伸缩,按量付费。核心服务:
- AVR-IoT 板:MQTT 接入 AWS IoT Core,双向通信(下发分药指令、上报确认事件)
- 前端静态资源:托管于 S3,开启静态网站托管
- 后端 API:API Gateway + Lambda + DynamoDB
- 定时调度:EventBridge (cron) 触发 Lambda 查询当前时段药方,经 IoT Core 下发至设备
关键配置步骤
- IoT Core:按 Microchip 指南将 AVR-IoT 接入 AWS,配置 WiFi 凭证
- DynamoDB:建两表
smartpill-history(服药日志)、smartpill-pills(药方配置),主键均为id - Lambda:赋予
AmazonDynamoDBFullAccess权限(仅教学用途),部署仓库代码,每函数独立执行角色 - IoT 规则:创建规则
smartpill_confirmationpill,SQLSELECT * FROM 'confirmationpill',动作指向对应 Lambda - EventBridge:建 3 条定时规则(早/午/晚),cron 表达式用 UTC,目标为
smartpill-dispensepillLambda - API Gateway:创建 HTTP API,集成所有 Lambda,配置路由映射,部署获取 HTTP 端点;或导入
smartpill-api.json - S3:建桶,开启静态网站托管,上传 Angular 编译产物(index.html 作为入口/错误页)
AVR-IoT 板固件
基于 Microchip 原例扩展:
- CLI 移植至 USART1(RX/TX 引脚可用),波特率 9600/8N1
- 新增
pill命令及回调pill_command(),解析消息发 MQTT 至confirmationpill主题 - 订阅自定义主题
dispensepill,回调receiveddispenseFromCloud()解析 JSON - 头文件
IoTPill.h定义收发数据结构
通信协议
下行 dispensepill (AWS → IoT → Arduino):
{
"cmd": "dispensepill",
"npills": 2,
"intake": {"time": "morning"},
"pills": {
"1": {"pill": "Ibuprofeno", "qty": 1, "deposit": 1, "weight": 200},
"2": {"pill": "Paracetamol", "qty": 2, "deposit": 2, "weight": 500}
}
}
IoT 板经串口发 Arduino:D Ibuprofeno 1 1 200 D Paracetamol 2 2 500 \n
上行 confirmationpill (Arduino → IoT → AWS):
Arduino 发 pill 1(成功)或 pill 0(失败)。IoT 板结合先前 intake time 组装 JSON:{"time":"morning","state":"ok"} 发至 AWS,Lambda 写入日志并推送通知。
代码仓库
- Web App 前端:smartpill-webui
- Lambda 后端:smartpill-lambda
- AVR-IoT 固件:smartpill-avriot
- Arduino 固件:smartpill-arduinofw
3D 打印模型
Thingiverse 仓库含:药仓机构(舵机驱动)、外壳组件、完整装配体(STEP 可改)。
制造工艺
- 安眠药的科学与制造:从古老偏方到现代药理学
- 避孕药:历史、获益、风险与生产
- 智能调酒师:树莓派驱动的自动鸡尾酒机
- 智能路灯:物联网自适应照明系统
- 智能垃圾桶:多传感器物联网优化垃圾收集
- 智能植物物联网:Arduino 与 Azure 构建连接温室
- UnifiedWater v1 — 基于 Arduino MKR GSM 1400 的完整水质监测套件
- 智能窗帘:基于Arduino与太阳能的自动光控系统
- Really Smart Box:基于 Sigfox 的物联网智能储物箱平台
- 旧开关面板改造:Arduino 触控智能开关带温度显示
- Autodesk智能制造:自动化工作流 连接产品全生命周期
- 智能制造解析:物联网如何重塑生产