• STM32项目分享:心率血氧手环(可报警)


     目录

    一、前言

    二、项目简介

    1.功能详解

    2.主要器件

    三、原理图设计

    四、PCB硬件设计

    1.PCB图 

    2.PCB板打样焊接图

    五、程序设计 

    六、实验效果 

    七、资料内容

    项目分享


    一、前言

    项目成品图片:

    哔哩哔哩视频链接:

    https://www.bilibili.com/video/BV1z1421d7Yp/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

    (资料分享见文末) 

    二、项目简介

    1.功能详解

    基于STM32的心率血氧手环(可报警)。功能如下:

    1. 心率血氧采集:MAX30102采集人体心率和血氧
    2. 计步:ADXL345三轴加速传感器记录人行走步数
    3. 时间显示:外部DS1302时钟模块读取和保存当前实时时间(支持掉电保存)
    4. 温度采集:DS18B20温度传感器采集人体体温
    5. OLED显示:显示当前时间、体温、心率、血氧和步数信息
    6. 按键控制:调整时间和日期,为心率、血氧和体温设置正常阈值范围
    7. 异常报警:当心率、血氧和体温在阈值范围外时触发声光报警(蜂鸣器报警、指示灯闪烁)
    8. 蓝牙APP控制:手机端蓝牙app显示心率、血氧、体温和步数信息,并可设置阈值上下限和控制步数清零
    9. 跌倒检测:板子倾斜90°持续5秒以上触发跌倒监测报警

    2.主要器件

    • STM32F103C8T6最小系统板
    • OLED显示屏(4针I2C协议)
    • MAX30302心率血氧传感器
    • ADXL345加速度传感器
    • DS18B20温度传感器
    • 蓝牙模块(BT04-A)
    • 蜂鸣器
    • LED灯

    三、原理图设计

    四、PCB硬件设计

    1.PCB图 

    2.PCB板打样焊接图

    五、程序设计 

    1. int main(void)
    2. {
    3. unsigned char i;
    4. DelayInit();
    5. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    6. I2C_Configuration(); //IIC初始化
    7. OLED_Init(); //OLED初始化
    8. KEY_Init(); //按键初始化
    9. DelayMs(200);
    10. CheckNewMcu();
    11. OLED_CLS();//清屏
    12. DS18B20_Init();
    13. DS1302_Init(&SysDate);
    14. DelayMs(100);
    15. for(i=0;i<8;i++)OLED_ShowCN(i*16,2,i+8,0);//测试显示中文:欢迎使用使能手环
    16. DelayMs(1000);
    17. OLED_CLS();//清屏
    18. DS1302_DateRead(&SysDate);//读时间
    19. OLED_CLS();//清屏
    20. for(i=0;i<2;i++)OLED_ShowCN(i*16,4,i+16,1);//测试显示中文:心率
    21. for(i=0;i<2;i++)OLED_ShowCN(i*16+48,4,i+18,1);//测试显示中文:血氧
    22. for(i=0;i<2;i++)OLED_ShowCN(i*16+95,4,i+20,1);//测试显示中文:步数
    23. OLED_ShowCentigrade(112, 2); //℃
    24. IIC_init();//IIC初始化
    25. uart1_Init(9600);
    26. adxl345_init();//ADXL345初始化
    27. Init_MAX30102();//MAX30102初始化
    28. TIM2_Init(99,719); //定时器初始化,定时1ms
    29. //Tout = ((arr+1)*(psc+1))/Tclk ;
    30. //Tclk:定时器输入频率(单位MHZ)
    31. //Tout:定时器溢出时间(单位us)
    32. while(1)
    33. {
    34. shanshuo=!shanshuo;
    35. KeySettings();
    36. DisplayTime();
    37. if(setn == 0)//不在设置状态下,读取相关数据
    38. {
    39. DisplayTemperature();
    40. GetSteps();
    41. GetHeartRateSpO2();
    42. if(fallTime==0)
    43. {
    44. if(displayfall==0)
    45. {
    46. displayfall=1;
    47. OLED_CLS();//清屏
    48. for(i=0;i<3;i++)OLED_ShowCN(i*16+48,2,i+64,0);//测试显示中文:跌倒
    49. UsartSendReceiveData();
    50. DelayMs(1000);DelayMs(1000);
    51. OLED_CLS();//清屏
    52. for(i=0;i<2;i++)OLED_ShowCN(i*16,4,i+16,1);//测试显示中文:心率
    53. for(i=0;i<2;i++)OLED_ShowCN(i*16+48,4,i+18,1);//测试显示中文:血氧
    54. for(i=0;i<2;i++)OLED_ShowCN(i*16+95,4,i+20,1);//测试显示中文:步数
    55. OLED_ShowCentigrade(112, 2); //℃
    56. }
    57. }
    58. }
    59. UsartSendReceiveData();
    60. DelayMs(10);
    61. }
    62. }
    63. void TIM2_IRQHandler(void)//定时器2中断服务程序,用于记录时间
    64. {
    65. static u16 timeCount1 = 0;
    66. static u16 timeCount3 = 0;
    67. if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
    68. {
    69. TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除中断标志位
    70. timeCount1 ++;
    71. if(timeCount1 >= 800)
    72. {
    73. timeCount1 = 0;
    74. sendFlag = 1;
    75. if(tiltFlag)
    76. {
    77. if(fallTime>0)fallTime--; //跌倒时间倒计时
    78. }
    79. }
    80. timeCount3 ++;
    81. if(timeCount3 >= 100)
    82. {
    83. timeCount3=0;
    84. if(fallTime==0){ //跌倒蜂鸣器报警
    85. BEEP=1;
    86. }
    87. else
    88. {
    89. if(((hrAvg!=0)&&(hrAvg>=xinlvMax||hrAvg<=xinlvMin))||((spo2Avg!=0)&&(spo2Avg<=spo2Min))||(temperature>=tempMax||temperature<=tempMin))//不在范围蜂鸣器报警
    90. {
    91. BEEP=~BEEP;
    92. beepFlag|=0x01;
    93. }else
    94. {
    95. beepFlag&=0xFE;
    96. BEEP=0;
    97. }
    98. }
    99. }
    100. }
    101. }

    六、实验效果 

    七、资料内容

    项目分享

  • 相关阅读:
    CSS transition 过渡
    mysql增加字段语句转为Oracle语句
    Java方法案例
    Python基础——递归及其经典例题(阶乘、斐波那契数列、汉诺塔)
    应用程序程序的自助密码重置
    2018Java面试
    几何算法——10.欧拉操作
    Linux基本指令系列第三篇
    【JavaWeb】品牌管理系统前后端代码实现
    计算机与软件技术系毕业设计(论文)实施意见-计算机毕业设计论文怎么写
  • 原文地址:https://blog.csdn.net/qq_44016222/article/details/139711321