1.概述
MAX30102心率传感器主要用到MAX30102EFD元件,它是一个集成脉搏血氧仪和心率监视仪的传感器。它集成了一个红外LED和一个红外光LED、光电检测器、光器件,以及带环境光抑制的低噪声电子电路。
传感器包含I2C通信接口。使用时,我们利用该通信接口将采集到的数据传输给带有I2C通信接口的单片机,然后进行心率和血氧的计算。
为方便传感器连接在其他设备上,传感器还自带2个直径4.8mm的圆形固定孔。
2.规格参数
工作电压: DC 5V
工作电流:50mA
最大功率:0.25W
工作温度范围:-10℃到+50℃
通信接口:I2C通信(5pin间距为2.54mm排针,有一pin可不接)
环保属性:ROHS
原理
由上面的原理我们简化为:将RED/IR 光射向皮肤,透过皮肤组织反射回的光被光敏传感器接受并转换成电信号,再经过AD转换成数字信号。简化过程:光–> 电 –> 数字信号。所以我们需要控制光源LED的电流强度和采样率,光敏传感器的ADC精度(xbit)等。
3.原理
MAX30102是一套完整的脉搏血氧仪和心率传感器系统解决方案模块,专为可穿戴设备的要求而设计。该设备保持一个非常小的解决方案的大小,而不牺牲光学或电气性能。要集成到可穿戴系统中,需要最少的外部硬件组件。
MAX30102完全可通过软件寄存器,和数字输出数据可以存储在一个32-deep FIFO IC。FIFO允许MAX30102被连接到微控制器或处理器在一个共享的总线,数据没有被从MAX30102读取连续的寄存器。
动脉血氧饱和度子系统
MAX30102的SpO2子系统包含环境光取消(ALC)、持续时间的sigma-delta ADC和专有的离散时间过滤器。ALC有一个内部轨道/保持电路来取消环境光和增加有效的动态范围。动脉血氧饱和度ADC具有可编程的全面范围从2µa 16µa。酒精度可以取消200µa周围的电流。
内部ADC是一个连续时间过采样的sigma-delta变换器,具有18位分辨率。ADC采样率为10.24MHz。ADC输出数据速率可以从50sps(每秒样本)到3200sps。
4.接线图
5.测试代码
#include <Wire.h>
#include “MAX30105.h”
#include “heartRate.h”
MAX30105 particleSensor;
const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
byte rates[RATE_SIZE]; //Array of heart rates
byte rateSpot = 0;
long lastBeat = 0; //Time at which the last beat occurred
float beatsPerMinute;
int beatAvg;
void setup()
{
Serial.begin(115200);
Serial.println(“Initializing…”);
// Initialize sensor
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
{
Serial.println(“MAX30105 was not found. Please check wiring/power. “);
while (1);
}
Serial.println(“Place your index finger on the sensor with steady pressure.”);
particleSensor.setup(); //Configure sensor with default settings
particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED
}
void loop()
{
long irValue = particleSensor.getIR();
if (checkForBeat(irValue) == true)
{
//We sensed a beat!
long delta = millis() – lastBeat;
lastBeat = millis();
beatsPerMinute = 60 / (delta / 1000.0);
if (beatsPerMinute < 255 && beatsPerMinute > 20)
{
rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
rateSpot %= RATE_SIZE; //Wrap variable
//Take average of readings
beatAvg = 0;
for (byte 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(“, Avg BPM=”);
Serial.print(beatAvg);
if (irValue < 50000)
Serial.print(” No finger?”);
Serial.println();
}
6.代码说明
特别注意:1. 上传代码之前,必须将对应的库文件放置到安装Arduino IDE的库文件 文件夹中。
7.测试结果
按照接线图接线,上传测试代码成功,利用USB线上电后,打开串口监视器,设置波特率为115200,串口监视器显示如下图。
IR值为判断有无手指靠近的值(当手指没有靠近传感器时,IR值较小且显示No finger?贴近传感器后IR值剧增,且待测试数据进入测试范围值后开始示数),BMP值为心率,AVG BMP值为血氧饱和度。(Avg BPM)血氧饱和度是75-100,心率(BPM)60-150。
特别注意: 注意事项:测试前先感应手指脉动,手指脉搏要完全贴合传感器15秒左右,才会显示稳定数据,串口监视器无数据显示时应挪动手指脉搏处利于传感器感应,或按UNO上的复位键,直到获得较平稳的数据。
8.资料下载
链接:https://pan.baidu.com/s/1ZHP4LI5vfh7UjUpzk9ab2g
提取码:keye