

The MAX30102 Heart Rate and Pulse Oximetry Sensor Module, manufactured by Analog Devices, is a highly integrated optical sensor designed for non-invasive health monitoring. It uses photoplethysmography (PPG) to measure blood oxygen saturation (SpO2) and heart rate. The module combines an LED driver, photodetector, and analog signal processing in a compact form factor, making it ideal for wearable devices, fitness trackers, and medical monitoring systems.








The MAX30102 is designed for low-power operation and high accuracy. Below are its key technical details:
| Parameter | Value |
|---|---|
| Supply Voltage | 1.8V (core) and 3.3V (LED driver) |
| Operating Current | 600 µA (typical) |
| Standby Current | 0.7 µA |
| 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 comes with 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) |
The MAX30102 is straightforward to use in a circuit, especially with microcontrollers like the Arduino UNO. Below are the steps to integrate and use the sensor:
VIN pin to a 3.3V power source and the GND pin to ground.SDA and SCL pins to the corresponding I²C pins on your microcontroller (e.g., A4 and A5 on Arduino UNO).INT pin to a digital input pin on the microcontroller to handle interrupts.SDA and SCL lines if not already included on the module.Below is an example of how to use 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 MAX3010x library
MAX30105 particleSensor; // Create an instance of the sensor
void setup() {
Serial.begin(9600); // Initialize serial communication
Serial.println("Initializing MAX30102...");
// Initialize the 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(); // Get red light reading
long irValue = particleSensor.getIR(); // Get IR light reading
// Print the readings to the serial monitor
Serial.print("Red: ");
Serial.print(redValue);
Serial.print(" IR: ");
Serial.println(irValue);
delay(100); // Wait 100 ms before the next reading
}
| Issue | Possible Cause | Solution |
|---|---|---|
| No data from the sensor | Incorrect wiring or loose connections | Verify all connections and pin mappings. |
| Inaccurate readings | Ambient light interference | Shield the sensor from external light. |
| Sensor not detected on I²C bus | Incorrect I²C address or wiring issue | Ensure the I²C address is correct (0x57). |
| High noise in readings | Motion artifacts or unstable placement | Secure the sensor and minimize movement. |
What is the default I²C address of the MAX30102?
The default I²C address is 0x57.
Can the MAX30102 measure SpO2 and heart rate simultaneously?
Yes, the sensor can measure both parameters simultaneously using its dual LED system.
What is the maximum sampling rate of the MAX30102?
The sensor supports sampling rates up to 3200 samples per second.
Is the MAX30102 suitable for medical-grade applications?
While the MAX30102 is highly accurate, it is not certified for medical-grade applications without additional validation.
By following this documentation, users can effectively integrate and utilize the MAX30102 for health monitoring applications.