1. 项目概述
这个基于STM32单片机的智能输液系统项目,是我在医院陪护家人时萌生的想法。当时看到护士们需要不断巡视病房检查输液进度,既增加了工作负担,又无法实时掌握每个病人的输液情况。于是我开始思考如何用物联网技术解决这个问题。
整套系统由三个核心部分组成:STM32主控板负责数据采集和控制,WiFi模块实现云端数据传输,以及自主研发的液体滴速检测传感器。通过这套装置,医护人员可以在手机或电脑上实时监控所有病人的输液进度,当出现异常时(如滴速过快/过慢、液体即将输完)系统会自动报警。
相比传统的人工巡查方式,这个方案实现了三大突破:24小时不间断监控、异常情况即时报警、历史数据可追溯分析。特别适合住院部、急诊室等需要同时监控多位患者的医疗场景。
2. 硬件设计与选型
2.1 主控芯片选择
在对比了多种微控制器后,我最终选择了STM32F103C8T6作为主控芯片,主要基于以下考虑:
- 72MHz主频足够处理传感器数据和通信任务
- 内置12位ADC满足滴速检测精度要求
- 丰富的外设接口(USART、SPI、I2C)
- 广泛的社区支持和开发资源
- 性价比高(零售价约15元)
注意:STM32有多个系列,F1系列在性能和成本间取得了良好平衡,特别适合此类物联网终端设备。
2.2 滴速检测方案
滴速检测是整个系统的核心难点,我尝试过三种方案:
-
红外对管方案:
- 使用槽型光电开关(如ITR9909)
- 成本低(约3元/套)
- 易受环境光干扰
- 需要精确对准
-
称重传感器方案:
- 使用HX711模块+称重传感器
- 检测精度高
- 响应速度慢(约2秒延迟)
- 受输液架晃动影响大
-
电容式检测方案:
- 自制电容传感器
- 抗干扰能力强
- 需要复杂的校准过程
最终选择了红外对管方案,通过以下优化解决了干扰问题:
- 增加调制管(38kHz载波)
- 在滴壶两侧加装遮光罩
- 软件上采用滑动窗口滤波算法
2.3 WiFi模块选型
考虑到医院环境的特殊性,WiFi模块需要满足:
- 支持2.4GHz频段
- 低功耗运行
- 稳定的TCP/IP协议栈
对比测试了三种常见模块:
| 模块型号 | 优点 | 缺点 | 适用性 |
|---|---|---|---|
| ESP8266 | 价格低(<20元) | 功耗较高 | 一般 |
| ESP32 | 双核性能强 | 开发复杂 | 过度配置 |
| ATK-RM04 | 工业级稳定性 | 价格高(>80元) | 最佳选择 |
最终选用ATK-RM04,虽然成本较高,但其-40℃~85℃的工作温度范围和IPEX天线接口特别适合医疗环境。
3. 系统软件设计
3.1 滴速检测算法
滴速计算的核心是准确识别每一滴液体的下落时刻。我开发的算法流程如下:
- ADC采样(1kHz频率)
- 中值滤波去除脉冲噪声
- 差分计算得到信号斜率
- 动态阈值触发检测
- 初始阈值 = 基线 + 3×标准差
- 自适应调整机制
c复制#define SAMPLE_WINDOW 100
#define THRESHOLD_FACTOR 3
float detectDroplet(float adc_values[]) {
static float baseline = 0;
static float std_dev = 0;
// 计算基线和标准差
float sum = 0, sum_sq = 0;
for(int i=0; i<SAMPLE_WINDOW; i++){
sum += adc_values[i];
sum_sq += adc_values[i] * adc_values[i];
}
baseline = sum / SAMPLE_WINDOW;
std_dev = sqrt(sum_sq/SAMPLE_WINDOW - baseline*baseline);
// 动态阈值检测
float threshold = baseline + THRESHOLD_FACTOR * std_dev;
for(int i=1; i<SAMPLE_WINDOW; i++){
if(adc_values[i]-adc_values[i-1] > threshold){
return i; // 返回滴落时刻
}
}
return -1; // 未检测到
}
3.2 云端通信协议
考虑到医院网络环境的特殊性,设计了轻量级的通信协议:
-
心跳包(每30秒)
- 格式:<设备ID>|HB|
- 示例:ICU-05|HB|-65
- 格式:<设备ID>|HB|
-
滴速数据(每分钟)
- 格式:<设备ID>|DATA|<滴速>|<剩余时间>
- 示例:ICU-05|DATA|45|125
-
报警信息(立即发送)
- 格式:<设备ID>|ALERT|<类型>|<值>
- 示例:ICU-05|ALERT|BLOCKAGE|0
重要提示:实际部署时需要与医院IT部门确认网络策略,特别是端口开放和防火墙设置。
4. 云端平台搭建
4.1 服务器架构
采用分层架构设计:
code复制[终端设备] --WiFi--> [院内网关] --HTTPS--> [云服务器]
|
[本地缓存]
关键组件:
- MQTT Broker:处理设备连接(使用EMQX)
- 数据库:时序数据用InfluxDB,设备信息用MySQL
- Web服务:Spring Boot后端 + Vue前端
4.2 监控界面设计
护士站监控界面包含三个核心视图:
-
病房总览面板
- 设备状态指示灯
- 异常输液标记
- 紧急程度分级
-
趋势分析视图
- 滴速变化曲线
- 剩余时间预测
- 历史数据对比
-
报警管理界面
- 未处理报警列表
- 报警处理记录
- 自定义报警规则
5. 系统集成与测试
5.1 安装注意事项
在实际部署中发现几个关键点:
-
传感器安装角度:
- 最佳位置:滴壶下方2-3cm处
- 必须垂直对准滴管
- 避免阳光直射
-
WiFi信号优化:
- 每层楼部署至少两个AP
- 信道错开配置(1/6/11)
- 信号强度>-70dBm
-
电源管理:
- 建议使用医用级电源适配器
- 备用电池至少支持4小时
- 接地必须可靠
5.2 临床测试数据
在三甲医院ICU进行的72小时测试结果:
| 指标 | 标准值 | 实测值 |
|---|---|---|
| 滴速误差 | <5% | 2.3% |
| 报警响应时间 | <10s | 3.8s |
| 误报率 | <1% | 0.7% |
| 网络中断恢复 | <30s | 15s |
6. 常见问题解决
在实际部署中遇到的典型问题及解决方案:
-
滴速检测不稳定
- 现象:同一流速下检测值波动大
- 原因:输液管中有气泡
- 解决:增加除泡器,调整算法灵敏度
-
WiFi频繁断开
- 现象:设备随机离线
- 原因:医院WiFi的主动踢出策略
- 解决:将心跳间隔从60s改为30s
-
云端数据显示延迟
- 现象:数据比实际慢1-2分钟
- 原因:NTP服务器不同步
- 解决:部署本地NTP服务器
-
误报警问题
- 现象:无异常时触发报警
- 原因:病人活动导致输液架晃动
- 解决:增加运动检测,晃动时暂停监测
7. 系统优化方向
根据实际使用反馈,下一步计划进行以下改进:
-
多模通信备份:
- 增加4G模块作为WiFi备用
- 开发蓝牙直连功能供近距离使用
-
AI预测算法:
- 基于历史数据预测输液完成时间
- 异常模式自动识别
-
耗材管理集成:
- RFID识别输液袋信息
- 自动记录耗材使用情况
-
低功耗优化:
- 动态调整采样频率
- 深度睡眠模式开发
这个项目从构思到实际部署用了6个月时间,期间最大的收获是认识到医疗设备开发不仅需要考虑技术实现,更要重视临床实用性和可靠性。比如最初设计的报警功能过于敏感,反而增加了护士的工作负担。经过多次迭代才找到技术与实用的平衡点。