基于STM32的病人监护系统
若该文为原创文章,转载请注明原文出处。
摘要:本文设计并实现了一种基于STM32微控制器的便携式病人生命体征监护系统。系统集成多类传感器,实时监测患者核心生理参数(体温、心率)及所在环境参数(温湿度、空气质量)。系统具备本地OLED显示和声光报警功能,并通过ESP8266 WiFi模块将数据上传至云平台,医护人员可通过手机APP进行远程实时监控。当任何参数异常时,系统会立即触发本地蜂鸣器报警并向APP推送警报信息,实现了对病人的本地与远程双重监护,为及时医疗干预提供了有力支持。
关键词:STM32;病人监护;生命体征;物联网;远程医疗;MAX30102
一、引言
(一)研究背景及意义
随着社会老龄化和人们对健康管理的日益重视,远程医疗和智能监护技术成为医疗领域的发展热点。传统的医院监护设备庞大、昂贵且局限于病房使用,无法满足患者出院后或居家养老时的持续健康监测需求。特别是在公共卫生事件期间,减少接触式监护的需求尤为突出。因此,开发一种低成本、便携式、可远程监控的病人生命体征监护系统,对于减轻医护人员负担、实现疾病早期预警、提升医疗服务的效率与可及性具有极其重要的社会意义和实用价值。
(二)国内外研究现状
目前市场上有各类智能手环、手表等可穿戴设备可用于健康监测,但其测量精度和医疗认可度往往有限。专业的医疗监护仪虽精度高,但价格昂贵且不便携。本设计立足于此,采用STM32平台集成专业级的数字体温传感器和光学心率传感器,在保证一定测量精度的前提下,突出了系统的集成性、便携性与物联网功能,为家庭病房、社区医疗中心及康复机构提供了一个有效的辅助监护解决方案。
二、系统总体设计
(一)系统架构
本系统采用“多参数采集-核心处理-本地警示-云端互联”的四层架构。
数据采集层:由生命体征传感器(DS18B20, MAX30102)和环境传感器(DHT11, MQ-135)组成,负责采集原始生理及环境数据。
核心处理层:以STM32为核心,进行数据滤波、计算、阈值判断和系统控制。
本地交互层:包括OLED显示屏和蜂鸣器,负责实时显示数据和提供本地声光报警。
云端互联层:通过ESP8266连接物联网云平台,实现数据远程透传和手机APP监控。
(二)功能模块划分
生命体征监测模块:DS18B20(体温)、MAX30102(心率/血氧)。
环境监测模块:DHT11(温湿度)、MQ-135(空气质量)。
报警模块:有源蜂鸣器。
人机交互模块:OLED显示屏、按键。
通信模块:ESP8266 WiFi模块。
三、硬件设计与实现
(一)系统硬件框架图
(二)主控模块选型及介绍
模块名称 | 型号 | 核心参数 | 选型理由 |
---|---|---|---|
主控MCU | STM32F103C8T6 | Cortex-M3, 72MHz, 64KB Flash, 20KB RAM, 2xI2C, 11xADC | 资源足够,拥有I2C接口连接MAX30102和OLED,ADC接口读取MQ-135,且性价比极高。 |
(三)传感器模块选型及电路设计
传感器类型 | 型号 | 接口 | 特点与电路说明 |
---|---|---|---|
体温传感器 | DS18B20 | 单总线(1-Wire) | 数字输出,精度可达±0.5°C,防水封装可直接接触体表。数据线需接4.7K上拉电阻。 |
心率血氧传感器 | MAX30102 | I2C | 光学传感器,通过光电反射原理测量心率和血氧饱和度。集成度高,使用I2C通信,需精心处理算法以滤除噪声。 |
温湿度传感器 | DHT11 | 单总线(GPIO) | 数字输出,成本低,适用于监测环境温湿度。数据线需接5K上拉电阻。 |
空气质量传感器 | MQ-135 | ADC | 模拟输出,对CO2、NH3、苯等敏感,用于监测病房空气质量。输出接STM32 ADC引脚。 |
按键 | 轻触按键 | GPIO | 用于设置报警阈值。设置为输入上拉模式。 |
四、软件设计与实现
(一)开发环境搭建
IDE:STM32CubeIDE。
库:使用STM32CubeMX配置HAL库,初始化I2C、ADC、GPIO等外设。
驱动与算法:需编写DS18B20、DHT11、MAX30102(需集成心率算法)、OLED、ESP8266等驱动程序。
(二)系统软件流程图
(三)关键软件模块实现
1. MAX30102心率计算(集成算法)
MAX30102的心率计算是难点,通常需在MCU端实现滤波算法。
// 伪代码:心率计算流程
void HeartRate_Calculation(void) {// 1. 通过I2C从MAX30102读取FIFO中的原始红光和红外光数据MAX30102_ReadFIFO(&red_value, &ir_value);// 2. 直流滤波,去除信号中的直流分量,保留交流分量(主要由血流引起)float red_ac = DC_Removal(red_value, &red_dc_w0);float ir_ac = DC_Removal(ir_value, &ir_dc_w0);// 3. 带通滤波 (例如 0.5Hz - 5Hz, 对应30BPM - 300BPM),去除高频和低频噪声float red_bp = BandPass_Filter(red_ac);float ir_bp = BandPass_Filter(ir_ac);// 4. 计算自相关或寻找波峰(用于心率计算)if (detect_peak(ir_bp)) { // 检测到一个脉搏波峰int new_heart_rate = calculate_heart_rate(); // 根据波峰间隔计算瞬时心率// 5. 对连续计算出的瞬时心率进行中值滤波或平均,得到稳定值heart_rate = Moving_Average(new_heart_rate, heart_rate_buffer);}
}
// 注:实际开发中常使用厂家提供的或开源的算法库(如MAX30102lib)来处理此复杂过程。
2. 报警判断与处理逻辑
void Alarm_Check(void) {uint8_t alarm_triggered = 0;char alarm_msg[100];// 检查各项参数if (body_temp > temp_high_threshold || body_temp < temp_low_threshold) {Buzzer_On();sprintf(alarm_msg, "体温异常: %.1f °C", body_temp);alarm_triggered = 1;} else if (heart_rate > hr_high_threshold || heart_rate < hr_low_threshold) {Buzzer_On();sprintf(alarm_msg, "心率异常: %d BPM", heart_rate);alarm_triggered = 1;} else if (air_quality > air_threshold) {Buzzer_On();sprintf(alarm_msg, "空气质量差");alarm_triggered = 1;} else {Buzzer_Off();}// 如果触发报警,且是新的报警事件,则上报云平台if (alarm_triggered && !last_alarm_state) {MQTT_Publish("patient/alert", alarm_msg); // 向APP推送报警信息}last_alarm_state = alarm_triggered; // 更新报警状态
}
3. 云平台数据上报(JSON格式)
void Publish_Data_To_Cloud(void) {cJSON *root = cJSON_CreateObject(); // 使用cJSON库构建JSONcJSON_AddNumberToObject(root, "body_temp", body_temp);cJSON_AddNumberToObject(root, "heart_rate", heart_rate);cJSON_AddNumberToObject(root, "env_temp", env_temp);cJSON_AddNumberToObject(root, "env_humi", env_humi);cJSON_AddNumberToObject(root, "air_quality", air_quality);char *json_string = cJSON_Print(root);// 示例:使用MQTT发布到主题 "patient/vitals"ESP8266_MQTT_Publish("patient/vitals", json_string);free(json_string);cJSON_Delete(root);
}
五、系统测试与优化
(一)测试方案
传感器准确性测试:
DS18B20:与标准水银温度计或高精度电子温度计在35-42°C范围内进行对比校准。
MAX30102:与指夹式脉搏血氧仪或心电图机(ECG)进行同步测量对比,测试静坐、运动后的心率测量准确性。
MQ-135:在通风良好的室外和密闭房间内分别测试基准值。
功能与报警测试:
模拟体温异常:用温水袋加热DS18B20,测试报警触发和APP推送。
模拟心率异常:通过运动后测量高心率,测试报警。
模拟空气质量差:向MQ-135喷洒少量酒精,测试报警。
测试APP远程监控界面是否能实时更新数据并接收报警。
稳定性测试:系统连续运行24小时,观察数据是否漂移,是否有死机现象。
(二)优化方向
软件优化:
高级滤波算法:为心率数据实现更先进的滤波算法(如带阻滤波滤除工频干扰,移动平均滤波平滑数据),极大提高测量准确性和稳定性。
低功耗设计:如果考虑电池供电,可采用STM32的休眠模式,定时唤醒采集数据,并优化ESP8266的连接策略(如心跳包间隔),大幅延长续航时间。
看门狗:启用独立看门狗(IWDG),防止程序跑飞,提高系统可靠性。
硬件优化:
PCB布局:将MAX30102光学传感器部分与主控板通过FPC软排线连接,方便传感器单独贴附于患者手指、耳垂等部位,提高佩戴舒适性和测量准确性。
电源管理:采用低压差线性稳压器(LDO)为模拟传感器供电,减少电源噪声对ADC采样结果的干扰。
六、结论与关键设计
(一)结论
本项目成功设计并实现了一个集成多参数监测、本地显示报警与远程云端监控于一体的病人监护系统。系统能够准确、稳定地测量患者的核心生命体征(体温、心率)和环境参数,并在异常时提供及时有效的本地和远程双重报警,达到了设计的预期目标。该系统对于家庭病房、社区医疗和远程健康管理场景具有较高的应用价值。
(二)关键设计
生命体征与环境的融合监测:系统不仅关注生理参数(体温、心率),还同时监测环境参数(温湿度、空气质量),提供了一个更全面的健康状态评估视角。例如:高心率若伴随空气质量差,可能提示是因环境不适所致。
本地与远程的双重报警机制:本地蜂鸣器报警确保了病房内的即时响应,而通过物联网云平台向APP推送报警信息则突破了地理限制,使医护人员能够随时随地掌握病人状况,这是系统保障患者安全的核心设计。
基于光学原理的无创测量:采用MAX30102传感器实现了无创、连续的心率监测,大大提升了患者的舒适度和依从性,避免了传统有线设备的束缚,体现了医疗设备的人性化设计方向。
如有侵权,或需要完整代码,请及时联系博主。