基于 STM32 的老人健康检测与跌倒监测系统
- 基于 STM32 的老人健康检测与跌倒监测系统设计
基于 STM32 的老人健康检测与跌倒监测系统设计
导语
人口老龄化背景下,老年人的慢性病管理与意外跌倒防护是社会关注的重要课题。本文提出一种以 STM32F103C8T6 为主控的老人健康检测与跌倒监测系统,通过 MAX30102 完成心率血氧采集、DS18B20 实现体温采集、ADXL345 监测姿态变化,检测到异常或跌倒时蜂鸣器本地报警,并通过 JDY-31 蓝牙透传到手机 APP,实现家属或护理人员的远程监护,为智慧养老提供一套成本可控、易于上手的硬件方案。
一、系统功能总览
系统整合感知、显示、本地报警与远程通信四个层次,主要功能如下:
| 编号 | 功能名称 | 功能描述 |
|---|---|---|
| F1 | 体温采集 | DS18B20 单总线采集,精度 0.1℃ |
| F2 | 心率采集 | MAX30102 PPG 测量,30-250 BPM |
| F3 | 血氧采集 | MAX30102 红光/红外双波长,0-100% |
| F4 | 姿态检测 | ADXL345 三轴加速度,跌倒判定 |
| F5 | 阈值报警 | 参数超阈值或跌倒触发蜂鸣器 |
| F6 | 蓝牙上传 | JDY-31 透传数据到手机 APP |
| F7 | 阈值设置 | 板载按键设置温度/心率/血氧阈值 |
| F8 | 数据刷新 | 1s 周期采集并刷新显示 |
二、核心模块选型对比
2.1 主控模块选型
| 方案 | 型号 | 主频 | 优点 | 缺点 |
|---|---|---|---|---|
| 方案一 | STM32F103C8T6 | 72 MHz | Cortex-M3 资源丰富,HAL 库成熟 | 内核为 M3,无 FPU |
| 方案二 | Arduino Nano | 16 MHz | 开发简单,社区资料多 | RAM 仅 2 KB,多传感器同时接不便 |
| 方案三 | ESP32 | 240 MHz | 自带 Wi-Fi/蓝牙,双核 | 模拟前端能力有限,心率血氧应用少 |
选择方案一: 系统需同时驱动 MAX30102、ADXL345、DS18B20 与蓝牙模块,对 IO、I²C、定时器数量都有较高要求,STM32F103C8T6 在性能、资源、成本上平衡最好。
2.2 心率血氧模块选型
| 方案 | 型号 | 接口 | 优点 | 缺点 |
|---|---|---|---|---|
| 方案一 | MAX30102 | I²C | 集成红光/红外 LED 与光电探测,PPG 测量成熟 | 需要手指贴合 |
| 方案二 | PulseSensor | 模拟 | 价格低,接接简单 | 仅心率,无血氧,模拟信号易受干扰 |
| 方案三 | AFE4400 | I²C | 医疗级精度 | 驱动复杂,价格高 |
选择方案一: MAX30102 同时给出心率与血氧两路数据,I²C 接口便于挂载在 STM32 的同一组总线上,符合系统对核心生命体征的双参数要求。
2.3 温度模块选型
| 方案 | 型号 | 测温范围 | 优点 | 缺点 |
|---|---|---|---|---|
| 方案一 | DS18B20 | -55~+125℃ | 单总线,精度 0.1℃,仅需一根 IO | 需上拉电阻 |
| 方案二 | DHT11 | 0~50℃ | 同时输出温湿度 | 测温精度 ±2℃,分辨率 1℃ |
| 方案三 | 热电偶 MAX6675 | 0~1024℃ | 宽量程 | 模拟前端复杂 |
选择方案一: 系统采集人体表温,DS18B20 的 0.1℃ 精度可满足精度要求,单总线也便于在 PCB 上布局。
2.4 加速度模块选型
| 方案 | 型号 | 分辨率 | 优点 | 缺点 |
|---|---|---|---|---|
| 方案一 | ADXL345 | 13 bit | 数字输出,量程可配置,中断丰富 | 无 |
| 方案二 | MPU6050 | 16 bit | 同时输出姿态 | 仅需要跌倒检测时功能冗余 |
| 方案三 | 倾角开关 | - | 仅阈值输出 | 只能粗判方向 |
选择方案一: 跌倒判定需要三轴合成加速度与倾斜角度,ADXL345 的 13 bit 分辨率与多种量程(±2/4/8/16 g)满足跌倒冲击检测与日常姿态判别的双重需要。
2.5 蓝牙模块选型
| 方案 | 型号 | 协议 | 优点 | 缺点 |
|---|---|---|---|---|
| 方案一 | JDY-31 | BLE 4.0 | 低功耗,AT 配置,透传稳定 | 速率 1 Mbps 以内 |
| 方案二 | HC-05 | 蓝牙 2.0 | 资料多 | 功耗高,BLE 手机兼容性差 |
| 方案三 | NRF24L01 | 私有 RF | 成本低 | 非标协议,需对接手机 APP |
选择方案一: JDY-31 与主流手机 BLE 兼容性好,且无需复杂协议栈,适合把传感器数据以透传方式打包发到 APP。
三、系统接线总表
| 模块 | 引脚 | MCU 引脚 | 说明 |
|---|---|---|---|
| MAX30102 | VCC/GND | 3.3V/GND | 电源 |
| MAX30102 | SDA/SCL | PB9/PB8 | I²C1 总线 |
| MAX30102 | INT | PA0 | 中断(跌倒/心率) |
| DS18B20 | VCC/GND | 3.3V/GND | 电源 |
| DS18B20 | DQ | PA1 | 单总线,4.7kΩ 上拉 |
| ADXL345 | VCC/GND | 3.3V/GND | 电源 |
| ADXL345 | SDA/SCL | PB9/PB8 | I²C1 总线,与 MAX30102 共用 |
| ADXL345 | INT1 | PA2 | 跌倒中断 |
| JDY-31 | VCC/GND | 3.3V/GND | 电源 |
| JDY-31 | TX/RX | PA10/PA9 | USART1 |
| 蜂鸣器 | I/O | PB0 | 有源蜂鸣器 |
| 按键 1/2/3 | I/O | PB1/PB2/PB3 | 设置/加/减 |
备注:MAX30102 与 ADXL345 共用 I²C1 总线,依靠地址区分(MAX30102=0x57、ADXL345=0x53),节省 IO。
四、系统软件设计
4.1 主程序流程
系统上电后先完成系统时钟、GPIO、I²C、USART、SysTick 初始化,再依次初始化 MAX30102、ADXL345、DS18B20、OLED 与蓝牙。主循环以 1 s 为周期依次采集温度、心率血氧与加速度值,进行阈值判断与跌倒判定,最后刷新显示与蓝牙发送。整体流程描述为:开始 → 硬件初始化 → 传感器自检 → 主循环(采集→判断→报警→上传→延时)。
4.2 跌倒检测流程
ADXL345 启动后进入 ±16 g 量程,开启 INT1 中断。正常姿态下 X、Y、Z 三轴合成加速度接近 1 g;当出现自由落体(合成加速度 < 0.6 g)后紧跟着剧烈加速度(≥ 2.5 g),且随后倾角 > 60° 持续 2 s 以上,判定为跌倒,触发蜂鸣器与蓝牙报警。
int main(void)
{
SystemInit();
OLED_Init();
USART1_Init(9600); // JDY-31
I2C1_Init(); // 100 kHz
MAX30102_Init();
ADXL345_Init();
DS18B20_Init();
Beep_Init();
while (1)
{
float t = DS18B20_ReadTemp();
MAX30102_ReadHR_SpO2(&hr, &spo2);
ADXL345_ReadXYZ(&ax, &ay, &az);
// 阈值判断
if (t > TEMP_MAX || hr > HR_MAX || hr < HR_MIN || spo2 < SPO2_MIN)
Beep_On();
// 跌倒判定
if (Fall_Detect(ax, ay, az))
{
Beep_On();
JDY31_SendString("FALL\r\n");
}
// 上传 APP
JDY31_SendFloat("T:", t);
// OLED 显示
delay_ms(1000);
}
}
4.3 心率血氧采集流程
MAX30102 工作在 PPG 模式下,红光/红外交替点亮;驱动读 FIFO 后在算法层做峰值检测得到心率,R 曲线与 IR 曲线比值得到血氧饱和度。流程:初始化 → FIFO 使能 → 红/红外开窗 → 读取 FIFO → 滑动平均 → 心率/血氧解算。
4.4 温度采集流程
DS18B20 使用单总线协议,MCU 发送复位脉冲 → 跳过 ROM(0xCC)→ 启动温度转换(0x44)→ 延时 750 ms → 再次复位 → 读暂存器(0xBE)→ 拼合高低字节 → 转换为 0.1℃。
4.5 蓝牙通信流程
JDY-31 默认波特率 9600,工作在透传模式。主循环每 1 s 把温度、心率血氧与姿态按 "T:%f,HR:%d,SPO2:%d,AX:%d\r\n" 格式拼成字符串,通过 USART1 发送;手机 APP 端通过 BLE 接收即可。
五、系统实现与测试
5.1 硬件焊接与测试
将主控、传感器、蜂鸣器、按键分别焊接在洞洞板上,DS18B20 单独引线到腕带侧;上电后用万用表量 3.3 V 与各传感器电源引脚正常,再用示波器观察 I²C 总线与 USART1 波形,波形稳定无毛刺。
5.2 软件调试
在 Keil MDK 下用 ST-Link 仿真器下载程序,串口打印各传感器初始化返回值与原始数据,修改心率/血氧滑动窗口长度 8→16,确认数据更稳定;调整跌倒阈值与延时参数,避免日常起身误触发。
5.3 功能测试
| 测试编号 | 测试步骤 | 预期 | 结论 |
|---|---|---|---|
| T1 | 手指贴 MAX30102 静置 | 心率/血氧稳定显示 | 通过 |
| T2 | DS18B20 接触手腕 | 温度刷新 1 s/次 | 通过 |
| T3 | 抬高/平放 ADXL345 | OLED 倾角变化 | 通过 |
| T4 | 模拟跌倒(自由落体+侧倒) | 蜂鸣器响,APP 报警 | 通过 |
| T5 | 蓝牙 APP 接收数据 | 实时刷新 | 通过 |
| T6 | 温度/心率超阈值 | 蜂鸣器响 | 通过 |
六、总结
本文设计的老人健康检测与跌倒监测系统以 STM32F103C8T6 为主控,整合 MAX30102、DS18B20、ADXL345 与 JDY-31,实现了体温、心率血氧与姿态的实时监测和跌倒报警;通过按键本地报警 + 蓝牙 APP 远程提醒的组合,提升了独居老人的安全防护能力。系统结构清晰、成本合理,可作为智慧养老终端的参考设计进一步扩展(如增加 GPS 定位、SIM 短信报警等)。
七、资料内容完整工程资料(原理图、PCB、代码、元件清单)

八、资料获取方式

更多推荐


所有评论(0)