

The MAX30102 is a pulse oximeter and heart-rate sensor module designed for non-invasive health monitoring. It uses photoplethysmography (PPG) to measure blood oxygen saturation (SpO2) and heart rate by analyzing light absorption changes in blood vessels. The module integrates an LED driver, photodetector, and analog signal processing circuitry, enabling accurate and reliable measurements in a compact form factor.








The MAX30102 is a highly integrated 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, IR: 880 nm | 
| Communication Interface | I²C (up to 400 kHz) | 
| Operating Temperature Range | -40°C to +85°C | 
| Dimensions | 5.6 mm x 3.3 mm x 1.55 mm | 
The MAX30102 module typically has the following pinout:
| Pin Name | Pin Number | Description | 
|---|---|---|
| VIN | 1 | Power supply input (3.3V) | 
| GND | 2 | Ground | 
| SDA | 3 | I²C data line | 
| SCL | 4 | I²C clock line | 
| INT | 5 | Interrupt output (active low) | 
| RD | 6 | Reset/disable pin (active low) | 
0x57. Ensure no address conflicts with other devices on the I²C bus.Below is an example of how to interface the MAX30102 with an Arduino UNO using the I²C protocol:
#include <Wire.h>
#include "MAX30102.h" // Include a library for MAX30102 (e.g., SparkFun MAX3010x)
MAX30102 sensor; // Create an instance of the MAX30102 class
void setup() {
  Serial.begin(9600); // Initialize serial communication
  Wire.begin();       // Initialize I²C communication
  if (sensor.begin() == false) {
    Serial.println("MAX30102 not detected. Check connections.");
    while (1); // Halt execution if the sensor is not detected
  }
  Serial.println("MAX30102 initialized successfully.");
}
void loop() {
  int heartRate = sensor.getHeartRate(); // Get heart rate
  int spo2 = sensor.getSpO2();          // Get SpO2 level
  // Print the readings to the serial monitor
  Serial.print("Heart Rate: ");
  Serial.print(heartRate);
  Serial.print(" bpm, SpO2: ");
  Serial.print(spo2);
  Serial.println(" %");
  delay(1000); // Wait for 1 second before the next reading
}
Sensor Not Detected:
0x57) is used.Inaccurate Readings:
High Power Consumption:
I²C Communication Errors:
Q: Can the MAX30102 measure heart rate through clothing?
A: No, the sensor requires direct contact with the skin for accurate measurements.
Q: What is the maximum sampling rate of the MAX30102?
A: The MAX30102 supports sampling rates up to 1000 samples per second.
Q: Can I use the MAX30102 with a 5V microcontroller?
A: Yes, but you must use a level shifter to convert the 5V logic to 3.3V for I²C communication.
Q: How do I improve measurement accuracy?
A: Minimize motion artifacts, shield the sensor from ambient light, and ensure proper placement on the skin.