MAX30100 是由 Maxim Integrated公司推出的一款集成式心率与脉搏血氧检测(PPG)传感器方案。它将发光 LED、光电探测器、光学滤波器件以及低噪声模拟前端电路集成在极小的封装中,广泛应用于智能穿戴、健康监测设备及创客开发项目中。
工作电压:3.3v~5v
工作功耗:约 600 µA ~ 1.2 mA(受采样率和脉宽影响)
待机功耗:0.7 µA
发射光源:红光 LED峰值波长660nm / 红外 LED峰值波长880nm
LED电流:0 mA ~ 50 mA
ADC分辨率:模拟数字转换器14 位 ~ 16 位 可编程分辨率
采样频率:50 Hz ~ 1000 Hz 可配置
通信接口:I2C快速模式
温度范围:-40°C ~ +85°C
1.MAX30100 基于光电容积脉搏波描记法(PPG, Photoplethysmography)
血管搏动与吸收:心脏跳动时,外周毛细血管内血液容积发生搏动性变化,透射或反射的光信号随之呈周期性波动,用于提取心率(Heart Rate)。
2.双波长含氧量差异:
含氧血红蛋白 ($HbO_2$) 对 红外光 (880 nm) 吸收较多,对 红光 (660 nm) 吸收较少。
脱氧血红蛋白 ($Hb$) 对 红光 (660 nm) 吸收较多,对 红外光 (880 nm) 吸收较少。
计算公式:传感器内部交替点亮红光和红外 LED,接收端采集两者的交流成分(AC)与直流成分(DC),通过以下比值结合经验校准曲线计算出血氧饱和度(SpO2)。
| 本次以树莓派Pico主板为例按,按下图接好连接线,务必注意不可接反,默认接3.3V供电,千万不能接5v供电,否则会烧毁设备 |

| MAX3000 下载这个源代码直接上传到树莓派Pico文件内,运行程序后将手指按住传感器红色灯,查看检测数据(如下图) |

本次以ESP32-S3主板为例按下图接好连接线,务必注意不可接反,否则会烧毁设备

1.需要在Arduino IDE中点击左侧栏的 库管理器(Library Manager)(或按 Ctrl + Shift + I),搜索并安装以下依赖库:
MAX30100lib
| MAX30100 下载这个源代码直接用Arduino IDE编译上传程序打开串口监视查看,用手指按住模块上LED灯观察测量数据(如下图) |

这份代码的核心逻辑非常精简,主要分为以下 4 个关键部分:
1. 引脚初始化 (Wire.begin):ESP32-S3 支持任意引脚作为 $I^2C$ 通信口,通过 Wire.begin(8, 9) 将硬件数据线绑定为 SDA = GPIO 8,SCL = GPIO 9。
2. 传感器参数配置 (setup)pox.begin():向 MAX30100 发送配置指令,初始化芯片内部的 ADC 采样率和脉宽寄存器。setIRLedCurrent():设置发射端红外 LED 的驱动电流(11 mA),控制光线穿透手指毛细血管的强度。setOnBeatDetectedCallback():注册一个心跳事件函数,一旦算法检测到脉搏波峰值,自动触发打印“♥ 脉搏跳动”。
3. 高频数据采集与滤波 (pox.update())
核心轮询:pox.update() 必须在 loop() 中以极高频率不断被执行。
内部处理:它负责从 MAX30100 的 FIFO 队列中读取红光/红外原始透光强度,并通过内置的直流滤除算法(DC Filter)和低通平滑滤波提取出微弱的脉搏波动信号。
4. 非阻塞式周期输出 (millis())
避免使用 delay():由于脉搏波采样需要连续性,使用 millis() - tsLastReport > 1000 实现了非阻塞定时器。
获取指标:每隔 1 秒调用 pox.getHeartRate()(计算脉搏频率 BPM)和 pox.getSpO2()(计算红光/红外交流成分比值估算的血氧饱和度百分比)并输出到串口。