SPO2 MAX30102 Blood Oxygen Concentration Sensor
SKU: B 131,IMP50,Th20,KRT,N199
The MAX30102 is an integrated pulse oximeter or SO2 sensoro, and heart rate monitor biosensor module. MAX30102 SO2 integrates a red LED and an infrared LED, photodetector, optical components, and low-noise electronic circuitry with ambient light suppression.
Features of MAX30102 SO2 Sensor:
- The MAX30102 features a 1.8V power supply and a separate 5.0V power supply for internal LEDs for heart rate and blood oxygen acquisition in wearable devices, worn on the fingers, earlobe, and wrist. The standard I2C-compatible communication interface can transmit the collected values to the Arduino, KL25Z and other microcontrollers for heart rate and blood oxygen calculation.
- In addition, the chip can also shut down the module through software, the standby current is close to zero, and the power supply is always maintained. Because of its excellent performance, the chip is widely used in the Samsung Galaxy S series mobile phones.
- Compared with the previous generation MAX30100, the chip integrates a glass cover to effectively eliminate external and internal light interference and has the best reliable performance.
The Main Parameters:
- LED peak wavelength: 660nm/880nm
- LED power supply voltage: 3.3~5V
- Detection signal type: light reflection signal (PPG)
- Output signal interface: I2C interface
- Communication interface voltage: 1.8~3.3V~5V (optional)
- Board reserved assembly hole size: 0.5 x 8.5mm
Pin Description:
- VIN: main power input terminal 1.8-5V
- 3-bit pad: Select the pull-up level of the bus, depending on the pin master voltage, select 1.8v or 3_3v (this terminal contains 3.3V and above)
- SCL: the clock connected to the I2C bus;
- SDA: data connected to the I2C bus;
- INT: Interrupt pin of the MAX30102 chip;
- RD: RED LED ground terminal of MAX30102 chip, generally not connected;
- IRD: The IR LED ground of the MAX30102 chip is generally not connected;
- GND: Ground wire.
Principle Description:
- Light-dissolving method: measuring the pulse and blood oxygen saturation by using human tissue to cause different transmittance when the blood vessel beats;
- Light source: a specific wavelength of light-emitting diode selective for oxyhemoglobin (H bO 2 ) and hemoglobin ( Hb ) in arterial blood;
- The transmittance is converted into an electrical signal: the change in the volume of the arterial pulsation causes a change in the transmittance of the light. At this time, the photoelectric variator receives the reflected light from the human tissue, converts it into an electrical signal, and amplifies and outputs it.
Package Includes:
1X MAX30102 blood oxygen concentration sensor module STM32 sensor
Code:
#include
#include "MAX30105.h"
MAX30105 particleSensor; //initialize MAX30102 with I2C
void setup()
{
Serial.begin(115200);
while(!Serial); //We must wait for Teensy to come online
delay(100);
Serial.println("");
Serial.println("MAX30102");
Serial.println("");
delay(100);
// Initialize sensor
if (particleSensor.begin(Wire, I2C_SPEED_FAST) == false) //Use default I2C port, 400kHz speed
{
Serial.println("MAX30105 was not found. Please check wiring/power. ");
while (1);
}
byte ledBrightness = 70; //Options: 0=Off to 255=50mA
byte sampleAverage = 1; //Options: 1, 2, 4, 8, 16, 32
byte ledMode = 2; //Options: 1 = Red only, 2 = Red + IR, 3 = Red + IR + Green
int sampleRate = 400; //Options: 50, 100, 200, 400, 800, 1000, 1600, 3200
int pulseWidth = 69; //Options: 69, 118, 215, 411
int adcRange = 16384; //Options: 2048, 4096, 8192, 16384
particleSensor.setup(ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange); //Configure sensor with these settings
}
void loop() {
particleSensor.check(); //Check the sensor
while (particleSensor.available()) {
// read stored IR
Serial.print(particleSensor.getFIFOIR());
Serial.print(",");
// read stored red
Serial.println(particleSensor.getFIFORed());
// read next set of samples
particleSensor.nextSample();
}
}
Second Code:
/*
Optical Heart Rate Detection (PBA Algorithm) using the MAX30105 Breakout
By: Nathan Seidle @ SparkFun Electronics
Date: October 2nd, 2016
https://github.com/sparkfun/MAX30105_Breakout
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
#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();
}