

The MAX30102 is a pulse oximeter and heart-rate sensor designed for non-invasive health monitoring applications. It utilizes photoplethysmography (PPG) technology to measure blood oxygen saturation (SpO2) and heart rate. The sensor integrates red and infrared LEDs, a photodetector, optical elements, and low-noise electronics in a compact package, making it ideal for wearable devices such as fitness trackers, smartwatches, and medical monitoring systems.








The MAX30102 is a highly integrated sensor with the following key specifications:
| Parameter | Value |
|---|---|
| Operating Voltage | 1.8V (core) and 3.3V (LEDs) |
| Supply Current (Typical) | 600 µA (during active measurement) |
| 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 |
| Package Size | 5.6 mm x 3.3 mm x 1.55 mm |
The MAX30102 has 8 pins, as described in the table below:
| Pin Name | Type | Description |
|---|---|---|
| VIN | Power | Power supply input (1.8V for core, 3.3V for LEDs) |
| GND | Ground | Ground connection |
| SDA | I/O | I2C data line |
| SCL | I/O | I2C clock line |
| INT | Output | Interrupt output (active low) |
| RD | Input | Reset pin (active low) |
| IR_DRV | Output | Infrared LED driver |
| RED_DRV | Output | Red LED driver |
Below is an example of how to interface the MAX30102 with an Arduino UNO to read heart rate and SpO2 data:
#include <Wire.h>
#include "MAX30102.h" // Include the MAX30102 library
MAX30102 sensor; // Create an instance of the MAX30102 class
void setup() {
Serial.begin(9600); // Initialize serial communication
Wire.begin(); // Initialize I2C communication
if (sensor.begin() == false) {
// Check if the sensor is connected and initialized
Serial.println("MAX30102 not detected. Please check connections.");
while (1); // Halt execution if the sensor is not found
}
Serial.println("MAX30102 initialized successfully.");
}
void loop() {
int heartRate = 0;
int spo2 = 0;
// Read heart rate and SpO2 values
if (sensor.check() == true) {
heartRate = sensor.getHeartRate(); // Get heart rate
spo2 = sensor.getSpO2(); // Get SpO2 level
// Print the values to the serial monitor
Serial.print("Heart Rate: ");
Serial.print(heartRate);
Serial.print(" bpm, SpO2: ");
Serial.print(spo2);
Serial.println(" %");
} else {
// Handle cases where no data is available
Serial.println("No data available. Ensure proper sensor placement.");
}
delay(1000); // Wait for 1 second before the next reading
}
Sensor Not Detected
Inaccurate Readings
No Data Available
Interrupt Pin Not Triggering
Can the MAX30102 measure SpO2 and heart rate simultaneously?
What is the maximum sampling rate of the MAX30102?
Is the MAX30102 suitable for medical-grade applications?
Can the MAX30102 be used with a 5V microcontroller?