基于STM32单片机的OneNet物联网云平台血压心率体温摔倒检测系统
1 系统功能介绍
本设计的题目是 基于 STM32 单片机的 OneNet 物联网云平台血压心率体温摔倒检测系统。在现代医疗与健康监护领域,随着人口老龄化加剧和独居老年人增多,如何实时监控健康参数并在突发状况下及时报警,成为研究与应用的重点。本系统以 STM32 单片机 为核心,结合 ADXL345 加速度传感器、温度检测电路、心率血压检测电路、蜂鸣器报警模块、OLED 显示屏、WiFi 通讯模块 等电路,构建一个能够 实时采集、监控和上传健康数据 的智能监护系统。
系统主要功能如下:
-
摔倒检测报警:通过 ADXL345 加速度传感器检测人体姿态角度变化,若检测到摔倒动作,立即触发蜂鸣器报警,并通过 WiFi 模块将报警信息上传至中国移动 OneNet 物联网云平台。
-
生命体征监测:系统实时采集人体的 体温、血压、心率 数据,并在 OLED 屏幕上显示,同时上传至 OneNet 云平台。
-
异常报警机制:
- 血压:舒张压正常范围为 60
90 mmHg,收缩压正常范围为 90140 mmHg; - 心率:正常范围为 60~100 次/分钟;
- 当检测值超出上述范围,系统自动触发蜂鸣器报警,并上传至云端。
- 血压:舒张压正常范围为 60
-
温度阈值设置:通过按键可设定体温报警阈值,当体温超过该阈值时,蜂鸣器报警并上传信息至 OneNet。
-
无线通信:通过 WiFi 模块连接手机热点(WIFI 名称:bochen666,密码:bc888888),系统将监测结果实时推送到物联网云平台,便于家属或医生远程查看。
2 系统电路设计
整个系统由 核心控制单元、传感器采集单元、报警单元、显示单元、通信单元、电源单元 等部分组成。模块化设计不仅简化了调试,还提升了系统的稳定性和扩展性。
2.1 STM32 单片机核心电路
- 选用 STM32F103C8T6 作为主控芯片,Cortex-M3 内核,运行速度高,资源丰富;
- 内置多路 ADC,可同时采集温度、心率血压信号;
- 丰富的外设接口,支持 I2C(用于 ADXL345)、SPI/I2C(用于 OLED)、USART(用于 WiFi 模块)。
- 通过外接晶振电路保证时钟稳定,通过复位电路保证上电初始化正常。
2.2 ADXL345 加速度传感器电路
ADXL345 是三轴数字加速度传感器,主要用于 姿态监测与摔倒检测。
- 通过 I2C 接口与 STM32 连接,实时读取三轴加速度数据;
- 程序中通过判断加速度变化特征(如 Z 轴角度突变)来识别摔倒事件;
- 当检测到摔倒,立即触发蜂鸣器并上传报警信息。
2.3 心率血压检测电路(MK0805 模块)
- MK0805 是集成心率与血压测量的传感器模块;
- 测量结果通过串口或模拟信号输入 STM32;
- 程序对数据进行分析,提取收缩压、舒张压及心率参数;
- 判断结果是否在正常范围,若异常则报警并上传云端。
2.4 温度检测电路
- 使用常见的数字温度传感器(如 DS18B20)或模拟温度模块;
- 单片机定时读取温度数据,并与用户设定的阈值比较;
- 超出阈值则蜂鸣器报警,同时上传异常数据。
2.5 OLED 显示电路
- 使用 0.96 寸 I2C 接口 OLED 显示屏;
- 实时显示 体温、心率、血压、摔倒状态;
- 按键切换不同信息显示页面,界面简洁直观。
2.6 WiFi 通信电路
-
使用 ESP8266 WiFi 模块,负责与 OneNet 平台通信;
-
串口与 STM32 连接,AT 指令配置 WiFi 热点:
- SSID: bochen666
- Password: bc888888
-
通过 MQTT 协议与 OneNet 云平台进行数据交互,上传监测数据,接收远程指令。
2.7 蜂鸣器报警电路
- 使用有源蜂鸣器,由 STM32 GPIO 控制;
- 在摔倒、血压心率异常或体温超过阈值时发出声响;
- 作为本地实时提醒机制,与云端报警形成互补。
2.8 按键电路
- 用于设定温度报警阈值、切换显示模式等操作;
- 按键输入通过 GPIO 检测,并在程序中进行去抖动处理。
2.9 电源电路
- 系统工作电压为 5V,通过 AMS1117 稳压至 3.3V 供给 STM32、ESP8266 等模块;
- 电源电路采用滤波与保护措施,保证系统稳定性。
3 程序设计
程序设计采用 模块化思想,分为主程序、传感器采集、摔倒检测、OLED 显示、按键设置、WiFi 通信、蜂鸣器报警等子程序。
3.1 主程序框架
#include "stm32f10x.h"
#include "oled.h"
#include "adxl345.h"
#include "wifi.h"
#include "sensor.h"
#include "key.h"
#include "buzzer.h"
int main(void)
{
System_Init(); // 系统初始化
OLED_Init(); // OLED 初始化
ADXL345_Init(); // 加速度传感器初始化
WIFI_Init(); // WiFi 初始化
Sensor_Init(); // 温度/血压/心率传感器初始化
while(1)
{
Key_Scan(); // 按键处理
Temp_Process(); // 温度检测与报警
BP_HR_Process(); // 血压心率检测
Fall_Process(); // 摔倒检测
OLED_Display(); // 显示数据
WIFI_Upload(); // 数据上传至 OneNet
}
}
3.2 摔倒检测程序
void Fall_Process(void)
{
int x, y, z;
ADXL345_Read(&x, &y, &z);
if(abs(z) < 200 && abs(x) > 400) // 简化判定条件
{
Buzzer_On();
WIFI_Send("ALARM: FALL DETECTED");
}
else
{
Buzzer_Off();
}
}
3.3 血压心率检测程序
void BP_HR_Process(void)
{
int sys, dia, hr;
Sensor_ReadBP(&sys, &dia, &hr);
if(sys > 140 || sys < 90 || dia > 90 || dia < 60 || hr < 60 || hr > 100)
{
Buzzer_On();
WIFI_Send("ALARM: BP/HR ABNORMAL");
}
}
3.4 温度检测与阈值设置
float temp, temp_threshold = 37.5;
void Temp_Process(void)
{
temp = Sensor_ReadTemp();
if(temp > temp_threshold)
{
Buzzer_On();
WIFI_Send("ALARM: TEMPERATURE HIGH");
}
}
void Key_Scan(void)
{
if(KEY_UP == 0) temp_threshold += 0.5; // 增加阈值
if(KEY_DOWN == 0) temp_threshold -= 0.5; // 减少阈值
}
3.5 WiFi 数据上传程序
void WIFI_Upload(void)
{
char buffer[100];
sprintf(buffer, "{'temp':%.1f,'sys':%d,'dia':%d,'hr':%d}", temp, sys, dia, hr);
WIFI_Send(buffer);
}
3.6 OLED 显示程序
void OLED_Display(void)
{
OLED_ShowString(0,0,"Temp:");
OLED_ShowFloat(40,0,temp,1);
OLED_ShowString(0,2,"BP:");
OLED_ShowNum(30,2,sys,3);
OLED_ShowChar(60,2,'/');
OLED_ShowNum(70,2,dia,3);
OLED_ShowString(0,4,"HR:");
OLED_ShowNum(30,4,hr,3);
}
4 总结
本文设计了一个 基于 STM32 单片机的 OneNet 云平台血压心率体温摔倒检测系统,实现了对人体健康数据的 实时采集、显示、报警与上传。系统的亮点在于:
- 多参数监测:同时检测血压、心率、体温及摔倒状态,功能全面。
- 本地与远程双重报警:蜂鸣器提供本地提醒,WiFi 模块实现远程云端报警。
- 智能交互:通过按键可设定报警阈值,增强系统的灵活性。
- 物联网接入:利用 OneNet 平台,家属或医生可远程查看健康数据,提升监护的实时性与安全性。
该系统不仅适用于独居老人、慢病患者的日常健康监测,还可扩展应用于运动监测、社区健康管理等场景,具有良好的实用价值和推广前景。
更多推荐
所有评论(0)