想给项目加一块能测心率和血氧的“脉搏计”,MAX30102是很合适的选择。它用红光和红外光做PPG光学测量,手指一压就能读出心率(BPM)和血氧饱和度(SpO2),做健康手环、睡眠监测、桌面小气象台都能用。这篇把接线、读数和坑一次讲清楚。

MAX30102怎么接线:I2C两线
MAX30102走I2C总线,硬件接线就四根:VIN接3.3V、GND接地、SDA接Arduino的A4、SCL接A5(UNO上),再加上一根可选的INT中断线(接一个数字脚)。注意它务必用3.3V供电,别直接怼5V,省得发热或烧坏。因为和很多I2C器件共用A4/A5,时要把其他器件的地址错开。

这张图把VIN、GND、SDA、SCL四根线连接标得明明白白,模块上还有红、绿两个光源管窗和一颗黑色感光窗,手指按在窗口上挡住外界光就能采样。
代码思路:采样后算心率血氧
推荐用Adafruit MAX30105或SparkFun的MAX3010x库,几行就能初始化并连续读取红光和红外两个通道的原始ADC值。真正的难点在算法:一个是硬件采样要稳,手指贴合别晃动;二是数据要经过滤波和滑动窗口,提取出脉搏产生的周期峰值,峰值间隔换算成心率;血氧则要比较红光和红外两个通道吸收比例,用查表或经验公式估算。手写算法较绕,可以先跑通库自带的示例,再慢慢替换成自己的滤波。
避坑三个点
一是传感窗口对位置极敏感,初始要在手指标定好手指放法和力度,别一抖就丢信号。二是环境光会干扰,尽量让传感器窗口贴紧皮肤遮光。三是MAX30102采样需要稳定供电和较快的循环节奏,别在主循环里塞太多delay阻塞采样,否则心率会飘。把采样放中断里或用while快速采集一批再处理,读数会稳很多。







把采样放中断里读,主循环别塞delay,数值才稳
一定要给它3.3V,怼5V轻则发热重则烧
手指贴合别晃动,采样就稳,否则心率乱跳