日度归档:2019年10月8日

MAX30102使用方式记录

最近做一个小项目,需要使用到MAX30102检测用户的心率数据,然而网上普遍没有什么教程,大概看了一下官方给的arduino示例程序。

示例程序地址:https://github.com/MaximIntegratedRefDesTeam/RD117_ARDUINO/blob/master/RD117_ARDUINO.ino

大概分析了一下,这个传感器用的是IIC协议,初始化的时候需要用IIC协议往几个寄存器里面写一些数据,这样就算是初始化了,传感器需要连接的针脚主要有VIN GND SDA SCL INT,VIN是电源,官方说的是5V,实测3.3也可以工作,SDA和SCL是IIC线,INT是一个类似状态引脚的东西,接下来从传感器读取数据的时候需要用。

传感器的原理大概就是用红外光反射检测波长来判断用户的心率,传感器可以检测返回的波长,做AD转换转换成电数据,但是没什么计算单元,所以我们从传感器的FIFO里面获取到这些数据之后,需要自己来根据这些原始的数据来计算。

计算的过程比较复杂,不过官方给的示例代码里面给出了计算的库,我们直接调用函数就可以了,大概就是把两个采样数据的buffer指针穿进去,一个参数说明用多少个采样来计算。输出的结果就是根据这些采的数据计算出的心率(HR)和血氧(SPO2),还有是否有效标记,如果标记=0说明样本是无效的,也就不能给出正确的心率和血氧。

官方给的实例代码思路大概是这样的:

读取前5秒钟的采样数据(采样速率是100样本/s,一共500个样本)
计算这500个样本的数据结果();
while(1)
{
  丢弃第一秒的前100个样本,剩下400个样本();
  采一秒钟的样本(100个);
  把新的样本数据和旧的样本数据结合(现在有500个);
  计算心率和血氧
}

这样在这个大循环里面,每秒钟都会有新的采样值,新的采样值结合前四秒钟的数据,给出当前的心率。这就是心率采样的大概思路。具体的操作和寄存器说明我还没看DataSheet,需要看一看再说。