现阶段网络上的算法读出的血氧值较为不稳定,且许多情况下无法得出有效值,本算法的原理见:MAX30102 血氧调试笔记_Yulong_u012183892-CSDN博客_max30102。

为了控制传感器采样的速率,算法在定时器中实现,可以灵活调整采样速率达到更好的效果。定时器中段的服务函数如下:

//定时器3中断服务程序 读入数据处理
void TIM3_IRQHandler(void)   //TIM3中断
{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否{TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志 max30102_read_fifo();//数据读入i++;//记录周期数int temp=fifo_ir;int temp2=fifo_red;while(temp+temp2<20000){//未检测出手指时代码会在此处跑死,原因为拟合函数只在检测到手指时有效printf("未检测出手指\r\n");max30102_read_fifo();temp=fifo_ir;temp2=fifo_red;}if(i==0){//周期数值初始max=temp;min=temp;max2=temp2;min2=temp2;}//取得周期内最大最小数据if(max<temp){max=temp;}if(min>temp){min=temp;}if(max2<temp2){max2=temp2;}if(min2>temp2){min2=temp2;}if(i>=39){//39数据为1周期i=0;ac=max-min;//单个周期内最大最小数据差为交流分量dc=min;       //数据=直流分量+交流分量ac2=max2-min2;//同理dc2=min2;max=temp;min=temp;max2=temp2;min2=temp2;       }}
}

取得ac,dc,ac2,dc2后可以由主函数中的代码

     //结果生成,数据较为稳定,开头几个数据可以不要,比较不稳ac_ir=(float)ac;//注意转换,否则无法赋值dc_ir=(float)dc;ac_red=(float)ac2;dc_red=(float)dc2;R2=(ac_red* dc_ir)/(ac_ir*dc_red);SPO2 =-45.060*R2*R2+ 30.354 *R2 + 94.845;

得出较为稳定的血氧结果,串口输出结果如下图所示:

第一列数字为检测出的血氧饱和度,第二列为计算出的R2值,在手指移开时的结果如下图所示:

全部代码见:MAX30102与STM32的血氧检测算法-硬件开发文档类资源-CSDN下载

使用STM32与MAX30102实现的较为稳定的血氧算法相关推荐

  1. MAX30102脉搏血氧仪和心率传感器(四)血氧+心率完整版(STM32)

    文章目录 前言 一.先上测试结果 1.测试步骤 2.测试结果 3.后续处理方法 二.血氧饱和度 1.原理 2.计算方法 三.源码获取(STM32例程) 前言 相较于上一章,增加和改进的地方有:①增加了 ...

  2. STM32+Air202+Air530+HXDZ-30102-ACC心率血氧GPS采集上传到阿里云

    主要功能 HXDZ-30102-ACC采集心率血氧数据 STM32通过串口将数据转发到air202模块 air202将数据上传到阿里云平台进行展示与处理 整合合宙air530GPS模块,将定位数据上传 ...

  3. 基于STM32的心率血氧检测仪

    基于STM32的心率血氧检测仪 一.硬件连接 1.1器材准备 (1)开发板:STM32F103系列 (2)显示屏:0.96寸OLED (3)串口监视:USB-TTL 1.2线路连接 STM32F103 ...

  4. 基于Arduino 开发 MAX30102 LM35 SSD1306 观察血氧、心率和温度血氧仪

    ↵本项目第一版本实现在arduino框架下通过MAX30102 对血氧和心率 进行实时监控,通过LM35 对温度进行监控 .所有数值在 ssd 1306 上进行显示.在血氧低过一定数值的时,设备会通过 ...

  5. 毕业设计 Stm32人体心率血氧无线监测系统 - 单片机 物联网

    文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 系统设计 3.1 系统架构 3.2 关键硬件部分 3.2.1 MAX301 00 心率血氧模块 3.3 关键软件部分 3.3.1 数据读取流程 ...

  6. MAX30102血氧模块检测心率和血氧

    1. 完成 CubeMX初始化配置 1.1 利用CubeMX完成HAL库工程模板和初始化: 通过选择芯片型号创建CubeMX工程 在弹出的对话框中输入开发板上的芯片型号,STM32F103RB 在右侧 ...

  7. 基于STM32F030、MAX30102血氧心率监测仪的设计(二)

    上篇主要讲解了MAX30102寄存器相关知识,这篇主要看下程序配置. MAX30102寄存器配置 在一般的配置中我们让设备开机直接开始进入SpO2/HR 模式(PROX_INT_EN 置 0),设置两 ...

  8. 基于STM32F030、MAX30102血氧心率监测仪的设计(三)

    本篇主要记录一下开发过程中遇到的问题与解决. max30102模块是某宝上购买的,价格不贵5元左右,如下图所示. 使用引脚为SDA.SCL.INT.VIN.GND 拿到模块后,看着资料开始移植程序,我 ...

  9. 探索环信IMuni-app(小程序)在集成中遇到的断联问题,如何保持较为稳定的websocket链接?

    BB在前 说一下写这个文章的契机吧,目前在自己负责的项目中尤其在移动端H5,以及uni-app开发小程序项目当中较为经常会遇到,登录环信IM之后长连接断开问题,主要出现的场景也较为集中,下面列举一下我 ...

  10. 基于STM32F030、MAX30102血氧心率监测仪的设计(一)

    搞这个设计用时大约一周,中途遇到好多问题,查找资料乱七八糟,始终没有解决问题,只能自己慢慢的啃资料,本文章主要记录设计过程及记录遇到的问题,做个记录同时帮助有需要的朋友. 目前该设计已成功读取计算出血 ...

最新文章

  1. python播放音频及playsound模块解除占用的3种方法
  2. centOS下调整swap
  3. Fedora配置网络DHCP
  4. Python入门100题 | 第075题
  5. springboot2 cookie的token如何放入请求头_Spring MVC 到底是如何工作的
  6. 关于html文档,关于HTML的简介
  7. Dubbo(一)之简介
  8. html 实现列表组并排,列表组--自定义列表组
  9. api调用实例python_调用阿里云API 的demo示例(java/python)
  10. [Python] os.path.splitext(path):分离文件名与扩展名
  11. git提交注释内容分行处理
  12. iOS 15 通知的新功能
  13. 0302-软件工程第一次作业
  14. vue中下载图片跨域
  15. 考研:2023寒假复习及2022复试问题
  16. 单元测试:通过读取csv/xml数据并且结合使用allure展示测试报告,验证开发中的add()和reduct()操作(在@allure.story分别实现相加减)
  17. J0007. 华为手机怎么开启开发者选项
  18. 电商数据采集的10个经典方法
  19. 吐血整理,20个计算机保研常见问题及回答模板
  20. 窥探现代浏览器架构(一)

热门文章

  1. 悬崖帝国中文版下载|悬崖帝国中文破解版下载 v1.0绿色免安装版
  2. ET框架-03 ET框架-Demo工程的编译与运行
  3. kettle软件的使用
  4. 计算机硬件故障诊断的原则,计算机硬件常见故障诊断和维护.doc
  5. Python自动采集微信联系人
  6. 为什么你需要软件运维服务
  7. matlab里线性规划,Matlab 中的数学建模算法 —— 线性规划函数
  8. 火狐安装网页视频下载插件(Video DownloadHelper)
  9. ISO7816协议中APDU指令解析
  10. 阿里Java开发规范IDEA开发插件