想自己做个测血氧心率的小玩意,MAX30102是绕不开的选择。它把红光和红外两个LED加一个光电二极管整合在一个小模块里,手指往上一按,就能通过反射光的差异算出心率和血氧饱和度,很多智能手环就是它的亲戚。这篇聊聊接线和最常见的几个坑。
MAX30102是什么原理
它靠两路LED发光,红外(850-1000nm左右)被含氧的红细胞吸收得多,红光(600-750nm)被含氧少的吸收多,光电接收端把反射回来的光转成信号,再靠算法从波形里识别出每一次搏动,进而算BPM和SpO2。模块内部有LED驱动和环境光抑制电路,比用分立元件省心太多。
MAX30102怎么接线
模块是I2C接口,电源注意一下:传感器本体要3.3V,很多板上已经把电平和推挽处理好了,VIN接3.3V、GND接地、SDA接A4、SCL接A5就行。别拿5V直接怼VIN,我见过把板子烧了的。库用SparkFun MAX3010x或者MAX30105,都能兼容这颗。

接线图里红-电源、黑-地、黄-SCL、蓝-SDA,颜色对齐就万无一失。那个INT脚是中断输出,可以暂时不管,普通读取用不上。
手指怎么放才能读准
代码里先begin,再setPulseAmplitudeRed把红光亮度调低点,用setPulseAmplitudeGreen(0)关掉绿灯(这颗没有绿灯,但库是通用的,关掉省心)。读的时候用小橡皮筋把食指轻轻固定到传感器上,松紧合适才稳定,手一抖读数就乱跳。

判断手指有没有放上去,用IR值做阈值最直观——手指没盖住时IR读数很高,盖住了明显掉下来,很多人靠这个打印提示让使用者把手指按好。血氧数值波动大也别慌,多数是手抖或握太紧,放松、压紧、稳住,读数就顺了。
测不准的两个隐藏坑
一是地址,MAX30102固定是0x57,如果I2C扫描找不到,先确认是不是模块供电问题,很多所谓坏板其实是供电不稳。二是别在强光下测,手指贴着传感器时尽量避开强光,不然环境光干扰会把波形搅得乱七八糟,读数自然就不准了。


强光下测不准是真的,遮一下光数值马上正常
手指松紧要稳,拿橡皮筋固定一下读数就顺了,不然一直乱跳
IR值判断手指有没有放上去这招很实用,省得看半天不知道为啥是0
VIN千万不能怼5V,我烧过一块板,血泪教训