本设计的硬件构成:
STM32F103C8T6单片机最小系统板(包含+3.3V稳压电路+时钟晶振电路+复位电路(上电自复位,手动复位)),心率传感器、气压传感器、液晶显示、按键、蜂鸣器、LED灯、蓝牙模块组合而成;
功能介绍:
1、检测呼吸状态频率、心率。LCD显示屏幕进行数据显示呼吸频率、心率值。
2、可以按键设置呼吸状态阈值,如果超过阈值,发生声光报警。按键1:设置键;按键2:加一键;按键3:减一键。
3、通过蓝牙模块通信连接手机 APP,显示呼吸、心率数据。
4、系统根据呼吸频率判断并且显示睡眠阶段:深度睡眠、浅度睡眠、清醒。
PCB:
部分程序源码:
int main(void)
{
u8 key_value=0;
delay_init(); //延时函数初始化
UART1_INIT(9600);
Lcd_GPIO_init();
Lcd_Init() ;
Lcd_Puts(0,0," Initialzing");
HX711_GPIO_Init();
BEEP_Init();
RELAY_Init();
EXTIX_Init(); // 初始化外部中断
KEY_Init();//IO初始化
TIM2_Init(49,7199);//5ms
beep=0;
delay_ms(500); //上电瞬间加入一定延时在初始化
beep=1;
To_Zero();
while(1)
{
key_value=KEY_Scan(0);
key_handle(key_value);
if(time_5ms>=100)
{
time_5ms=0;
if(set==0)
display();
APP_Update(); //向APP上传数据
if((setbreath<breath)||(setheart<xinLv) &&(set==0)) //判断是否达到报警值
{
if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_9)==0)//开启蜂鸣器报警
{
beep=1;
}
else
beep=0;
}
else
beep=1;
}
if(time_50ms>=2) //采集呼吸值
{
time_50ms=0;
weight=get_weight();
count2++;
if(weight>FullScale)
{
weight_data[count2]=(weight-FullScale)/100;
}
if(count2>=100) //采集达到100次,计算呼吸频率
{
find_peak_value(); //计算峰值数据
interval=interval2-interval1;
breath=interval*7/3;
if(breath>500) //清空缓冲区数据
breath=0;
for(count2=0;count2<100;count2++)
{
weight_data[count2]=0;
}
count2=0;
}
interval1=0;
interval2=0;
}
}
}
}
资料链接:https://pan.baidu.com/s/1qzs4kjQijdTl1ywN1v753A
提取码:ncoq