基于STM32单片机的家庭医护血氧体温血压吃药监测APP系统

1 基于STM32单片机的家庭医护血氧体温血压吃药监测APP系统

本设计以STM32F103C8T6单片机为核心控制器,结合血氧检测模块、DS18B20温度传感器、血压检测模块、OLED显示屏、蓝牙通信模块、按键输入电路及继电器控制电路,构建了一套家庭医护监测系统。该系统不仅能够实时监测血氧、体温和血压,还能通过手机APP接收数据,提供定时吃药提醒和自动执行的功能,从而提升家庭健康管理的智能化与自动化水平。


2 系统功能介绍

系统的功能主要体现在以下几个方面:

  1. 健康数据检测

    系统通过血氧模块、DS18B20温度传感器和血压检测电路实时采集人体的血氧饱和度、体温和血压数据,并通过OLED液晶屏直观显示。

  2. 蓝牙数据传输

    通过蓝牙模块将采集到的血氧、体温和血压数据发送到手机APP,用户可以在APP中实时查看健康数据并进行记录。

  3. 体温报警阈值设置

    用户可以通过按键设置体温报警阈值。当检测到的体温超过设定阈值时,系统会触发报警提示,帮助用户及时发现异常。

  4. 定时吃药功能

    系统支持倒计时功能,用户可通过按键设置倒计时时间。例如设置10分钟后提醒吃药,倒计时结束后系统自动驱动继电器输出,实现智能提醒或直接触发相关执行装置。

  5. 交互与操作

    通过多按键设计,用户能够实现体温阈值调整、定时设置、倒计时开始与取消等操作。OLED屏幕和手机APP共同提供运行界面和状态反馈。


3 系统电路设计

3.1 STM32F103C8T6最小系统电路

STM32F103C8T6作为控制核心,承担信号采集、逻辑处理、通信和输出控制任务。最小系统电路包括电源电路(3.3V稳压模块)、时钟电路(外部8MHz晶振及内部PLL倍频)、复位电路和调试下载接口(SWD)。其强大的运算能力和丰富的外设接口保证了系统的稳定运行。

3.2 血氧检测模块电路

血氧检测模块一般采用光电传感原理,通过红光和红外光透射手指,测量血液中的血氧饱和度(SpO₂)。模块输出数据通过I²C总线传输至STM32,由单片机计算和显示血氧值。该模块在硬件设计上对电源噪声要求较高,因此需增加滤波电容。

3.3 DS18B20温度检测电路

体温检测采用DS18B20数字温度传感器,具有单总线接口,使用简单且精度较高。传感器直接输出数字信号,避免了模拟采样中的误差。STM32通过单总线协议读取温度数据,并与用户设置的阈值进行比较,当超过阈值时触发报警。

3.4 血压检测模块电路

血压检测一般采用集成血压测量芯片或模拟传感器配合运算放大器进行信号调理。模块采集血压信号并通过ADC接口传输给STM32,单片机对数据进行滤波和处理后显示到OLED上。

3.5 OLED显示电路

OLED显示屏采用I²C接口,与STM32连接简单,功耗低且显示效果清晰。其任务是实时显示血氧、体温、血压数值以及倒计时剩余时间等信息,使用户能够直观掌握系统状态。

3.6 蓝牙通信模块电路

蓝牙模块采用常见的HC-05/HC-06,使用UART串口与STM32通信。模块将采集到的健康数据传输到手机APP端,支持实时显示和数据记录。

3.7 按键电路

按键电路由多个独立按键组成,用于:

  • set_key:进入倒计时设置模式或修改体温阈值模式。
  • key_up:数值增加(如增加体温阈值或增加倒计时时间)。
  • key_down :数值减少(如减少体温阈值或减少倒计时时间)。
    按键采用上拉电阻配置,低电平触发,并在程序中进行消抖处理。

3.8 继电器控制电路

继电器电路用于定时吃药提醒的执行。倒计时结束后,STM32输出控制信号驱动继电器闭合,可连接蜂鸣器、灯光或其他执行装置,实现提醒或动作输出。继电器电路需要配合二极管进行反向电动势保护。


4 程序设计

4.1 主程序框架

主程序包括系统初始化、传感器数据采集、显示更新、蓝牙通信、按键检测和继电器控制。逻辑框架如下:

  1. 初始化系统时钟、OLED、蓝牙模块、DS18B20和血氧模块。
  2. 默认设置体温报警阈值。
  3. 主循环中,定时采集血氧、体温和血压数据,更新OLED显示和蓝牙传输。
  4. 检测按键状态,修改参数或启动倒计时。
  5. 倒计时结束后输出继电器控制信号。
c 复制代码
#include "stm32f10x.h"
#include "oled.h"
#include "ds18b20.h"
#include "spo2.h"
#include "bp.h"
#include "bluetooth.h"
#include "key.h"
#include "relay.h"

float temp_threshold = 37.5;  // 初始体温报警阈值
uint16_t countdown_time = 0;  // 倒计时时间,单位:分钟
uint8_t countdown_flag = 0;

int main(void) {
    SystemInit();
    OLED_Init();
    DS18B20_Init();
    SPO2_Init();
    BP_Init();
    BT_Init();
    Key_Init();
    Relay_Init();

    while (1) {
        float temp = DS18B20_ReadTemp();
        int spo2 = SPO2_Read();
        int bp = BP_Read();

        OLED_ShowData(temp, spo2, bp, countdown_time);
        BT_SendData(temp, spo2, bp);

        if (temp > temp_threshold) {
            OLED_ShowString(2, 0, "Temp Alarm!");
        }

        Key_Process(&temp_threshold, &countdown_time, &countdown_flag);

        if (countdown_flag) {
            if (countdown_time == 0) {
                Relay_On();
                OLED_ShowString(3, 0, "Take Medicine!");
            }
        }
    }
}

4.2 DS18B20温度检测程序

负责读取体温并与阈值比较,超限时触发报警。

c 复制代码
float DS18B20_ReadTemp(void) {
    // 单总线协议读温度
    int temp = DS18B20_GetData();
    return (float)temp / 16.0;
}

4.3 血氧检测模块程序

通过I²C通信获取血氧数据并返回。

c 复制代码
int SPO2_Read(void) {
    int spo2 = I2C_ReadData(SPO2_ADDR);
    return spo2;
}

4.4 血压检测模块程序

血压数据通过ADC接口采样,并经简单滤波处理后返回。

c 复制代码
int BP_Read(void) {
    uint16_t adc_val = ADC_GetConversionValue(ADC1);
    int bp = adc_val * 0.1;  // 假设换算比例
    return bp;
}

4.5 蓝牙模块程序

蓝牙通过串口发送数据至APP。

c 复制代码
void BT_SendData(float temp, int spo2, int bp) {
    char buf[50];
    sprintf(buf, "T:%.1f S:%d BP:%d\r\n", temp, spo2, bp);
    USART_SendString(USART1, buf);
}

4.6 按键控制程序

实现阈值与倒计时时间的修改,并支持倒计时启动。

c 复制代码
void Key_Process(float *threshold, uint16_t *cd_time, uint8_t *flag) {
    if (Key_Scan(SET_KEY)) {
        *flag = !(*flag);
    }
    if (Key_Scan(KEY_UP)) {
        if (*flag) (*cd_time) += 1; // 倒计时加1分钟
        else *threshold += 0.1;     // 阈值加0.1℃
    }
    if (Key_Scan(KEY_DOWN)) {
        if (*flag && *cd_time > 0) (*cd_time) -= 1;
        else if (!*flag) *threshold -= 0.1;
    }
}

4.7 继电器控制程序

倒计时结束后执行。

c 复制代码
void Relay_On(void) {
    GPIO_SetBits(GPIOB, GPIO_Pin_5);
}

5 总结

本设计以STM32单片机为核心,结合血氧、体温和血压检测模块,完成了家庭健康数据的实时采集与显示,并通过蓝牙模块实现数据上传至手机APP。系统不仅具备体温报警阈值设置和报警功能,还设计了定时吃药的智能提醒,能够有效提升家庭健康管理的便利性与智能化水平。

从电路设计到程序实现,本项目涵盖了传感器数据采集、OLED显示、蓝牙通信、按键交互和继电器控制等多方面技术,具有较强的实践价值与推广意义。

相关推荐
Vae_Mars11 分钟前
单片机中的TVS管
单片机·嵌入式硬件
hazy1k2 小时前
51单片机基础-直流电机控制
stm32·单片机·嵌入式硬件·51单片机
B站_计算机毕业设计之家2 小时前
计算机毕业设计:Python农业数据可视化分析系统 气象数据 农业生产 粮食数据 播种数据 爬虫 Django框架 天气数据 降水量(源码+文档)✅
大数据·爬虫·python·机器学习·信息可视化·课程设计·农业
小莞尔4 小时前
【51单片机】【protues仿真】基于51单片机智能窗帘系统
c语言·stm32·单片机·嵌入式硬件·物联网·51单片机
我先去打把游戏先6 小时前
ESP32学习笔记(基于IDF):IOT应用——WIFI连接
笔记·单片机·嵌入式硬件·mcu·物联网·学习·esp32
狮智先生8 小时前
【学习笔记】利用meshlab进行曲面的质量检查
经验分享·笔记·课程设计·几何学
清风6666669 小时前
基于单片机的简易智能衣架控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计
酷飞飞9 小时前
I2C软实现基于GD32F407VE的天空星的配置
单片机·嵌入式硬件
充哥单片机设计9 小时前
【STM32项目开源】基于STM32的人体健康监测系统
stm32·单片机·嵌入式硬件
羊羊小栈10 小时前
基于知识图谱(Neo4j)和大语言模型(LLM)的图检索增强(GraphRAG)的台风灾害知识问答系统(vue+flask+AI算法)
人工智能·毕业设计·知识图谱·创业创新·neo4j·毕设·大作业