基于STM32单片机的家庭医护血氧体温血压吃药监测APP系统
基于STM32单片机的家庭医护血氧体温血压吃药监测APP系统设计
1 功能介绍
本系统的设计目标是利用STM32单片机构建一个家庭医护监测系统,集成血氧、体温、血压检测与用药提醒功能,能够帮助用户在日常生活中进行自我健康管理。系统通过传感器采集血氧饱和度、体温和血压等人体健康指标,并实时在OLED显示屏上显示,同时通过蓝牙模块将数据传输至手机APP,方便用户远程查看。
当体温超过设定的报警阈值时,系统能够触发蜂鸣器或提示信息,以提醒用户注意身体状况。除此之外,系统还具备用药定时提醒功能,用户可通过按键设定倒计时时间,到达时间后系统将自动驱动继电器,提醒用户按时服药。这一功能尤其适合需要长期规律用药的老年人群体,能够有效防止漏服和误服药物。
系统的主要功能点如下:
- 实时检测血氧、体温、血压数据,并在OLED屏幕显示;
- 通过蓝牙传输至手机APP,实现远程数据监控;
- 可设定体温报警阈值,一旦超出则触发报警;
- 定时吃药功能,可通过按键设定倒计时,到时通过继电器执行提醒。
该系统不仅能够提升家庭医疗监护的便利性,还能为用户提供实时、直观的健康数据反馈,具备较高的应用价值。
2 系统电路设计
系统电路设计以STM32单片机为核心,围绕其展开各个功能模块的搭建。整体电路结构包括:传感器检测模块、显示模块、通信模块、报警模块、继电器控制模块以及电源模块。
2.1 主控芯片电路(STM32最小系统)
STM32单片机作为系统的主控核心,负责处理传感器数据、逻辑运算、显示驱动及通信控制。本设计采用STM32F103C8T6芯片,内置Cortex-M3内核,具备较强的处理能力,能够满足血氧、体温、血压信号采集及数据处理的实时性需求。最小系统电路包括:
- 晶振电路:提供系统时钟;
- 复位电路:确保芯片上电时稳定运行;
- 电源电路:为芯片提供3.3V稳定电源。
2.2 血氧检测电路
血氧检测部分通常采用光电式传感器(如MAX30102)。该传感器通过红外光和红光照射手指,检测血液对不同波长光的吸收特性,从而计算血氧饱和度。传感器模块通过I2C接口与STM32单片机连接,实时传输检测数据。
2.3 体温检测电路
体温检测采用数字温度传感器DS18B20,具备高精度、单总线通信的特点。它能够直接将温度转换为数字信号,传输给STM32进行处理,并与设定的报警阈值进行比较。当体温超过设定值时,系统触发蜂鸣器报警。
2.4 血压检测电路
血压检测部分可采用常见的电子血压模块,其内部包含压力传感器与气泵。通过测量脉搏波动及压力值,计算收缩压与舒张压。模块一般通过ADC接口连接STM32,实现信号的模数转换与运算处理。
2.5 OLED显示电路
OLED显示屏用于实时显示血氧、体温、血压以及定时功能状态。本设计采用I2C接口OLED模块,显示清晰、功耗低,且能够以图形化方式呈现数据。
2.6 蓝牙模块电路
蓝牙模块选用HC-05或BLE模块,通过UART串口与STM32进行通信。模块负责将健康数据发送至手机APP,用户可通过APP查看血氧、体温、血压实时信息。
2.7 按键电路
系统设计了多个按键,包括:
- 阈值设置按键:用于调整体温报警阈值;
- 定时设置按键:用于设定吃药倒计时;
- key_up按键:启动倒计时功能;
- key_down按键:取消或调整倒计时。
2.8 蜂鸣器与继电器电路
蜂鸣器作为报警输出装置,当体温超过阈值或倒计时结束时启动。
继电器控制电路用于驱动外部负载(如小电机或提示灯),模拟吃药提醒的执行过程。
2.9 电源电路
整个系统供电采用5V直流电源,经过LDO转换后为STM32和传感器提供3.3V电压,保证电路稳定运行。
3 程序设计
程序设计是本系统的核心环节,主要包括传感器数据采集与处理、显示刷新、蓝牙通信、阈值设定与倒计时逻辑控制等功能。程序采用C语言在Keil环境下进行开发,并基于STM32标准外设库实现。
3.1 主程序设计
主程序负责系统的初始化和功能调用,具体流程包括:硬件初始化、传感器数据采集、OLED显示更新、蓝牙数据上传、报警与继电器控制逻辑。
#include "stm32f10x.h"
#include "oled.h"
#include "ds18b20.h"
#include "max30102.h"
#include "blood_pressure.h"
#include "bluetooth.h"
#include "relay.h"
#include "key.h"
#include "timer.h"float temperature;
int spo2;
int sys_bp, dia_bp;
int temp_threshold = 38; // 默认体温报警阈值
int countdown_time = 0; // 倒计时变量
int countdown_flag = 0;int main(void)
{OLED_Init();DS18B20_Init();MAX30102_Init();BP_Init();Bluetooth_Init();Relay_Init();Key_Init();Timer_Init();while(1){// 采集体温temperature = DS18B20_ReadTemp();// 采集血氧spo2 = MAX30102_ReadSpO2();// 采集血压BP_Read(&sys_bp, &dia_bp);// OLED显示OLED_ShowString(0,0,"Temp:");OLED_ShowFloat(40,0,temperature,2);OLED_ShowString(0,2,"SpO2:");OLED_ShowNum(40,2,spo2,3);OLED_ShowString(0,4,"BP:");OLED_ShowNum(40,4,sys_bp,3);OLED_ShowChar(70,4,'/');OLED_ShowNum(80,4,dia_bp,3);// 蓝牙数据发送Bluetooth_SendData(temperature, spo2, sys_bp, dia_bp);// 报警逻辑if(temperature > temp_threshold) {Buzzer_On();} else {Buzzer_Off();}// 倒计时功能if(countdown_flag) {if(countdown_time > 0) {countdown_time--;Delay_ms(1000);} else {Relay_On(); // 打开继电器提醒吃药Buzzer_On();countdown_flag = 0;}}}
}
3.2 体温检测程序
float DS18B20_ReadTemp(void)
{// 读取DS18B20温度值,单位摄氏度float temp;// ... 具体驱动代码 ...return temp;
}
3.3 血氧检测程序
int MAX30102_ReadSpO2(void)
{int spo2 = 0;// ... 具体驱动代码 ...return spo2;
}
3.4 血压检测程序
void BP_Read(int *sys_bp, int *dia_bp)
{// 模拟血压读取*sys_bp = 120;*dia_bp = 80;
}
3.5 蓝牙通信程序
void Bluetooth_SendData(float temp, int spo2, int sys, int dia)
{char buffer[50];sprintf(buffer,"T:%.2f,S:%d,BP:%d/%d\n",temp,spo2,sys,dia);USART_SendString(buffer);
}
3.6 按键与倒计时逻辑
void Key_Process(void)
{if(Key_Scan(KEY_UP) == KEY_ON) {countdown_time = 600; // 默认10分钟倒计时countdown_flag = 1;}if(Key_Scan(KEY_DOWN) == KEY_ON) {countdown_flag = 0; // 取消倒计时Relay_Off();}
}
4 总结
本系统通过STM32单片机整合血氧、体温、血压检测,并结合OLED显示和蓝牙通信,实现了实时监测与远程查看功能。通过按键可设置体温报警阈值和定时吃药提醒功能,系统在检测异常时及时发出报警,并通过继电器进行提醒,保证了用户的健康安全。
系统设计充分利用了STM32的多外设接口能力和强大的数据处理性能,传感器采集与逻辑控制紧密结合,具备较高的实用性和扩展性,能够在家庭医疗、老年人健康监护等场景中得到广泛应用。