第八篇、基于Arduino uno,获取MAX30102心率传感器的心率信息——结果导向

0、结果

说明:先来看看串口调试助手显示的结果,第一个值是原始的IR值,第二个值是实时的心跳,第三个值是平均心跳,如果是你想要的,可以接着往下看。


1、外观

 说明:MAX30102心率传感器的外观如下。

2、连线

说明:只需要连接四根线。

  • uno————MAX30102心率传感器
  •        5V--------------VCC
  •    GND--------------GND
  •     SCL--------------SCL
  •     SDA--------------SDA

 3、源程序

说明:本程序将对应功能进行函数化,方便移植。

/*********************************max30102 part********************************************************************/

#include <Wire.h>                                                   //include libaray
#include "MAX30105.h"                                               //include libaray
#include "heartRate.h"                                              //include libaray

MAX30105 particleSensor;                                            //Instantiate object

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;                                               //Define a variable
int beatAvg;                                                        //Define a variable

void setup() {
  Serial.begin(9600);                                               //Example Set the baud rate of the serial port to 9600
  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {                 //Use default I2C port, 400kHz speed{
    Serial.println("MAX30105 was not found. Please check wiring/power. ");
  }
  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

  Serial.println("Go online!");
}
void loop() {
  getMax30102Data();                                                 //Acquiring heart rate
}
/*********************************max30102 part********************************************************************/
/*Acquiring heart rate*/
void getMax30102Data() {
  long irValue = particleSensor.getIR();                             //Obtain IR data 
  if (checkForBeat(irValue) == true)
  {
    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
     
      beatAvg = 0;                                                  //Take average of readings
      for (byte x = 0 ; x < RATE_SIZE ; x++) {
        beatAvg += rates[x];
      }
      beatAvg /= RATE_SIZE;
    }
  }
  if (irValue <= 10000) {                                           //Return to zero
    beatAvg = 0;
    beatsPerMinute = 0;
  }
  Serial.print("IR=");                                              // The serial port displays the corresponding value
  Serial.print(irValue);                                            // The serial port displays the corresponding value
  Serial.print(", BPM=");
  Serial.print(beatsPerMinute);                                     // The serial port displays the corresponding value
  Serial.print(", Avg BPM=");
  Serial.println(beatAvg);                                          // The serial port displays the corresponding value
  if (irValue < 50000) {
    Serial.print(" No finger?");                                    // The serial port displays the corresponding value
    Serial.println();
  }
}

4、注意事项

说明:如果上传程序之后,传感器没有亮红灯,那么可能需要再上传一次程序,直到亮红灯为止。手放在传感器上的时候,尽量不用碰到周围的元器件,不然会导致短路,IIC通讯会中断。如果是坐着测的,虽然会有一个心跳值,但是这个值会一直降低,所以使用的时候,一定要站起来,这样会准确一些。

5、基本原理

        MAX30102传感器是一种集成了LED发光二极管和光电检测器的数字脉搏氧饱和度测量模块。它可以通过光电检测来实现对心率的测量,具体原理如下:
        MAX30102传感器内部有两颗LED发光二极管,它们能够分别发出不同波长的光,通常包括红色和红外线光。这两种光波长在穿透皮肤后会被血液吸收和反射,导致指尖的血液呈现出不同的颜色。根据Lambert-Beer定律,这两种不同波长的光经过指尖时会因为被血液吸收而弱化,其强度与指尖处血液的氧合程度相关。
        当MAX30102传感器的LED发光二极管发出光后,光电检测器会接收到由指尖反射回来的光信号。这些被接收到的光信号会被放大并转换为数字信号,然后进行数据处理,最终得到血氧饱和度和心率等生理参数。
        传统的心率测量方法需要依靠心电图仪等专业仪器,而MAX30102传感器则在单一小模块中集成了多种功能,极大地方便了用户的使用。同时,MAX30102还具有省电、数据稳定性好等优点,使其在医疗监测、健康追踪等领域得到广泛应用。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值