若该文为原创文章,转载请注明原文出处。

一、引言

随着社会老龄化程度的加剧,独居老人的健康与安全已成为一个重大的社会问题。传统监护方式无法实现实时、主动的预警和远程关怀。本设计旨在开发一套基于STM32微控制器的智能监护系统,通过集成多种生理与环境传感器,实时监测老人的关键生命体征(心率、血氧、血压、体温)和活动状态(跌倒),并在异常发生时通过本地声光报警和远程通知的方式,及时向老人本人和远程亲属发出警报,构建一道守护独居老人生命安全的智能防线。

二、系统总体设计

(一)系统架构

系统采用“多维度感知-边缘智能判断-本地即时预警-云端远程联动”的架构。

  1. 感知层:由MPU6050(加速度计,用于跌倒检测)、MAX30102(心率血氧)、SBP0001/模拟血压计(血压)、DS18B20(体温)组成,全面采集老人生理数据。

  2. 控制层:以STM32F103C8T6为核心,进行多源数据融合、复杂算法处理(如跌倒识别算法)和阈值判断。

  3. 预警交互层:包括蜂鸣器、OLED显示屏和按键,实现本地报警、状态显示和参数设置。

  4. 通信层:通过通信模块(ESP8266/蓝牙/4G)将报警信息和健康数据上传至云平台或亲属手机APP。

(二)功能模块划分

  1. 安全监测模块:基于加速度计的跌倒检测与报警。

  2. 健康监测模块:心率、血氧、血压、体温的采集与异常判断。

  3. 人机交互模块:OLED显示刷新、按键扫描与蜂鸣器报警。

  4. 通信模块:管理无线连接,实现与手机APP的数据同步与报警推送。

三、硬件设计与实现

(一)系统硬件框架图

框架图说明:

  1. 核心控制层 (Core Control Layer)

    • STM32微控制器:系统的计算和控制中心,负责所有数据的采集、处理、逻辑判断和设备驱动。

  2. 感知层 (Perception Layer)

    • MPU6050:通过I2C接口读取三轴加速度和角速度数据,通过算法(如阈值判断、姿态解算)实现摔倒检测,这是系统的核心安全功能。

    • MAX30102:通过I2C接口通信,采用光电容积脉搏波法(PPG)高精度地测量心率和血氧饱和度

    • MLX90614:非接触式红外温度传感器,通过I2C通信,用于测量耳温或额温,避免接触式测量的不便。

    • 血压测量:方案较多。可以是专门的模拟压力传感器(需配合气泵和袖带,通过ADC采集)估算血压,或者采用MAX30102通过PPG波形计算脉搏波传导速度(PWV)来估算血压(需校准)。

  3. 执行与报警层 (Actuation & Alarm Layer)

    • 蜂鸣器:当检测到摔倒或任何生命体征参数超限时,发出高强度声音报警,引起老人或邻居注意。

    • LED指示灯:用于显示系统状态(如电源、连接状态、报警类型)。

  4. 人机交互层 (HMI Layer)

    • OLED显示屏:实时、清晰地显示所有生命体征数据(心率、血氧、体温、血压)和系统状态(网络连接、报警信息)。

    • 按键:用于本地设置阈值、切换显示界面、一键求救、清除报警等。

  5. 网络通信层 (Network Communication Layer)(三选一或多模备份)

    • ESP8266 Wi-Fi:家中如有Wi-Fi,优先使用,将数据上传至云平台,实现远程无限距离监控。

    • 蓝牙模块:通信距离短(约10米),适合室内近距离由监护人手机直接连接查看数据,无需云端中转。

    • 4G通信模块:在无Wi-Fi环境下,插入SIM卡即可通过移动网络联网,覆盖范围最广,可靠性高,是独居老人场景的最佳选择之一。

  6. 云平台与远程监护层 (Cloud & Remote Monitoring Layer)

    • 云平台:接收、存储、分析和展示数据,提供报警推送(APP push/短信)接口。

    • 监护人APP:子女或医生可以7x24小时实时查看老人健康状态,接收紧急报警通知,并可远程设置设备参数。

四、软件设计与实现

(一)开发环境搭建

  1. IDE:STM32CubeIDE。

  2. :使用HAL库。需自行添加OLED、MPU6050(DMP库)、MAX30102、DS18B20等驱动库,以及滤波算法。

  3. 云平台:可使用腾讯云IoT、阿里云IoT等平台接收数据并推送报警消息到APP。

(二)系统软件流程图

(三)代码片段(关键逻辑)

跌倒检测算法与主循环逻辑

// main.c
// 定义阈值
#define HEART_RATE_MAX 100
#define HEART_RATE_MIN 60
#define SPO2_MIN 95
#define TEMP_MAX 37.5
#define BLOOD_PRESSURE_MAX 140 // 收缩压阈值

while (1) {
  // 1. 实时跌倒检测 (高频处理)
  MPU6050_Read_Accel(&ax, &ay, &az); // 读取加速度
  MPU6050_Read_Gyro(&gx, &gy, &gz);  // 读取角速度

  // 综合判断算法: 加速度矢量幅值(SVM)突变 + 姿态角度变化
  float accel_svm = sqrt(ax*ax + ay*ay + az*az);
  if (accel_svm > FALL_ACC_THRESHOLD) {
      // 检测到剧烈冲击,结合后续的姿态进行判断
      if (Check_Posture_Change()) { // 判断姿态是否变为水平
          is_fallen = 1;
      }
  }

  if (is_fallen) {
      Buzzer_On(); // 蜂鸣器持续报警
      OLED_ShowString(0, 0, "EMERGENCY! FALL!");
      ESP8266_Send_Alert("FALL_DETECTED"); // 立即发送跌倒报警
      is_fallen = 0; // 需要手动复位或一段时间后自动复位
      HAL_Delay(5000);
      continue;
  }

  // 2. 健康数据监测 (低频处理)
  if (measurement_timer >= MEASURE_INTERVAL) {
      measurement_timer = 0;
      MAX30102_ReadFifo(&heart_rate, &spo2);
      temperature = DS18B20_GetTemp();
      blood_pressure = BloodPressure_Measure(); // 读取血压计模块数据

      // 显示数据
      OLED_ShowData(heart_rate, spo2, blood_pressure, temperature);

      // 健康阈值判断
      if (heart_rate > HEART_RATE_MAX || heart_rate < HEART_RATE_MIN ||
          spo2 < SPO2_MIN || temperature > TEMP_MAX ||
          blood_pressure > BLOOD_PRESSURE_MAX) {
          Buzzer_Beep(200, 1000); // 蜂鸣器响200ms, 停1000ms
          ESP8266_Send_Data(heart_rate, spo2, blood_pressure, temperature, 1); // 上传数据并标记异常
      } else {
          ESP8266_Send_Data(heart_rate, spo2, blood_pressure, temperature, 0); // 正常上传
      }
  }

  // 3. 处理按键和通信
  Key_Scan(); // 处理一键报警键、设置键等
  Check_ESP8266_Message(); // 处理APP下发的指令
  HAL_Delay(10);
}

WiFi报警信息发送函数

void ESP8266_Send_Alert(char *alert_type) {
  // 构建报警JSON消息,内容应尽可能详细
  char json_buffer[128];
  sprintf(json_buffer,
          "{\"alert\":\"%s\",\"time\":\"%s\"}",
          alert_type, get_time_string());

  // 通过MQTT协议发布到云平台的特定主题,触发APP推送
  MQTT_Publish("alert_topic", json_buffer);
}

五、系统测试与优化

(一)测试方案

  1. 传感器精度测试:与医用标准设备(指夹血氧仪、电子血压计、体温计)进行对比测量,校准系统误差。

  2. 跌倒检测测试

    • 模拟测试:志愿者模拟向前、向后、侧向等各种跌倒姿势,测试算法识别率。

    • 日常活动干扰测试:进行走路、坐下、弯腰、上下楼梯等日常活动,测试算法的误报率。目标是高识别率、低误报率

  3. 报警功能测试:测试本地蜂鸣器报警和远程APP报警推送是否及时、准确。

  4. 续航测试:如果是电池供电,测试系统持续工作时间。

优化方向

  • 算法优化:采用更先进的机器学习算法(如在STM32上运行TinyML模型)来提升跌倒检测的准确率。

  • 一键报警:增加一个硬件大按键,老人在感到不适时可手动触发报警。

  • 低功耗设计:采用STM32L系列低功耗单片机,并优化软件,在无事件时进入休眠模式,大幅延长续航。

  • 定位功能:集成GPS或LBS基站定位模块,在报警时同时上报位置信息,便于紧急救援。

六、结论与展望

(一)未来展望

本系统设计了一个功能全面、实用性强的独居老人监护原型,为解决社会老龄化问题提供了可行的技术方案。未来可向以下方向发展:

  1. 行为模式分析:长期学习老人的日常活动规律(起床、做饭、睡觉时间),一旦发现异常规律(如长时间无活动),即使无剧烈跌倒,也触发“关怀提醒”。

  2. 语音交互:集成语音模块,支持语音报警、语音提醒吃药、以及与亲属的语音对讲。

  3. 多方联动报警:报警信息不仅发送给亲属,还可同时发送给社区服务中心、附近邻居,形成多级响应网络。

  4. 产品化与适老化设计:将传感器集成到老人日常穿戴设备(如手表、腰带)中,设计简洁易懂的交互界面,真正融入老人生活。

如有侵权,或需要完整代码,请及时联系博主。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐