实践/固件编程

MAX30102血氧心率传感器Arduino怎么接?I2C读脉搏避坑

固件编程 2026-10-14 23:10:04 6阅读 5讨论 举报
MAX30102血氧心率传感器Arduino怎么接?I2C读脉搏避坑

想在穿戴设备、健康监测、机器人上做一个能测心率和血氧的模块,MAX30102是颗非常流行的光体积描记(PPG)传感器芯片。它用红光和红外两种LED照进皮肤,通过检测反射光的脉动变化来估脉搏和血氧,走I2C接口,脚不多,但读数据有不少讲究。这篇把从接线到读心率的实操讲清楚。

I2C接线,电平得注意

MAX30102模块一般有6个脚:VIN(电源)、GND、SCL、SDA,还有INT(中断,可空)和IRD/RD(也可空)。接到Arduino上通常VIN接5V或3.3V(看模块是否带稳压)、GND接地、SDA接A4、SCL接A5,这就是走I2C。它的默认I2C地址是0x57。

要特别提醒的是电平:MAX30102芯片本身是1.8V的,很多模块板载了稳压和电平转换所以能接5V的Arduino。但如果你买的模块没有电平转换,硬接到5V的I2C线上可能会出问题。稳妥做法是接3.3V,或用带电平转换的模块。

用现成库,红外通道读心率

Arduino端最省事的是用SparkFun或Adafruit的MAX30102库。初始化时设好采样率和LED电流,然后循环读。测心率最常用的是红外LED(因为红光对脉搏的反射受肤色影响大),读出的红外通道原始值呈现脉动波形,波峰之间就是一次心跳。

要算出具体心率数值,通常还要做简单的滤波和峰检测:对红外通道的值做一个滑动平均或低通滤波,然后再用一个固定阈值或动态阈值找波峰,波峰间隔的倒数×60就是每分钟心跳。很多开源例程会封装好这部分,直接调用就行。

三个高频坑,提前绕开

第一是指头贴合的坑。MAX30102对接触非常敏感,指头压太紧会压瘪毛细血管让血流信号没了,压太松又会漏光或移动。正确方式是让指尖轻轻固定在传感器上方、压住但不要大力,静止不动读数才稳定。

第二是运动伪差。测血氧心率最怕手指移动,一旦动,读出的波形全是杂波,血氧饱和度算法很容易算飞。所以它适合静止状态下测,运动监测场景要用带抗运动干扰的运动型PPG传感器。

第三是环境光和供电纹波。强光照射会干扰红光反射,要尽量遮光;传感器对电源纹波敏感,别和电机等大电流负载共用一个脏电源,给它一个干净的3.3V。把贴合、静止、干净供电三件事捋顺,MAX30102就能稳定给你报出心率和血氧。

版权声明:
作者:野生极客一枚
链接:https://www.aiddithome.com/p/6154eb0483e9e.html
来源:固件编程
实践版权归作者所有,未经允许请勿转载,若此实践存在违规行为,您可以点击 “举报”。


登录 后发表评论
5条评论
隔壁工位的好奇宝
1楼 · 6小时前

接3.3V更稳,我之前怼5V模块温温的

装过才知道
2楼 · 6小时前

这个做穿戴设备基础心率监测很不错

拆机党
3楼 · 6小时前

MAX30102测血氧得静止,手指一动数值就飘

第三次终于亮了
4楼 · 6小时前

指头压太紧反而读不到,轻轻压住刚好

刷着刷着入坑了
5楼 · 6小时前

红外通道读心率比红光稳,肤色影响小

本文作者
野生极客一枚
野生极客一枚 实践者
最近更新:2026-10-14 23:10