

The MAX30100 is a low-power, integrated pulse oximeter and heart-rate monitor sensor. It uses photoplethysmography (PPG) technology to measure blood oxygen saturation (SpO2) and heart rate by emitting light through the skin and detecting changes in light absorption. This compact sensor is ideal for wearable devices, fitness trackers, and medical monitoring systems.








The MAX30100 is designed for low-power operation and high accuracy. Below are its key technical details:
| Parameter | Value |
|---|---|
| Operating Voltage | 1.8V (core) and 3.3V (I/O) |
| Supply Current | 600 µA (typical) |
| Standby Current | 0.7 µA |
| Measurement Modes | SpO2 and Heart Rate |
| Communication Interface | I2C (7-bit address: 0x57) |
| LED Wavelengths | Red: 660 nm, IR: 880 nm |
| Sampling Rate | Programmable (50 Hz to 100 Hz) |
| Operating Temperature | -40°C to +85°C |
| Package | 14-pin optical module |
The MAX30100 has 14 pins, but only a subset is typically used in most applications. Below is the pin configuration:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | SDA | I2C Data Line |
| 2 | SCL | I2C Clock Line |
| 3 | INT | Interrupt Output (active low) |
| 4 | GND | Ground |
| 5 | VIN | Power Supply (1.8V to 3.3V) |
| 6 | IR_DRV | Infrared LED Driver |
| 7 | RED_DRV | Red LED Driver |
| 8-14 | NC | Not Connected (reserved for internal use) |
The MAX30100 is straightforward to use in a circuit, especially with microcontrollers like the Arduino UNO. Below are the steps to integrate and use the sensor:
Wiring:
SDA pin of the MAX30100 to the Arduino's A4 pin.SCL pin of the MAX30100 to the Arduino's A5 pin.VIN pin of the MAX30100 to the Arduino's 3.3V pin.GND pin of the MAX30100 to the Arduino's GND pin.INT pin to a digital pin on the Arduino for interrupt-based operation.Install Required Libraries:
Sample Code: Below is an example Arduino sketch to read heart rate and SpO2 data from the MAX30100:
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
// Create an instance of the PulseOximeter class
PulseOximeter pox;
// Variable to store the last update time
uint32_t lastUpdate = 0;
// Callback function to handle new data
void onBeatDetected() {
Serial.println("Beat detected!");
}
void setup() {
// Initialize serial communication
Serial.begin(9600);
Serial.println("Initializing MAX30100...");
// Initialize the MAX30100 sensor
if (!pox.begin()) {
Serial.println("Failed to initialize MAX30100. Check connections!");
while (1);
}
// Set the callback for beat detection
pox.setOnBeatDetectedCallback(onBeatDetected);
Serial.println("MAX30100 initialized successfully.");
}
void loop() {
// Update the sensor readings
pox.update();
// Print data every 1 second
if (millis() - lastUpdate > 1000) {
lastUpdate = millis();
Serial.print("Heart Rate: ");
Serial.print(pox.getHeartRate());
Serial.print(" bpm, SpO2: ");
Serial.print(pox.getSpO2());
Serial.println(" %");
}
}
SDA and SCL) require pull-up resistors (typically 4.7kΩ). Some breakout boards include these resistors; check your board's documentation.No Data Output:
SDA and SCL lines.Inaccurate Readings:
Sensor Not Detected:
Intermittent Data:
Q: Can the MAX30100 measure SpO2 and heart rate simultaneously?
A: Yes, the MAX30100 can measure both SpO2 and heart rate simultaneously. However, ensure the sensor is properly configured in your code.
Q: What is the maximum sampling rate of the MAX30100?
A: The MAX30100 supports a programmable sampling rate of up to 100 Hz.
Q: Can I use the MAX30100 with a 5V microcontroller?
A: Yes, but you must use a logic level shifter to convert the 5V I2C signals to 3.3V to avoid damaging the sensor.
Q: How do I improve measurement accuracy?
A: Ensure proper skin contact, minimize motion, and reduce ambient light interference for the best results.