

The MAX30102 is a pulse oximeter and heart-rate sensor module designed for non-invasive monitoring of vital signs. It utilizes photoplethysmography (PPG) technology to measure blood oxygen saturation (SpO2) and heart rate. The module integrates two LEDs (red and infrared) and a photodetector, along with optical elements and low-noise electronics, to provide accurate and reliable measurements.








The MAX30102 is a highly integrated module with the following key specifications:
| Parameter | Value |
|---|---|
| Operating Voltage | 1.8V (core) and 3.3V (I/O) |
| Supply Voltage Range | 1.7V to 2.0V (core), 3.0V to 3.6V (I/O) |
| Operating Current | 600 µA (typical) |
| Standby Current | 0.7 µA |
| LED Wavelengths | Red: 660 nm, Infrared: 880 nm |
| Communication Interface | I2C (7-bit address: 0x57) |
| Sampling Rate | Programmable (up to 1000 samples per second) |
| Operating Temperature Range | -40°C to +85°C |
| Dimensions | 5.6 mm x 3.3 mm x 1.55 mm |
The MAX30102 module typically comes with the following pinout:
| Pin Name | Pin Number | Description |
|---|---|---|
| VIN | 1 | Power supply input (3.3V) |
| GND | 2 | Ground |
| SDA | 3 | I2C data line |
| SCL | 4 | I2C clock line |
| INT | 5 | Interrupt output (active low) |
Below is an example code snippet to interface the MAX30102 with an Arduino UNO using the Adafruit MAX30102 library:
#include <Wire.h>
#include "Adafruit_MAX30102.h"
// Create an instance of the MAX30102 sensor
Adafruit_MAX30102 max30102;
void setup() {
Serial.begin(9600); // Initialize serial communication
while (!Serial); // Wait for the serial monitor to open
// Initialize the MAX30102 sensor
if (!max30102.begin()) {
Serial.println("MAX30102 initialization failed!");
while (1); // Halt execution if initialization fails
}
Serial.println("MAX30102 initialized successfully!");
}
void loop() {
// Variables to store sensor readings
int redValue, irValue;
// Read red and infrared LED values
if (max30102.check() == true) {
redValue = max30102.getRed();
irValue = max30102.getIR();
// Print the readings to the serial monitor
Serial.print("Red: ");
Serial.print(redValue);
Serial.print(" | IR: ");
Serial.println(irValue);
} else {
Serial.println("No data available from MAX30102.");
}
delay(100); // Delay for stability
}
Sensor Not Detected on I2C Bus:
Inaccurate Readings:
Initialization Fails:
Q: Can the MAX30102 measure SpO2 and heart rate simultaneously?
A: Yes, the MAX30102 can measure both SpO2 and heart rate simultaneously using its red and infrared LEDs.
Q: What is the maximum distance between the sensor and the microcontroller?
A: The maximum distance depends on the I2C bus specifications. Typically, it should not exceed 1 meter without additional hardware (e.g., I2C extenders).
Q: Is the MAX30102 suitable for continuous monitoring?
A: Yes, the MAX30102 is designed for continuous monitoring applications, provided it is used within its operating conditions.
Q: Can the MAX30102 be used with a 5V microcontroller?
A: Yes, but a logic level shifter is required to interface the 3.3V I2C lines with the 5V microcontroller.