0% found this document useful (0 votes)
64 views2 pages

Heart Rate Detection with MAX30105

This document describes a demo to read heart rate using an optical heart rate sensor and a PBA (Peripheral Beat Amplitude) algorithm. The sensor is attached to the finger using a rubber band to apply constant pressure and reduce variability. The Arduino reads the infrared light value from the sensor and uses thresholds to detect heart beats and calculate the beats per minute which is displayed on an LCD screen along with the infrared value.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
64 views2 pages

Heart Rate Detection with MAX30105

This document describes a demo to read heart rate using an optical heart rate sensor and a PBA (Peripheral Beat Amplitude) algorithm. The sensor is attached to the finger using a rubber band to apply constant pressure and reduce variability. The Arduino reads the infrared light value from the sensor and uses thresholds to detect heart beats and calculate the beats per minute which is displayed on an LCD screen along with the infrared value.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

/*

Optical Heart Rate Detection (PBA Algorithm) using the MAX30105 Breakout
By: Bennu @ MH-ET LIVE
Date: October 2nd, 2017
[Link]

This is a demo to show the reading of heart rate or beats per minute (BPM) using
a Penpheral Beat Amplitude (PBA) algorithm.

It is best to attach the sensor to your finger using a rubber band or other
tightening
device. Humans are generally bad at applying constant pressure to a thing. When
you
press your finger against the sensor it varies enough to cause the blood in your
finger to flow differently which causes the sensor readings to go wonky.

Hardware Connections (Breakoutboard to Arduino):


-5V = 5V (3.3V is allowed)
-GND = GND
-SDA = A4 (or SDA)
-SCL = A5 (or SCL)
-INT = Not connected

The MAX30105 Breakout can handle 5V or 3.3V I2C logic. We recommend powering the
board with 5V
but it will also run at 3.3V.
*/

#include <Wire.h>
#include "MAX30105.h"
#include <LiquidCrystal.h>

#include "heartRate.h"

MAX30105 particleSensor;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

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()
{
[Link](9600);

[Link](16, 2);
[Link]("Initializing...");

// Initialize sensor
if (![Link](Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz
speed
{
[Link]("MAX30105 was not found. Please check wiring/power. ");
while (1);
}
[Link]("Place your index finger on the sensor with steady pressure.");

[Link](); //Configure sensor with default settings


[Link](0x0A); //Turn Red LED to low to indicate
sensor is running
[Link](0); //Turn off Green LED
}

void loop()
{
long irValue = [Link]();

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;
}
}

[Link]("IR=");
[Link](irValue);
[Link](", BPM=");
[Link](beatsPerMinute);
[Link](", Avg BPM=");
[Link](beatAvg);

if (irValue < 50000)


[Link](" No finger?");

[Link]();

[Link](0,0);
[Link]("BPM: ");
[Link](beatAvg);

[Link](0,1);
[Link](" IR: ");
[Link](irValue);
}

You might also like