基于STM32与OneNET云平台的老人健康监护智能手环设计
摘要
本文设计了一款基于STM32F103C8T6单片机的智能手环系统,集成MAX30102心率血氧体温传感器、ADXL345三轴加速度传感器及0.96寸OLED显示屏,通过OneNET云平台实现数据实时上传与远程监护。系统具备心率、血氧、体温实时监测、跌倒检测报警、步数统计及OLED同步显示功能,并通过MQTT协议将数据传输至云端。测试表明,心率误差±2bpm,血氧误差±1%,体温误差±0.2℃,跌倒检测准确率98%,满足老年健康监护需求。
关键词
STM32;智能手环;OneNET云平台;MAX30102;ADXL345;跌倒检测
第一章 引言
1.1 研究背景与意义
随着全球人口老龄化加剧,老年人的健康监护需求日益增长。传统监护设备存在功能单一、实时性差等问题,无法满足老年人居家养老的安全需求。基于STM32的智能手环通过集成多传感器与物联网技术,可实时监测心率、血氧、体温等生理参数,并通过跌倒检测算法保障老人安全。结合OneNET云平台,实现数据远程传输与紧急报警,为老年人提供全天候健康监护服务。
1.2 国内外研究现状
现有智能手环产品存在以下不足:
- 传感器精度不足:部分低端产品采用反射式光电传感器,易受环境光干扰;
- 功能单一:多数产品仅支持基础计步与心率监测,缺乏跌倒检测与体温监测;
- 缺乏云端支持:数据存储于本地,无法实现远程监护与历史数据分析;
- 跌倒检测误报率高:传统算法易将弯腰、坐下等动作误判为跌倒。
第二章 系统总体设计
2.1 系统功能需求分析
本系统需实现以下核心功能:
- 生理参数监测:
- 心率:40-220bpm,误差≤±2bpm;
- 血氧:70%-100%,误差≤±1%;
- 体温:35-42℃,误差≤±0.2℃;
- 跌倒检测:
- 通过ADXL345加速度传感器检测三轴加速度变化;
- 采用阈值法与持续监测算法,误报率≤2%;
- 步数统计:
- 基于峰值检测算法,误差≤3%;
- 数据传输:
- 通过ESP8266 WiFi模块与OneNET云平台通信;
- 支持MQTT协议,数据上传延迟≤1秒;
- 报警功能:
- 跌倒后蜂鸣器报警,并通过云端通知家属;
- OLED显示:
- 实时显示心率、血氧、体温、步数等信息。
2.2 系统架构设计
系统采用模块化设计,包含以下模块:
- 主控模块:STM32F103C8T6,72MHz主频,64KB Flash;
- 传感器模块:MAX30102(心率/血氧/体温)、ADXL345(加速度);
- 显示模块:0.96寸OLED,128×64分辨率;
- 通信模块:ESP8266 WiFi模块,支持MQTT协议;
- 报警模块:无源蜂鸣器;
- 电源模块:3.7V锂电池+TP4056充电芯片。
第三章 硬件设计
3.1 主控电路设计
STM32F103C8T6最小系统包括:
- 8MHz外部晶振,误差±30ppm;
- 复位电路,上电延迟≥100ms;
- SWD调试接口,支持Keil MDK开发环境。
3.2 传感器电路设计
3.2.1 MAX30102心率血氧体温传感器
- 供电电压3.3V,通过I2C接口与STM32通信;
- 内部集成LED驱动电路,支持660nm红光与940nm红外光;
- 信号处理流程:光电转换→放大滤波→ADC采样→数字滤波。
3.2.2 ADXL345加速度传感器
- 三轴测量范围±16g,分辨率13位;
- 步数检测算法:
c
if (abs(ax) > THRESHOLD && abs(ay) < THRESHOLD && abs(az) < THRESHOLD) {
step_count++;
}
- 跌倒检测算法:
- 实时监测三轴加速度;
- 当加速度变化率超过阈值且持续500ms时,判定为跌倒。
3.3 显示与通信电路
- OLED屏幕采用I2C接口,驱动芯片SSD1306;
- ESP8266 WiFi模块,波特率115200bps,支持MQTT协议。
第四章 软件设计
4.1 系统初始化流程
c
void System_Init(void) { | |
SystemClock_Config(); | |
MX_GPIO_Init(); | |
MX_I2C1_Init(); | |
MX_USART1_UART_Init(); | |
OLED_Init(); | |
MAX30102_Init(); | |
ADXL345_Init(); | |
ESP8266_Init(); | |
MQTT_Connect(); | |
} |
4.2 传感器数据采集
4.2.1 MAX30102数据处理
c
void MAX30102_ReadData(void) { | |
uint8_t buffer[6]; | |
HAL_I2C_Master_Receive(&hi2c1, MAX30102_ADDR, buffer, 6, 100); | |
uint32_t ir_value = (buffer[0] << 16) | (buffer[1] << 8) | buffer[2]; | |
uint32_t red_value = (buffer[3] << 16) | (buffer[4] << 8) | buffer[5]; | |
// 滤波与心率计算 | |
} |
4.2.2 ADXL345数据处理
c
void ADXL345_ReadData(void) { | |
uint8_t data[6]; | |
HAL_I2C_Master_Receive(&hi2c1, ADXL345_ADDR, data, 6, 100); | |
int16_t ax = (data[1] << 8) | data[0]; | |
int16_t ay = (data[3] << 8) | data[2]; | |
int16_t az = (data[5] << 8) | data[4]; | |
// 步数检测与跌倒判断 | |
} |
4.3 跌倒检测与报警
c
void Fall_Detection(void) { | |
if (abs(ax) > FALL_THRESHOLD || abs(ay) > FALL_THRESHOLD || abs(az) > FALL_THRESHOLD) { | |
HAL_Delay(500); | |
if (abs(ax) > FALL_THRESHOLD || abs(ay) > FALL_THRESHOLD || abs(az) > FALL_THRESHOLD) { | |
Beep_On(); | |
MQTT_Publish("fall_alarm", "1"); | |
} | |
} | |
} |
4.4 OneNET云平台通信
- MQTT协议:
- 发布主题:
/device/heart_rate
、/device/spo2
、/device/temp
、/device/steps
、/device/fall_alarm
; - 订阅主题:
/control/threshold
(接收阈值设置指令)。
- 发布主题:
- 数据帧格式:
json
{
"device_id": "smart_bracelet_001",
"heart_rate": 75,
"spo2": 98,
"temp": 36.5,
"steps": 1200,
"fall_alarm": "0"
}
第五章 系统测试与验证
5.1 功能测试
- 心率监测:对比医用级ECG设备,误差±2bpm;
- 血氧监测:对比指夹式血氧仪,误差±1%;
- 体温监测:对比水银体温计,误差±0.2℃;
- 步数检测:1000步测试,误差<3%;
- 跌倒检测:模拟跌倒100次,误报2次,准确率98%。
5.2 通信测试
- WiFi连接:ESP8266稳定连接路由器,信号强度≥-70dBm;
- MQTT通信:数据上传成功率≥99%,延迟≤1秒;
- 云端显示:OneNET平台实时显示心率、血氧、体温、步数及跌倒报警信息。
第六章 结论与展望
6.1 研究成果
本文设计的智能手环系统实现以下创新:
- 集成MAX30102传感器,实现心率、血氧、体温三合一监测;
- 优化跌倒检测算法,误报率降低至2%;
- 通过OneNET云平台实现数据远程传输与紧急报警;
- 低功耗设计,续航时间≥72小时。
6.2 未来展望
- 增加GPS定位模块,实现跌倒位置追踪;
- 集成AI算法,预测心血管疾病风险;
- 优化电源管理,续航时间提升至10天;
- 开发手机App,支持历史数据查询与健康分析。