1.1简介:

MAX30102心率传感器主要采用MAX30102EFD组件,该组件是一款集成了脉搏血氧计和心率监测器的传感器。它集成了红外 LED 和红外光 LED、光电探测器、光学器件以及具有环境光抑制功能的低噪声电子电路。

传感器包含 I2C 通信接口。使用时,我们通过这个通信接口将采集到的数据传输到具有I2C通信接口的单片机,​​然后计算心率和血氧。

1.2 模块相关信息:

工作电压:

3.3V-5V(直流)

工作电流:

50mA

最大功率:

0.25W

通讯:

标准IIC通讯协议

尺寸:

31.6mmx23.7mm

原理:MAX30102是一款完整的脉搏血氧计和心率传感器系统解决方案模块,专为可穿戴设备的要求而设计。该器件保持非常小的解决方案尺寸,而不会牺牲光学或电气性能。要集成到可穿戴系统中,需要最少的外部硬件组件。

MAX30102可通过软件完全注册,数字输出数据可存储在32深的FIFO IC中。 FIFO允许MAX30102连接到共享总线上的微控制器或处理器,而无需从MAX30102的连续寄存器读取数据。

动脉血氧饱和度子系统

MAX30102 的 SpO2 子系统包括环境光消除 (ALC)、持续时间 Σ-Δ ADC 和专有的离散时间滤波器。 ALC 具有内部跟踪/保持电路,可消除环境光并增加有效动态范围。动脉血氧饱和度 ADC 具有 2μA 至 16μA 的可编程全范围。酒精可以消除200μA左右的电流。

内部 ADC 是具有 18 位分辨率的连续时间过采样 Σ-Δ 转换器。 ADC采样率为10.24MHz。 ADC 输出数据速率范围为 50sps(每秒采样数)至 3200sps。

1.3 实验设备:

控制面板* 1

USB 线*1

MAX30102*1

5P 转杜邦线总线*1

1.4模块接线图:

1.5 实验代码:

/*

MAX30102 心率传感器

https://www.sxzhongrui.com/NbKeBf

*/

#包括

#include "MAX30105.h"

#include "heartRate.h"

MAX30105粒子传感器;

常量字节RATE_SIZE = 4; //增加此值以获得更多平均值。 4 就好了。

字节速率[RATE_SIZE]; //心率数组

字节率Spot = 0;

长最后节拍 = 0; //最后一个节拍发生的时间

浮动节拍数;

intbeatAvg;

无效设置()

{

Serial.begin(115200);

Serial.println("正在初始化...");

// 初始化传感器

if (!articleSensor.begin(Wire, I2C_SPEED_FAST)) //使用默认I2C端口,400kHz速度

{

Serial.println("未找到 MAX30105。请检查接线/电源。");

同时 (1);

}

Serial.println("将食指稳定地放在传感器上。");

粒子传感器.setup(); //使用默认设置配置传感器

粒子传感器.setPulseAmplitudeRed(0x0A); //将红色 LED 调低以指示传感器正在运行

粒子传感器.setPulseAmplitudeGreen(0); //关闭绿色LED

}

void循环()

{

long irValue = molecularSensor.getIR();

if (checkForBeat(irValue) == true)

{

//我们感觉到了节奏!

长增量 = millis() –lastBeat;

lastBeat = millis();

每分钟节拍数 = 60 / (delta / 1000.0);

if (每分钟节拍数 < 255 && beatsPerMinute > 20)

{

速率[rateSpot++] = (byte)beatsPerMinute; //将此读数存储在数组中

rateSpot %= RATE_SIZE; //包裹变量

//取读数平均值

beatAvg = 0;

for (字节 x = 0 ; x < RATE_SIZE ; x++)

beatAvg += rates[x];

beatAvg /= RATE_SIZE;

}

}

Serial.print("IR=");

Serial.print(irValue);

Serial.print(", BPM=");

Serial.print(beatsPerMinute);

Serial.print(", 平均 BPM=");

Serial.print(beatAvg);

如果 (irValue < 50000)

Serial.print("没有手指?");

Serial.println();

}

程序编译前需要导入库文件,否则编译不通过,具体操作参考

资料的第四小节:库文件的添加(若前面已添加,消耗重复)

1.6 实验结果

按照接线图,成功上传测试代码。 USB线上电后,打开串口监视器,将波特率设置为115200。串口监视器显示如下图。

IR值是用来判断手指是否靠近传感器的值(手指未靠近传感器时,IR值较小且不显示手指?手指靠近传感器后,IR值急剧增加,进入测试范围值后开始显示测试数据)),BMP值为心率,AVG BMP值为血氧饱和度。 (平均 BPM) 血氧饱和度为 75-100,心率 (BPM) 60-150。

特别提示: 注意:测试前先感应手指脉搏。手指脉搏必须完全附着在传感器上约15秒,才会显示稳定的数据。当串口监视器无数据显示时,应移动手指脉冲以方便传感器感应,或按UNO上的复位按钮,直至获得更平滑的数据。