基于STM32的人体健康监测系统设计与实现(温度、心率、老人摔倒检测)【开源免费】

213 阅读6分钟

基于STM32的人体健康监测系统设计与实现(温度、心率、老人摔倒检测)【开源免费】

随着社会老龄化程度的不断加深,老年群体的健康问题逐渐成为社会关注的焦点。对于独居老人来说,日常健康监测和紧急情况的及时发现尤为重要。然而,传统的健康监护方式大多依赖于定期体检或人工照护,存在 实时性差、覆盖不全面、反应不及时 等问题。

本项目以 STM32 微控制器 为核心,集成 温度传感器、心率传感器和加速度传感器,实现对 体温、心率和跌倒事件 的实时监测。同时,系统支持数据无线传输与报警提示,为老人、慢性病患者以及健身人群提供了一个低成本、便携化、可扩展的健康管理解决方案。

源码见:blog.csdn.net/weixin_5290…

一、引言

随着社会老龄化的加剧,独居老人的健康监测问题逐渐成为社会和家庭的重点关注对象。传统的健康管理往往依赖于定期体检或人工陪护,实时性与智能化不足。基于嵌入式系统的智能健康监测设备,能够实现 实时体温采集、心率监测、老人摔倒检测 等功能,为家庭医疗和智慧养老提供有力的技术支撑。

本文将介绍一个基于 STM32 微控制器 的人体健康监测系统的完整设计与实现,包括 硬件搭建、传感器接口、算法实现、数据上传 等环节。


二、系统设计概述

本系统以 STM32F103C8T6 单片机为核心,集成 体温传感器、心率传感器、加速度传感器 等模块,实现对人体关键健康指标的监测。

系统主要功能:

  1. 体温监测 —— 使用温度传感器(如DS18B20或MLX90614)进行实时体温采集。
  2. 心率监测 —— 使用心率传感器(如MAX30102或Pulse Sensor)监测心率并计算心率值。
  3. 跌倒检测 —— 通过三轴加速度传感器(如MPU6050)监测人体运动状态并判断跌倒事件。
  4. 数据存储与上传 —— 通过串口、蓝牙(HC-05)、WiFi(ESP8266)等方式上传至PC或移动终端。
  5. 报警功能 —— 当检测到异常情况时,蜂鸣器报警或通过网络推送提醒监护人。

在这里插入图片描述

三、硬件设计

在这里插入图片描述

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 系统架构

软件主要分为以下几个模块:

  1. 传感器驱动层 —— DS18B20、MAX30102、MPU6050驱动程序。
  2. 数据处理层 —— 体温计算、心率计算(滤波+峰值检测)、跌倒检测算法。
  3. 应用层 —— OLED数据显示、蓝牙数据传输、报警逻辑控制。

4.2 跌倒检测算法

跌倒检测的基本原理:

  • 当人体处于跌倒状态时,加速度传感器会检测到 较大冲击加速度(>2g),随后出现 长时间静止状态
  • 可采用 阈值法方向角度判断法 进行跌倒检测。

算法简要逻辑:

if (accel_value > 2*g) {   // 检测到强冲击
    delay_ms(200);
    if (motion_static == 1) {  // 持续静止
        fall_flag = 1; // 跌倒事件
    }
}

4.3 心率检测算法

心率检测采用 峰值检测法

  1. 使用ADC采集MAX30102输出的光电信号。
  2. 对数据进行 滤波处理(移动平均滤波)。
  3. 检测波形峰值,根据时间间隔计算心率: HR=60THR = \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++;
        }
    }
}

六、实验结果

  1. 体温监测:能够在 ±0.5℃ 误差范围内实时显示体温。
  2. 心率监测:在 60–120 bpm 范围内,测量精度与商用设备接近。
  3. 跌倒检测:能够有效检测大部分模拟跌倒场景,并触发报警。
  4. 蓝牙传输:手机APP实时接收数据并显示健康状态。

七、应用场景

  1. 家庭养老 —— 独居老人健康监测,实时上传数据。
  2. 运动健身 —— 运动过程中的体温与心率监控。
  3. 医疗辅助 —— 医院病房、康复训练的健康数据采集。
  4. 智慧社区 —— 结合物联网平台,实现远程健康管理。

在这里插入图片描述

八、未来改进方向

  1. 增加血压监测 —— 集成血压传感器,实现更全面的健康监测。
  2. AI智能分析 —— 使用机器学习对心率、运动数据进行健康评估。
  3. 云平台接入 —— 数据上传至云端,实现医生远程诊断。
  4. 低功耗优化 —— 使用低功耗模式延长设备续航。

九、总结

本文介绍了一个基于 STM32 微控制器 的健康监测系统,涵盖了 温度采集、心率监测、跌倒检测 等核心功能,并通过蓝牙实现数据传输与报警提醒。该系统在家庭养老、运动监控、医疗健康等场景具有广阔的应用前景。未来可以结合 AI+物联网 技术,进一步提升智能化和实用性。