想做一个能测心率血氧的小设备、给健康类项目做个传感器端,MAX30102是常见的选择。它利用光电容积脉搏波(PPG)原理,用红光加红外光照射皮肤,通过血液对光的吸收变化推算心率(BPM)和血氧饱和度(SpO2)。这篇文章把接线和读取讲清楚。
认出引脚:四根要接,几个内置不用管
MAX30102模块板上有一颗感光窗,内含红光(约660nm)和红外光(约880nm)两个LED。引脚最常用的是VIN(电源)、GND(地)、SCL(I2C时钟)、SDA(I2C数据)四根,外加一个可选的INT中断脚。模块还引出IRD、RD两个脚,那是红/红外LED灯的驱动腿,芯片内部自己处理,正常使用不用接。
它通过I2C通信,默认地址是0x57。模块板载了I2C上拉电阻,所以接线不需要额外加电阻,这是它省心的地方。

接线:四根I2C线,供电可5V可3.3V
MAX30102接到Arduino Uno:VIN接5V(也能接3.3V,模块板载稳压)、GND接地、SCL接A5、SDA接A4。A4/A5正是Uno默认I2C口。INT脚可选,想用中断驱动读取就接到一个数字脚,不用就先悬空。
接线表:VIN→5V(或3.3V)、GND→GND、SCL→A5、SDA→A4、INT→可选接数字脚。
小提醒:SDA和SCL一定要分别对应A4和A5(或SDA/SCL丝印),两根接反了会报“找不到传感器”。这是这块板最常见的手误。

读取数据:SparkFun库,手指放上感光窗
软件上用SparkFun的MAX30105库(或MAX3010x系列库,用I2C通信的版本)。流程:建一个对象,setup里begin并把采样率、LED电流设好,loop里循环读intCappedHeartRate和氧饱和度这一类结果,打印出来或显示在屏上。
关键在测量姿势:把手指轻轻按在模块的感光窗上盖住,不要用力压死,也最好保持静止。光线能透过皮肤打到传感器,血液脉冲带来的光吸收变化,就是算法算心率的原始数据。手别乱动、别让指尖离开窗口,读数才稳。
读不到、数值乱跳,几个高频坑
最常见是“MAX30102 was not found”。先查SDA/SCL有没有接反,再确认供电给的是5V还是3.3V(都能用但要真给上),第三可能是引脚没焊牢——很多DIY只插一半排针,接触不良就找不到设备,焊牢就好。数值乱跳或读不出,多半是指放得太用力、手指太干、或者检测窗被指纹和油污糊住,清洁一下、换个手指再试。
还有一点:模块功耗不高,但USB供电不稳时LED点亮的电流波动会影响读数,条件允许给个干净的5V供电。数据不要只取单次,取几秒平均值判心率更靠谱。
MAX30102是给健康/可穿戴小项目加“生理信号”很低门槛的一块板。四根I2C线、一个SparkFun库、手指往感光窗上一放,就能读到心率和血氧,做健康监测、情绪反馈小装置都可以从这里起步。







做健康监测小件很合适,四根线就能出数据
检测窗保持干净,指纹糊住会读不出来
数值别取单次,采几秒取平均才靠谱
SDA和SCL接反直接找不到传感器,这个是手误重灾区
手指别用力压死、保持静止,读数稳很多