Overview

The MAX30100 is an integrated pulse oximetry and heart-rate monitor IC manufactured by Maxim Integrated (Analog Devices). Designed for wearable health monitors, fitness trackers, and medical diagnostic equipment, it measures arterial blood oxygen saturation (SpO2%\text{SpO}_2\%) and heart rate (BPM) from finger or earlobe contact over an I2CI^2C bus (0x57).

Housed in a tiny 14-pin optical package, the MAX30100 combines two internal LEDs (660 nm Red and 880 nm Infrared), a high-sensitivity photodetector, ambient light cancellation circuitry, and a low-noise 16-bit Delta-Sigma ADC.

Quick reference

Operating voltage (VCC)3.3 V to 5.0 V DC (breakout module with 1.8V LDO)
IC supply voltage (VDD)1.7 V to 2.0 V DC (1.8 V nominal)
LED supply voltage (VLED)3.1 V to 5.25 V DC (3.3 V or 5.0 V nominal)
InterfaceI2CI^2C (Fast Mode up to 400 kHz)
Fixed I2CI^2C address0x57
Integrated LEDs660 nm Red & 880 nm Infrared
ADC resolution16-bit (up to 65,536 counts per channel)
Sample rate range50 SPS to 1,000 SPS (Samples Per Second)
Internal FIFO buffer16-sample FIFO buffer

Pinout

Standard 5-pin breakout module header:

PinNameTypeDescription
1VINPowerSupply power input (+3.3 V to +5.0 V DC)
2SCLDigital InputI2CI^2C Serial Clock
3SDADigital Input / OutputI2CI^2C Serial Data
4INTDigital OutputActive-Low interrupt output pin
5GNDPowerGround reference (0 V)

Specifications

ParameterSymbolMinTypMaxUnitConditions
Supply Voltage (Module)VVINV_{VIN}3.33.3 / 5.05.5VPower rail with LDO
Active Supply CurrentICCI_{CC}0.61.2mAContinuous sampling state
Shutdown CurrentIsdI_{sd}0.72.0µASoftware shutdown mode
Red LED Peak WavelengthλRed\lambda_{Red}650660670nmOxygenated blood absorption
IR LED Peak WavelengthλIR\lambda_{IR}870880890nmDeoxygenated blood absorption
LED Current RangeILEDI_{LED}0.050.0mAProgrammable 4-bit DAC (050 mA0\dots 50\text{ mA})

Photoplethysmography (PPG) & SpO2\text{SpO}_2 Math

  1. Heart Rate (BPM): During cardiac systole, blood surges through finger capillaries, absorbing more IR light. Measuring AC periodic peak intervals on the IR channel yields heart rate in Beats Per Minute.
  2. Blood Oxygen Saturation (SpO2%\text{SpO}_2\%): Oxygenated hemoglobin (HbO2\text{HbO}_2) absorbs more Infrared light (880 nm880\text{ nm}); deoxygenated hemoglobin (Hb\text{Hb}) absorbs more Red light (660 nm660\text{ nm}).

R=(ACRed/DCRed)(ACIR/DCIR)R = \frac{(AC_{Red} / DC_{Red})}{(AC_{IR} / DC_{IR})}

SpO2%=110(25×R)\text{SpO}_2\% = 110 - (25 \times R)

Wiring

MAX30100 PinArduino / MCUESP32Notes
VIN5V / 3.3V3.3VPower rail
GNDGNDGNDSystem ground
SCLA5GPIO 22I2CI^2C Clock
SDAA4GPIO 21I2CI^2C Data
Warning

Purple PCB LDO Resistor Bug Fix:

  • Cheap purple MAX30100 breakout PCBs contain a manufacturing error: 4.7 kΩ4.7\text{ k}\Omega pull-up resistors are erroneously connected to the 1.8V1.8\text{V} rail instead of 3.3V3.3\text{V}, pulling I2CI^2C lines down and causing I2CI^2C bus read timeouts on 3.3V/5V MCUs.
  • Remove or replace the 4.7 kΩ4.7\text{ k}\Omega resistor network on purple boards, or use the updated green/black MAX30102 modules.

Example (Arduino MAX30100_PulseOximeter Library)

cpp
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"

#define REPORTING_PERIOD_MS 1000

PulseOximeter pox;
uint32_t lastReportTime = 0;

void onBeatDetected() {
  Serial.println("Heartbeat pulse detected!");
}

void setup() {
  Serial.begin(115200);
  Serial.println("Initializing MAX30100 Pulse Oximeter...");

  if (!pox.begin()) {
    Serial.println("MAX30100 FAILED to initialize! Check wiring & I2C voltage.");
    while (1);
  }

  pox.setOnBeatDetectedCallback(onBeatDetected);
}

void loop() {
  // Update sensor readings continuously
  pox.update();

  if (millis() - lastReportTime > REPORTING_PERIOD_MS) {
    Serial.print("Heart Rate: "); Serial.print(pox.getHeartRate()); Serial.print(" BPM");
    Serial.print(" | SpO2: "); Serial.print(pox.getSpO2()); Serial.println(" %");
    lastReportTime = millis();
  }
}

Common mistakes

  • Applying excessive finger pressure: Pressing hard onto the sensor flattens skin capillaries, stopping blood flow and resulting in zero AC pulse detection. Rest finger gently over the optical window.
  • Ambient light interference: Bright room lights flicker at 50/60 Hz, introducing noise into photodiode readings. Shield finger under dark cloth for clinical accuracy.

Notes

  • MAX30100 vs MAX30102: MAX30100 uses older 1.8V/3.3V optics and 16-bit resolution; MAX30102 features updated 18-bit ADC, higher SNR, and improved glass cover thermal insulation.

Assets & downloads