基于STM32单片机的OneNet物联网云平台血压心率体温摔倒检测系统
本文介绍了一个基于STM32单片机的多功能老年人健康监测系统。该系统通过集成血压心率检测模块、温度传感器和加速度计,实时监测老年人的生理指标和摔倒状态。检测到异常时,系统会触发本地蜂鸣器报警并通过WiFi模块将数据上传至OneNet云平台。硬件设计包括传感器电路、OLED显示、WiFi通信等模块,软件采用模块化编程实现数据采集、处理、显示和云端上传功能。系统具有实时监测、异常报警和远程监护等特点,
1. 系统功能介绍
本设计是一套基于STM32单片机的多功能健康监测系统,能够实现对老年人血压、心率、体温和摔倒情况的实时检测与远程上传。系统集成了多个传感器和通信模块,能够在检测到异常情况时及时进行本地蜂鸣器报警并通过WiFi模块将数据上传至中国移动OneNet物联网云平台,便于家属或医护人员通过手机或电脑远程查看监护对象的健康状态。
主要功能如下:
- 实时采集血压、心率和体温数据,并在OLED屏幕上显示;
- 倾角检测模块用于监测老年人是否摔倒,若检测到摔倒立即触发报警;
- 检测到体温、血压、心率超出设定阈值范围时,蜂鸣器报警并上传报警信息至OneNet平台;
- 支持用户通过按键设置体温报警阈值;
- 支持WiFi联网(需手机热点),将所有数据上传至云端。
2. 系统电路设计
2.1 STM32单片机最小系统电路
本系统核心控制器为STM32F103C8T6单片机,负责传感器数据采集、数据处理、显示控制和云平台通信。单片机通过多个串口和I2C接口与外围模块通信。
2.2 ADXL345加速度传感器电路
ADXL345是数字三轴加速度计,用于检测倾斜角度和摔倒状态。它通过I2C与STM32通信,当角度变化超过一定阈值时判断为摔倒,进而触发报警与数据上传。
2.3 MK0805血压心率检测电路
MK0805是一款一体化心率血压测量模块,通过串口与STM32连接,测量收缩压、舒张压和心率值。数据定时采集并通过判断是否超出范围来决定是否报警与上传。
2.4 温度检测电路
温度检测采用DS18B20数字温度传感器,通过单总线通信接口读取人体温度。系统支持用户设置体温报警阈值,超过设定范围时触发报警。
2.5 OLED显示电路
OLED液晶模块通过I2C与STM32通信,用于实时显示温度、心率、血压、摔倒状态等监测结果。显示信息清晰,适合老人阅读。
2.6 ESP8266 WiFi通信模块电路
ESP8266通过串口与STM32通信,系统通过AT指令控制模块连接热点,并将数据以MQTT协议上传至中国移动OneNet云平台。
WiFi配置要求如下:
- 热点名称:
bochen666 - 密码:
bc888888
2.7 蜂鸣器报警电路
蜂鸣器由STM32控制,输出IO高电平时驱动蜂鸣器发出声音。用于体温、心率、血压异常和摔倒等报警场景。
2.8 按键设置电路
通过按键输入可进入温度阈值设置模式,使用多次按键操作实现阈值调整并保存,适应不同体质老人的需求。
2.9 电源电路
电路系统使用5V电源,内部通过AMS1117稳压芯片输出3.3V供给STM32、ESP8266等低压模块,确保系统稳定运行。
3. 程序设计
程序采用模块化结构编写,主循环负责调度各功能模块的数据采集、显示、判断与上传。
3.1 主程序结构
主程序包含系统初始化、数据采集、判断处理、显示输出、网络上传等核心流程。
int main(void)
{
System_Init(); // 初始化系统
OLED_Init(); // 初始化OLED
WIFI_Init(); // 初始化WiFi模块
while (1)
{
Get_Health_Data(); // 采集心率、血压、体温
Get_Accel_Data(); // 获取加速度数据判断摔倒
Display_Data(); // OLED显示数据
Judge_And_Alarm(); // 判断是否报警
Upload_To_OneNet(); // 上传数据到云平台
Delay_ms(1000);
}
}
3.2 心率血压检测模块程序
使用串口读取MK0805模块数据,对其进行解析判断。
void Get_Health_Data(void)
{
// 假设数据格式:BP:123/80 HR:75
USART_Receive(buffer);
Parse_BloodPressure(buffer);
Parse_HeartRate(buffer);
}
3.3 温度检测程序
使用DS18B20库函数读取温度并进行异常判断。
float Get_Temperature(void)
{
float temp = DS18B20_ReadTemp();
if (temp > Temp_Threshold)
{
Beep_On();
Upload_Alarm("Temperature High");
}
return temp;
}
3.4 摔倒检测程序
使用ADXL345的XYZ轴值判断是否摔倒。
void Get_Accel_Data(void)
{
ADXL345_ReadXYZ(&x, &y, &z);
if (fabs(x) > FALL_THRESHOLD || fabs(y) > FALL_THRESHOLD)
{
Beep_On();
Upload_Alarm("Fall Detected");
}
}
3.5 OLED显示程序
将当前温度、血压、心率等数据显示在OLED上。
void Display_Data(void)
{
OLED_Clear();
OLED_ShowString(0, 0, "HR:");
OLED_ShowNum(30, 0, HeartRate, 3);
OLED_ShowString(0, 1, "BP:");
OLED_ShowNum(30, 1, Systolic, 3);
OLED_ShowChar(60, 1, '/');
OLED_ShowNum(70, 1, Diastolic, 3);
OLED_ShowString(0, 2, "T:");
OLED_ShowFloat(30, 2, Temperature, 1);
}
3.6 OneNet平台上传程序
通过MQTT协议上传JSON格式数据到OneNet。
void Upload_To_OneNet(void)
{
char json[128];
sprintf(json, "{\"temp\":%.1f,\"hr\":%d,\"bp_h\":%d,\"bp_l\":%d}",
Temperature, HeartRate, Systolic, Diastolic);
ESP8266_SendMQTT(json);
}
3.7 按键设置温度阈值程序
支持用户按键增加或减少体温报警阈值。
void Key_Process(void)
{
if (KEY_UP_PRESSED)
Temp_Threshold += 0.5;
if (KEY_DOWN_PRESSED)
Temp_Threshold -= 0.5;
}
4. 总结
本系统设计集成了心率、血压、体温与摔倒监测功能,适合用于老年人健康状态的实时监护。系统支持本地显示与远程上传双通道输出,具备较强的实用性与扩展性。通过合理的电路设计与模块化程序结构,使得整个系统稳定可靠,能够为物联网医疗监测提供有效技术支持。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)