

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), a photodetector, optical elements, and low-noise electronics with ambient light rejection, making it highly efficient and accurate for wearable and portable health monitoring devices.








The MAX30102 is a compact and low-power sensor with the following key specifications:
| Parameter | Value |
|---|---|
| Operating Voltage | 1.8V (core) and 3.3V (I/O) |
| Supply Current | 600 µA (typical) |
| LED Wavelengths | Red: 660 nm, Infrared: 880 nm |
| Communication Interface | I2C (7-bit address: 0x57) |
| Sampling Rate | Configurable (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 | Description |
|---|---|
| VIN | Power supply input (3.3V) |
| GND | Ground |
| SDA | I2C data line |
| SCL | I2C clock line |
| INT | Interrupt output (active low, optional use) |
Below is an example of how to interface the MAX30102 with an Arduino UNO to read heart rate and SpO2 data. This code uses the SparkFun MAX3010x library.
#include <Wire.h>
#include "MAX30105.h" // Include the SparkFun MAX3010x library
MAX30105 particleSensor; // Create an instance of the MAX30105 class
void setup() {
Serial.begin(9600); // Initialize serial communication
Serial.println("Initializing MAX30102...");
// Initialize the MAX30102 sensor
if (!particleSensor.begin()) {
Serial.println("MAX30102 not detected. Check connections.");
while (1); // Halt execution if the sensor is not found
}
// Configure the sensor
particleSensor.setup(); // Use default settings
particleSensor.setPulseAmplitudeRed(0x0A); // Set red LED brightness
particleSensor.setPulseAmplitudeIR(0x0A); // Set IR LED brightness
}
void loop() {
// Read data from the sensor
long redValue = particleSensor.getRed(); // Red LED value
long irValue = particleSensor.getIR(); // IR LED value
// Print the values to the serial monitor
Serial.print("Red: ");
Serial.print(redValue);
Serial.print(" IR: ");
Serial.println(irValue);
delay(100); // Delay for stability
}
Sensor Not Detected:
Inaccurate Readings:
No Data Output:
High Power Consumption:
Q: Can the MAX30102 measure SpO2 and heart rate simultaneously?
A: Yes, the MAX30102 can measure both parameters simultaneously using its red and infrared LEDs.
Q: What is the maximum I2C clock speed supported?
A: The MAX30102 supports I2C clock speeds up to 400 kHz (Fast Mode).
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.
Q: How do I improve measurement accuracy?
A: Ensure proper skin contact, minimize motion artifacts, and shield the sensor from ambient light.
This documentation provides a comprehensive guide to using the MAX30102 sensor for heart rate and SpO2 monitoring. Follow the instructions and best practices to achieve optimal performance.