基于STM32的人体健康监测系统设计与实现(温度、心率、老人摔倒检测)【开源免费】
随着社会老龄化程度的不断加深,老年群体的健康问题逐渐成为社会关注的焦点。对于独居老人来说,日常健康监测和紧急情况的及时发现尤为重要。然而,传统的健康监护方式大多依赖于定期体检或人工照护,存在 实时性差、覆盖不全面、反应不及时 等问题。
本项目以 STM32 微控制器 为核心,集成 温度传感器、心率传感器和加速度传感器,实现对 体温、心率和跌倒事件 的实时监测。同时,系统支持数据无线传输与报警提示,为老人、慢性病患者以及健身人群提供了一个低成本、便携化、可扩展的健康管理解决方案。
源码见:https://blog.csdn.net/weixin_52908342/article/details/150939523
一、引言
随着社会老龄化的加剧,独居老人的健康监测问题逐渐成为社会和家庭的重点关注对象。传统的健康管理往往依赖于定期体检或人工陪护,实时性与智能化不足。基于嵌入式系统的智能健康监测设备,能够实现 实时体温采集、心率监测、老人摔倒检测 等功能,为家庭医疗和智慧养老提供有力的技术支撑。
本文将介绍一个基于 STM32 微控制器 的人体健康监测系统的完整设计与实现,包括 硬件搭建、传感器接口、算法实现、数据上传 等环节。
二、系统设计概述
本系统以 STM32F103C8T6 单片机为核心,集成 体温传感器、心率传感器、加速度传感器 等模块,实现对人体关键健康指标的监测。
系统主要功能:
- 体温监测 —— 使用温度传感器(如DS18B20或MLX90614)进行实时体温采集。
- 心率监测 —— 使用心率传感器(如MAX30102或Pulse Sensor)监测心率并计算心率值。
- 跌倒检测 —— 通过三轴加速度传感器(如MPU6050)监测人体运动状态并判断跌倒事件。
- 数据存储与上传 —— 通过串口、蓝牙(HC-05)、WiFi(ESP8266)等方式上传至PC或移动终端。
- 报警功能 —— 当检测到异常情况时,蜂鸣器报警或通过网络推送提醒监护人。

三、硬件设计

3.1 硬件框图
+------------------------+
| STM32F103C8T6 |
+------------------------+
| | | |
温度传感器 心率传感器 加速度传感器
(DS18B20) (MAX30102) (MPU6050)
| | |
OLED显示 蓝牙模块 蜂鸣器报警

3.2 主要器件说明
- 主控芯片:STM32F103C8T6,基于Cortex-M3内核,低功耗,外设丰富。
- 温度传感器:DS18B20,单总线通信,精度±0.5℃。
- 心率传感器:MAX30102,集成红外+红光LED,用于光电容积描记法(PPG)心率检测。
- 加速度传感器:MPU6050,六轴传感器,用于检测人体运动状态。
- 通信模块:HC-05蓝牙模块,用于无线传输数据。
- 显示模块:0.96寸 OLED,用于实时显示监测数据。
- 报警模块:蜂鸣器+LED,用于异常提醒。

四、软件设计
4.1 系统架构
软件主要分为以下几个模块:
- 传感器驱动层 —— DS18B20、MAX30102、MPU6050驱动程序。
- 数据处理层 —— 体温计算、心率计算(滤波+峰值检测)、跌倒检测算法。
- 应用层 —— OLED数据显示、蓝牙数据传输、报警逻辑控制。
4.2 跌倒检测算法
跌倒检测的基本原理:
- 当人体处于跌倒状态时,加速度传感器会检测到 较大冲击加速度(>2g),随后出现 长时间静止状态。
- 可采用 阈值法 或 方向角度判断法 进行跌倒检测。
算法简要逻辑:
if (accel_value > 2*g) {
// 检测到强冲击
delay_ms(200);
if (motion_static == 1) {
// 持续静止
fall_flag = 1; // 跌倒事件
}
}
4.3 心率检测算法
心率检测采用 峰值检测法:
- 使用ADC采集MAX30102输出的光电信号。
- 对数据进行 滤波处理(移动平均滤波)。
- 检测波形峰值,根据时间间隔计算心率:
$HR = \frac{60}{T}$
其中 T 为相邻峰值之间的时间。
4.4 软件流程图
系统初始化 → 传感器初始化 → 数据采集
↓
体温检测 → 心率检测 → 跌倒检测
↓
数据处理 → OLED显示 → 蓝牙上传 → 报警
五、代码示例
5.1 DS18B20 温度读取示例
float DS18B20_ReadTemp(void) {
uint8_t tempL, tempH;
int16_t temp;
DS18B20_Start();
DS18B20_WriteByte(0xCC); // 跳过ROM
DS18B20_WriteByte(0x44); // 转换温度
delay_ms(750);
DS18B20_Start();
DS18B20_WriteByte(0xCC);
DS18B20_WriteByte(0xBE); // 读取温度寄存器
tempL = DS18B20_ReadByte();
tempH = DS18B20_ReadByte();
temp = (tempH << 8) | tempL;
return (float)temp / 16.0; // 温度值
}
5.2 MPU6050 跌倒检测示例
void MPU6050_FallDetect(void) {
float ax, ay, az;
MPU6050_Read_Accel(&ax, &ay, &az);
float totalAcc = sqrt(ax*ax + ay*ay + az*az);
if (totalAcc > 2 * 9.8) {
// 冲击检测
delay_ms(200);
MPU6050_Read_Accel(&ax, &ay, &az);
if (fabs(ax) < 0.2 && fabs(ay) < 0.2 && fabs(az) < 0.2) {
printf("Fall detected!\n");
Buzzer_On();
}
}
}
5.3 MAX30102 心率检测简例
void HeartRate_Calc(void) {
int peakCount = 0;
int lastPeakTime = 0;
while (1) {
int signal = MAX30102_ReadValue();
if (isPeak(signal)) {
int now = millis();
int period = now - lastPeakTime;
lastPeakTime = now;
int heartRate = 60000 / period; // bpm
printf("Heart Rate: %d bpm\n", heartRate);
peakCount++;
}
}
}
六、实验结果
- 体温监测:能够在 ±0.5℃ 误差范围内实时显示体温。
- 心率监测:在 60–120 bpm 范围内,测量精度与商用设备接近。
- 跌倒检测:能够有效检测大部分模拟跌倒场景,并触发报警。
- 蓝牙传输:手机APP实时接收数据并显示健康状态。
七、应用场景
- 家庭养老 —— 独居老人健康监测,实时上传数据。
- 运动健身 —— 运动过程中的体温与心率监控。
- 医疗辅助 —— 医院病房、康复训练的健康数据采集。
- 智慧社区 —— 结合物联网平台,实现远程健康管理。

八、未来改进方向
- 增加血压监测 —— 集成血压传感器,实现更全面的健康监测。
- AI智能分析 —— 使用机器学习对心率、运动数据进行健康评估。
- 云平台接入 —— 数据上传至云端,实现医生远程诊断。
- 低功耗优化 —— 使用低功耗模式延长设备续航。
九、总结
本文介绍了一个基于 STM32 微控制器 的健康监测系统,涵盖了 温度采集、心率监测、跌倒检测 等核心功能,并通过蓝牙实现数据传输与报警提醒。该系统在家庭养老、运动监控、医疗健康等场景具有广阔的应用前景。未来可以结合 AI+物联网 技术,进一步提升智能化和实用性。