- 液体点滴监控系统设计与实现(STM32 + 液位/滴速/温度三参数监测 + PID自动调速)
- 一、系统功能总览
- 二、核心模块选型对比
- 2.1 主控芯片:STM32F103C8T6 vs LPC1768
- 2.2 温度传感器:DS18B20 vs LM35
- 2.3 液位传感器:SR-01 电阻式 vs HSC-1000G 压力式
- 2.4 滴速检测:H21L1 光耦 vs AS5048A 霍尔
- 2.5 显示模块:OLED12864 vs ST7735 TFT
- 2.6 无线通信模块:ESP8266 vs nRF905
- 三、系统接线总表
- 四、系统软件设计
- 4.1 主程序流程
- 4.2 温度检测流程
- 4.3 液位检测流程
- 4.4 滴速检测流程
- 4.5 滴速 PID 调节流程
- 4.6 无线通信流程
- 五、系统实现与测试
- 5.1 硬件焊接与测试
- 5.2 软件实现与测试
- 5.3 功能测试
- 六、总结
液体点滴监控系统设计与实现(STM32 + 液位/滴速/温度三参数监测 + PID自动调速)
静脉输液最怕三件事:药液滴空没人发现、滴速忽快忽慢、药液温度失当——任何一件都可能引发医疗风险,而传统病房全靠护士定时巡视。本文带来一套基于 STM32 的液体点滴监控系统:DS18B20、SR-01、H21L1 三只传感器分别盯住药液温度、液位与滴速,数据实时显示在 OLED 并经 ESP8266 同步手机 APP;液位低于安全线立即蜂鸣报警并紧急停机,滴速超出范围由 PID 算法驱动电机正反转自动回调,温度异常自动联动加热/降温继电器。一套系统,把输液安全的"人盯人"变成"机器值守"。
一、系统功能总览
| 功能模块 | 具体说明 |
|---|---|
| 温度监测 | DS18B20 实时采集药液温度,精度高、数字输出 |
| 液位监测 | SR-01 电阻式液位传感器结合 ADC 采样计算液位高度 |
| 滴速监测 | H21L1 光耦对射检测点滴脉冲,外部中断计数换算滴速 |
| 液位报警 | 液位低于安全阈值,蜂鸣器持续报警并紧急停止电机 |
| 滴速自动调节 | PID 算法控制电机:滴速超上限反转减速、低于下限正转加速 |
| 温度联动 | 温度低于阈值启动加热继电器,超过上限启动降温继电器 |
| 阈值设定 | 按键设置液位、滴速、温度双阈值,自动校验并存入 Flash |
| 无线上云 | ESP8266 以 MQTT 协议上传数据,数据帧带 CRC 校验与断网缓存 |
二、核心模块选型对比
2.1 主控芯片:STM32F103C8T6 vs LPC1768
| 对比项 | 方案一:STM32F103C8T6 | 方案二:LPC1768 |
|---|---|---|
| 内核 | Cortex-M3 @72MHz | Cortex-M3 @120MHz |
| Flash/RAM | 64KB / 20KB | 512KB / 64KB |
| 外设接口 | GPIO/ADC/定时器/串口齐全 | 资源更多但本系统用不上 |
| 低功耗 | 适合长时间在线运行 | 功耗略高 |
| 价格 | 约 10 元 | 约 35 元 |
选择方案一(STM32F103C8T6)。系统的实时采集与 PID 运算属中等复杂度任务,C8T6 性能稳定、外设接口够用,低功耗特性还适合医疗设备的长时间值守。
2.2 温度传感器:DS18B20 vs LM35
| 对比项 | 方案一:DS18B20 | 方案二:LM35 |
|---|---|---|
| 输出方式 | 数字量,单总线 | 模拟电压,需 ADC |
| 测量范围 | -55~+125℃ | -55~+150℃ |
| 线性度 | 12 位分辨率,免标定 | 线性好但依赖 ADC 精度 |
| 多点扩展 | 单总线可挂多个传感器 | 一路一个 ADC 通道 |
| 抗干扰 | 数字传输,强抗干扰 | 模拟长线易受干扰 |
选择方案一(DS18B20)。数字输出省去模数转换环节,单总线协议方便多传感器扩展,12 位分辨率对药液温控绰绰有余,系统设计更简洁。
2.3 液位传感器:SR-01 电阻式 vs HSC-1000G 压力式
| 对比项 | 方案一:SR-01 | 方案二:HSC-1000G |
|---|---|---|
| 原理 | 电极接触液体改变电阻 | 压力换算液位高度 |
| 精度 | 满足阈值判断 | 更高,适合高精度场景 |
| 结构 | 简单成熟 | 内置压力传感单元 |
| 价格 | 约 5 元 | 约 60 元 |
选择方案一(SR-01)。系统只需判断液位是否低于安全线,SR-01 对导电液体的检测有效可靠,成本仅为压力传感器的零头,经济实用。
2.4 滴速检测:H21L1 光耦 vs AS5048A 霍尔
| 对比项 | 方案一:H21L1 光耦 | 方案二:AS5048A 霍尔 |
|---|---|---|
| 原理 | 光电对射,液滴遮挡光路计数 | 磁场变化测速 |
| 抗干扰 | 光电隔离,抗电磁干扰出色 | 强光高温下稳定 |
| 安装 | 卡在滴壶两侧即可 | 需与旋转轴对准 |
| 适用性 | 直接检测透明管路液滴 | 适合旋转机械 |
选择方案一(H21L1)。检测对象是滴壶中下落的液滴而非旋转部件,光耦对射方案通过液滴遮挡光路产生脉冲,隔离干扰、测量精准,与场景天然匹配。
2.5 显示模块:OLED12864 vs ST7735 TFT
| 对比项 | 方案一:OLED12864 | 方案二:ST7735 TFT |
|---|---|---|
| 分辨率 | 128×64 单色 | 128×128 彩色 |
| 对比度/视角 | 自发光全视角 | 亮度高依赖背光 |
| 功耗 | 低功耗 | 背光功耗高 |
| 价格 | 约 12 元 | 约 20 元 |
选择方案一(OLED12864)。监测界面以数值为主,OLED 高对比度任何角度清晰可读,低功耗契合医疗设备长时间运行的需求。
2.6 无线通信模块:ESP8266 vs nRF905
| 对比项 | 方案一:ESP8266 | 方案二:nRF905 |
|---|---|---|
| 联网方式 | WiFi 直连互联网 | 433MHz 私有协议 |
| 上云能力 | TCP/MQTT 即插即用 | 无法直接联网 |
| 传输速率 | 最高 72Mbps | 低速 |
| 生态 | 社区资源丰富 | 相对封闭 |
选择方案一(ESP8266-01S)。医护端需通过手机 APP 随时查看输液状态,数据必须经云平台中转,ESP8266 直连 WiFi 即可完成全链路上云。
三、系统接线总表
| 模块 | 引脚 | 连接 STM32 引脚 | 备注 |
|---|---|---|---|
| DS18B20 | DQ | PA0 | 单总线,DQ 与 3.3V 间接 4.7kΩ 上拉 |
| H21L1 光耦 | OUT | PA1 | 外部中断下降沿计数,5V 供电,内部上拉 |
| SR-01 液位 | S | PA4 | 模拟输出接 ADC1,5V 供电 |
| ESP8266 | TXD/RXD | PA3/PA2 | USART2,115200,MQTT 上传 |
| ESP8266 | RST | PA8 | 复位控制,CH_PD 接 3.3V |
| 调速电机 | PWM | PA6 | TIM3 PWM 调速 |
| 调速电机 | 方向 | PB0/PB1 | 正转加速 / 反转减速 |
| 蜂鸣器 | I/O | PB5 | 三极管驱动,液位报警 |
| 加热继电器 | IN | PB10 | 温度低于阈值吸合 |
| 降温继电器 | IN | PB11 | 温度超过上限吸合 |
| 按键 K1~K4 | 一端 | PB12/PB13/PB14/PB15 | 设置/加/减/确认,阈值参数调节 |
| OLED12864 | SCL/SDA | PB6/PB7 | I2C 接口,SSD1306 驱动 |
接线说明:电机经驱动电路由 TIM3 PWM 控制转速、双 GPIO 控制转向;两路温控继电器独立控制加热与降温设备;主控最小系统 8MHz 晶振倍频 72MHz,电源引脚就近放置 10µF 去耦电容。
四、系统软件设计
4.1 主程序流程
系统上电初始化时钟树、GPIO、ADC(液位采样)、定时器(滴速脉冲计数)、UART(WiFi 模块)、OLED、按键中断与 PWM 输出,随后以 200ms 为周期进入主循环:采集温度、液位、滴速三路数据 → OLED 刷新显示 → MQTT 帧上传(附 CRC 校验,断网时缓存)→ 阈值判断与联动控制。主程序骨架如下:
int main(void) { System_Init(); // 时钟/GPIO/ADC/定时器/UART/PWM OLED_Init(); DS18B20_Init(); ESP8266_Rst(); ESP8266_MQTT_Connect(); // 入网 + 透传 + MQTT while (1) // 200ms 主循环 { temp = DS18B20_GetTemp(); // 温度 level = Get_Water_Level(); // 液位(ADC 均值换算) drops = Get_Drop_Speed(); // 滴速(脉冲计数/秒) if (level < LEVEL_TH) // 液位过低 { BEEP_ON(); // 持续报警 Motor_Stop(); // 紧急停止电机 } if (drops > DROP_TH_H) // 滴速过快 Motor_Reverse(); // 反转减速 else if (drops < DROP_TH_L) // 滴速过慢 Motor_Forward(); // 正转加速 if (temp < TEMP_TH_L) RELAY_HEAT_ON; // 加热 if (temp > TEMP_TH_H) RELAY_COOL_ON; // 降温 OLED_Show(temp, level, drops); // 刷新显示 MQTT_Publish(temp, level, drops); // CRC 帧上传 APP Key_Scan(); // 阈值设置 delay_ms(200); } }4.2 温度检测流程
DS18B20 按单总线时序工作:DQ 拉低 480µs 发复位脉冲 → 等待 60~240µs 的存在响应 → 发送温度转换命令 0x44,传感器执行 750ms~1s 的测量 → 再次复位并发读取命令 0xBE → 切换 DQ 为输入,读取低字节在前的两字节 12 位温度数据 → 按"温度 = (数据[1]<<8 | 数据[0]) × 0.0625"换算实际温度值。
4.3 液位检测流程
ADC 初始化后启动校准,设置通道与 239.5 时钟周期的采样时间,软件触发转换并轮询完成标志;读取 0~4095 的 12 位转换结果,多次采样取均值后按传感器量程换算为实际液位值,与安全阈值实时比较。
4.4 滴速检测流程
光耦 OUT 引脚配置为输入并使能内部上拉,外部中断设为下降沿触发:每滴液滴遮挡光路即产生一个脉冲,中断服务程序累加脉冲计数器;定时器每秒读取一次计数值并清零,结合时间间隔换算滴速(滴/分),同时记录时间戳便于 PID 调节计算。
4.5 滴速 PID 调节流程
滴速控制采用 PID 算法:以设定滴速为目标值、实测滴速为反馈,计算偏差的比例、积分、微分项,输出映射为 PWM 占空比——滴速超上限时控制电机反转降低滴速,低于下限时正转加大滴速,动态收敛至安全范围。
4.6 无线通信流程
USART2 以 115200 波特率连接 ESP8266:RST(PA8)拉低 500ms 复位,等待 “ready”;AT+CWMODE=1设 STA 模式,AT+CWJAP入网检查 “OK”;AT+CIPMUX关闭多连接,AT+CIPSEND进透传,确认 “\r\nOK\r\n\r\n>”;AT+CIPSTART连接 TCP 服务器等待 “CONNECT”。数据帧附加 CRC 校验保证完整性,网络中断时数据自动缓存,恢复连接后补传,医护端 APP 实时掌握输注状态。
五、系统实现与测试
5.1 硬件焊接与测试
按图纸逐模块连接,确认电源、地线与信号线极性无误后首轮上电测试,无短路过热;万用表核验温度传感器输出正常,单片机读取数据与显示一致;液位与滴速传感器分别以模拟信号与实际滴落验证;串口调试工具检查 ESP8266 的 AT 响应与入网状态。
5.2 软件实现与测试
程序以 C 语言结合 STM32 外设库在 Keil 中编写,各模块独立调试后再集成;ST-Link 在线调试监控变量、定位问题;PID 参数经多轮整定后滴速收敛稳定,MQTT 链路持续上传无异常。
5.3 功能测试
| 测试项 | 测试方法 | 系统动作 | 结果 |
|---|---|---|---|
| 温度采集 | 模拟不同温度环境对比标准值 | 返回值准确,OLED 同步显示 | 通过 |
| 液位采集 | 多次调整液位高度 | 输出信号准确反映液位 | 通过 |
| 滴速检测 | 光耦模块校准滴速 | 计数精准,换算正确 | 通过 |
| 液位报警 | 液位降至安全线以下 | 蜂鸣器持续报警并停机 | 通过 |
| 滴速调节 | 人为加快/减慢滴速 | 电机反转/正转回调至设定范围 | 通过 |
| 温度联动 | 温度越出上下限 | 加热/降温继电器正确吸合 | 通过 |
| 断网缓存 | 模拟网络中断后恢复 | 缓存数据补传成功,APP 无丢帧 | 通过 |
六、总结
本文设计并实现了一套基于 STM32 的液体点滴监控系统:DS18B20、SR-01、H21L1 组成温度、液位、滴速三参数监测矩阵;液位见底即刻报警停机,滴速由 PID 算法驱动电机双向自动回调,温度异常联动加热/降温继电器,三重防护覆盖输液安全的核心风险点;ESP8266 以 MQTT 协议把数据实时送上手机 APP,CRC 校验与断网缓存保障链路可靠。系统把医护人员从"盯瓶子"中解放出来,显著降低人为疏忽引发的医疗风险,对智慧病房建设具有切实的落地价值。