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上的复位按钮,直至获得更平滑的数据。