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. 总结

本系统设计集成了心率、血压、体温与摔倒监测功能,适合用于老年人健康状态的实时监护。系统支持本地显示与远程上传双通道输出,具备较强的实用性与扩展性。通过合理的电路设计与模块化程序结构,使得整个系统稳定可靠,能够为物联网医疗监测提供有效技术支持。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐