MAX30102心率血氧传感器
MAX30102心率血氧传感器介绍
- 背景
- 基本功能
- 基本结构
- 基本原理
- 采集方法
- 直通式采集方法
- 反射式采集方法
- 血氧采集原理
- Beer-Lambert 定理
- 皮肤组织模型
- 血氧测量过程
- AC / DC 的计算
- 心率采集原理
- 实验结果
- 代码走读
- 资源链接
背景
目前,基本上所有的可穿戴式设备都集成了心率血氧测量的功能,在手表/手环中尤为常见。一般情况下,开发人员用于评估的心率血氧传感器型号用的都是MAX30102/MAX30100。MAX30102EFD如下图所示。

为上图所示的MAX30102传感器增加外围电路后就成为了常见的MAX30102模组,如下图所示。

MAX30102传感器是美国美信公司(maxim integrated)生产的一款集成的脉搏血氧仪和心率监测仪生物传感器模块。由于公司名称是Maxim,所以器件名以MAX开头,型号为30102。不过目前这个公司已经被美国的半导体巨头亚德诺半导体(ADI)公司收购,MAX30102属于一种光学生物传感器,ADI在售的心率血氧传感器还有MAX30101、MAX86140、MAX86141、MAX32664、MAXM86161等,有需要的朋友可以直接去ADI官方对相应的器件功能进行相应的评估。
基本功能
使用MAX30102可以对心率、血氧、温度三个指标进行测量,配合一些MCU能够实现相关物理量的快速采集。
基本结构
链接: MAX30102官方介绍
链接: MAX30102心率血氧评估板数据解算及使用手册
链接: SpO2 测量原理介绍
链接: [心率血氧测量原理论文](file:///C:/Users/23890/Desktop/MAX30102%E8%B5%84%E6%96%99/%E5%BF%83%E7%8E%87%E8%A1%80%E6%B0%A7%E6%B5%8B%E8%AF%95%E5%8E%9F%E7%90%86%E6%96%87%E7%AB%A0.pdf)
基本原理
通过光电的方式对心率和血氧进行测量,在模块上有两个LED,然后又有两套光电二极管。
采集方法
直通式采集方法
在医院测量中常用的一种血氧采集方式,如下图所示,光电传感器和光源分别置于手指的两侧,光源穿过手指被另一侧的光电二极管接收,根据光衰减量计算血氧浓度。

反射式采集方法
常见于一些穿戴设备如常见的手环、手表等设备中。LED光源和光电二极管置于同侧,光穿过皮肤被反射回同侧光电二极管,光电二极管根据光衰减量进行血氧的计算。
血氧采集原理
血氧即血氧饱和度(SpO2),这是一个百分比的概念。物理含义是血液中氧气饱和度的百分比。我们都知道,人体或者动物中有自己的血液循环系统,血液中由血红蛋白携带氧气从动脉流出,然后在携二氧化碳等气体送到肺部。所以会有富氧的血红蛋白
(Hb-O2)和缺氧的血红蛋白(Rhb)之分。所以可以通过血液中富氧血红蛋白占总血红蛋白的比例来定义血氧饱和度。所以SpO2可以用以下表达式描述,C代表血红蛋白的数量:
S p O 2 = C [ H b O 2 ] C [ H b O 2 ] + C [ R H b ] × 100 \mathrm{SpO}_{2}= \frac{\mathrm{C}\left[\mathrm{HbO}_{2}\right]}{\mathrm{C}\left[\mathrm{HbO}_{2}\right]+\mathrm{C}[\mathrm{RHb}]} \times100 SpO2=C[HbO2]+C[RHb]C[HbO2]×100
Beer-Lambert 定理
Beer-Lambert 定理描述了光在传播过程中通过材料的衰减特性。
I = I 0 e − ε ( λ ) C d I = I_{0} e^{-\varepsilon (\lambda )Cd} I=I0e−ε(λ)Cd
根据上面的公式,可以计算得到
A = ln I 0 I = ε ( λ ) C d A = \ln_{}{\frac{I_{0} }{I} } =\varepsilon (\lambda )Cd A=lnII0=ε(λ)Cd
A 这里代表光线总的衰减量, I 0 为入射光强度, I 为反射光强度。 ε ( λ ) 称为摩尔消光系数,指物质对某波长的光的吸收能力的量度。 C 是穿透材料的浓度, d 为光传播路径。 A 这里代表光线总的衰减量,I_{0}为入射光强度,I为反射光强度。\\\varepsilon (\lambda )称为摩尔消光系数,指物质对某波长的光的吸收能力的量度。\\C是穿透材料的浓度,d为光传播路径。 A这里代表光线总的衰减量,I0为入射光强度,I为反射光强度。ε(λ)称为摩尔消光系数,指物质对某波长的光的吸收能力的量度。C是穿透材料的浓度,d为光传播路径。
皮肤组织模型
使用光电方式完成血氧测量基于下面的三层主要结构的基本模型。光线首先穿透皮肤组织,下面一层是动脉血,动脉血由心脏推动,心脏跳动一次血液产生一次脉动。第二层是静脉血及分布的毛细血管,第三层是骨头、肌肉等其他物质。光线穿透这三层物质被光电二极管接收,根据光线衰减量对血氧含量进行测量。

那么,根据上面的Beer-Lambert 定理,针对测量的具体场景,测量过程的衰减为三层穿透物质衰减量的叠加。
A = d [ ε H b O 2 ( λ ) C [ H b O 2 ] + ε R H b ( λ ) C [ R H b ] + ε other ( λ ) C [ other ] ] A=d\left[\varepsilon_{\mathrm{HbO}_{2}}(\lambda) C\left[\mathrm{HbO}_{2}\right]+\varepsilon_{\mathrm{RHb}}(\lambda) C[\mathrm{RHb}]+\varepsilon_{\text {other }}(\lambda) C[\text { other }]\right] A=d[εHbO2(λ)C[HbO2]+εRHb(λ)C[RHb]+εother (λ)C[ other ]]
血氧测量过程
基本的测量原理是使用一个LED照射待测量点,这个测量点可能是手指、耳垂等位置,接收端的光电二极管对穿透上面三层结构的反射光进行计算,进而得出血氧含量。具体的细节在于,三层模型中的脉动血会对光线产生不同程度的吸收和调制。穿透皮肤的反射光线称为PPG(photoplethysmographic)信号,正常情况下,PPG信号如下图所示。值得注意的是,为了保证高精度,一般使用两种不同波长的光(660nm和880nm)进行照射并根据结果进行联合计算。

常见的计算过程需要知道R的值,R与SpO2强相关,可以根据R直接计算SpO2
R = A C red / D C red A C ired / D C ired \mathrm{R}=\frac{\mathrm{AC}_{\text {red }} / \mathrm{DC}_{\text {red }}}{\mathrm{AC}_{\text {ired }} / \mathrm{DC}_{\text {ired }}} R=ACired /DCired ACred /DCred
R与SpO2的关系式由经验的出来的,比较简单的一种计算方式为:
S p O 2 = 104 − 17 R SpO2 = 104 - 17R SpO2=104−17R
AC / DC 的计算
AC是交流分量,DC是直流分量。通常情况下,光电二极管接收到的典型的波形如下:

估算AC、DC值的方法如下:找两个波谷点,两个波谷点之间有一个波峰点,两个波谷点相连成一条直线,与Y轴平行的线穿过波峰点会与两个波谷点连接成的直线相交于一点,这个点就是DC点,DC点的Y轴对应值就是直流分量,AC分量的值为波峰点到DC点之间的差值。
为什么是这样没有弄明白。
里面有两种不同波长的光对与皮肤的穿透的原理的论文没有弄明白。
心率采集原理
血管脉动的频率和心脏跳动的频率相同,血管脉动会导致光衰减量的不同。心脏每跳动一次,会产生一个波峰点和一个波谷点,典型的波形如下,通过计算波峰和波谷之间的时间差就能够计算心率。

实验结果
串口调试助手测量的结果如下图所示。心率数据为83,血氧浓度98。

代码走读
资源链接
内容涵盖: MAX30102 DataSheet (英文版)、
相关文章:
MAX30102心率血氧传感器
MAX30102心率血氧传感器介绍 背景基本功能基本结构基本原理采集方法直通式采集方法反射式采集方法 血氧采集原理Beer-Lambert 定理皮肤组织模型血氧测量过程AC / DC 的计算 心率采集原理 实验结果代码走读资源链接 背景 目前,基本上所有的可穿戴式设备都集成了心率…...
高效解决 TypeError : ‘ numpy._DTypeMeta‘ object is not subscriptable 问题
文章目录 问题描述解决问题 问题描述 解决问题 参考博文 打开报错位置 AppData\Roaming\Python\Python39\site-packages\cv2\typing\ 添加single-quotes,即单引号 博主说The trick is to use single-quotes to avoid the infamous TypeError: ‘numpy._DTypeMeta’…...
Hadoop作业篇(一)
一、选择题 1. 以下哪一项不属于Hadoop可以运行的模式__C____。 A. 单机(本地)模式 B. 伪分布式模式 C. 互联模式 D. 分布式模式 C. 互联模式 不属于Hadoop可以运行的模式。 Hadoop主要有四种运行模式: A. 单机(本地…...
SpringCloud中的分布式锁用法详解(Java+Redis SETNX命令)
前言: 在分布式系统中,保证数据的一致性和并发控制是至关重要的。分布式锁能够解决多个进程/线程同时访问共享资源的问题,确保只有一个进程/线程能够获得锁。本文将介绍如何使用Java和Redis实现分布式锁,并提供示例代码和注意事项…...
初学者如何选择:前端开发还是后端开发?
#开发做前端好还是后端好【话题征文】# 作为一名有多年开发经验的过来人,我认为前端开发和后端开发都有其独特的魅力和挑战。下面我将就我的个人经历和观点来分享一些关于前端开发和后端开发的看法。 首先,让我们将编程世界的大城市比作前端开发和后端开…...
从php页面插入MySQL的数据变为乱码如何解决?
在 PHP 页面中向 MySQL 数据库插入数据时,如果数据出现乱码,可能是因为字符集设置不正确或者字符编码不匹配。 数据库字符集设置不正确: 确保数据库的字符集设置与您的应用程序所使用的字符集一致。通常情况下,UTF-8 是一个通用的…...
OpenCV防抖实践及代码解析笔记
视频防抖是指用于减少摄像机运动对最终视频的影响的一系列方法。摄像机的运动可以是平移(比如沿着x、y、z方向上的运动)或旋转(偏航、俯仰、翻滚)。 正如你在上面的图片中看到的,在欧几里得运动模型中,图像…...
函数栈帧的创建与销毁剖析
目录 一、前言 二、基础知识介绍 2.1 寄存器介绍 2.2、汇编指令介绍 三、函数栈帧的创建销毁过程 3.1 调用main函数的函数 3.2 main函数开辟栈帧 3.3 在main函数中创建变量 3.4 调用Add函数前的准备 3.5 为Add函数开辟栈帧 3.6 在Add函数中创建变量并运算 3.7 Add函…...
性能测试-如何进行监控设计
监控设计步骤 首先,你要分析系统的架构。在知道架构中使用的组件之后,再针对每个组件进行监控。 其次,监控要有层次,要有步骤。先全局,后定向定量分析。 最后,通过分析全局、定向、分层的监控数据做分析…...
大数据List去重
概述 两个超大List集合去重,时间最短的方式去实现。 详细 MaxList模块主要是对Java集合大数据去重的相关介绍。 背景: 最近在项目中遇到了List集合中的数据要去重,大概一个2500万的数据,开始存储在List中,需要跟一个2万的List去…...
CentOS8.2重启网络
查看网络配置命令 # ip addr # nmcli ens160: 已连接 到 ens160"VMware VMXNET3"ethernet (vmxnet3), 00:50:56:B6:34:84, 硬件, mtu 1500ip4 默认inet4 10.3.10.111/24route4 10.3.10.0/24route4 0.0.0.0/0inet6 fe80::250:56ff:feb6:3484/64route6 ff00::/8rou…...
2023年【G1工业锅炉司炉】考试题及G1工业锅炉司炉模拟考试
题库来源:安全生产模拟考试一点通公众号小程序 2023年G1工业锅炉司炉考试题为正在备考G1工业锅炉司炉操作证的学员准备的理论考试专题,每个月更新的G1工业锅炉司炉模拟考试祝您顺利通过G1工业锅炉司炉考试。 1、【多选题】TSGG0001-2012《锅炉安全技术监…...
观察者模式 行为型设计模式之七
1.定义 在GOF的《设计模式:可复用面向对象软件的基础》一书中对观察者模式是这样定义的:定义对象的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化࿰…...
数据结构与算法之堆: Leetcode 451. 根据字符出现频率排序 (Typescript版)
根据字符出现频率排序 https://leetcode.cn/problems/sort-characters-by-frequency/ 描述 给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。返回 已排序的字符串 。如果有多个答案,返回其…...
吃透底层:从路由到前缀树
前言 今天学到关于路由相关文章,发现动态路由中有一个很常见的实现方式是前缀树,很感兴趣这个算法,故进行记录。 前缀树 Trie(又被叫做字典树)可以看作是一个确定有限状态自动机,尽管边上的符号一般是隐含…...
SparkSQL外部数据源
1.简介 1.1 多数据源支持 Spark 支持以下六个核心数据源,同时 Spark 社区还提供了多达上百种数据源的读取方式,能够满足绝大部分使用场景。 - CSV - JSON - Parquet - ORC - JDBC/ODBC connections - Plain-text files 1.2 读数据格式 所有读取 API 遵循以下调用格式: // …...
林沛满-TCP 是如何避免被发送方分片的?
TCP 可以避免被发送方分片,是因为它主动把数据分成小段再交给网络层。最大的分段大小称为 MSS(Maximum Segment Size),它相当于把 MTU 刨去 IP头和 TCP 头之后的大小,所以一个 MSS 恰好能装进一个 MTU 中。 图4 图 4 …...
Java中的枚举是什么?
Java枚举详解 枚举(Enum)是Java编程语言中的一种特殊数据类型,它用于表示一组具名的常量。枚举提供了一种更加类型安全和易于理解的方式来表示常量值,使代码更加清晰和可维护。 为什么需要枚举? 在介绍Java枚举的具…...
java学习--day24(单例模式序列化Lambda表达式)
文章目录 回顾今天的内容1.单例模式2.序列化3.Lambda表达式3.1入门案例3.2lambda表达式语法格式3.2.1无参无返回值的形式3.2.2有参无返返回值的方法3.2.3无参有返回值3.2.4有参有返回值的 回顾 1.三种创建Class对象的形式Class.forName("")类.class对象.getCalss()字…...
从0开始学go第六天
方法一:gin获取querystring参数 package main//querystring import ("net/http""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/web", func(c *gin.Context) {//获取浏览器那边发请求携带的query String参数//…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
