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参数//…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
OCR MLLM Evaluation
为什么需要评测体系?——背景与矛盾 能干的事: 看清楚发票、身份证上的字(准确率>90%),速度飞快(眨眼间完成)。干不了的事: 碰到复杂表格(合并单元…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
Canal环境搭建并实现和ES数据同步
作者:田超凡 日期:2025年6月7日 Canal安装,启动端口11111、8082: 安装canal-deployer服务端: https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...
【QT控件】显示类控件
目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏:QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…...
