

The MAX30100 is a compact, integrated sensor designed for measuring heart rate and blood oxygen saturation (SpO2) using photoplethysmography (PPG). Manufactured by Analog Devices, this sensor combines a red LED, an infrared LED, and a photodetector in a single package, making it highly suitable for wearable health monitoring devices and other portable medical applications.








The following table outlines the key technical details of the MAX30100 sensor:
| Parameter | Value |
|---|---|
| Operating Voltage | 1.8V (core) and 3.3V (I/O) |
| Supply Current (Typical) | 600 µA (during measurement) |
| Standby Current | 0.7 µA |
| Measurement Range | 0% to 100% SpO2 |
| Heart Rate Range | 30 bpm to 240 bpm |
| Communication Interface | I2C (7-bit address: 0x57) |
| Operating Temperature Range | -40°C to +85°C |
| Package Type | 14-pin optical module |
The MAX30100 sensor 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 Input (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) |
0x57. Ensure no other devices on the I2C bus share this address.Below is an example of how to interface the MAX30100 with an Arduino UNO to read SpO2 and heart rate data:
#include <Wire.h>
#include "MAX30100.h" // Include the MAX30100 library
MAX30100 sensor; // Create an instance of the MAX30100 class
void setup() {
Serial.begin(9600); // Initialize serial communication
Wire.begin(); // Initialize I2C communication
// Initialize the MAX30100 sensor
if (sensor.begin() == false) {
Serial.println("MAX30100 initialization failed. Check connections.");
while (1); // Halt execution if initialization fails
}
// Configure the sensor
sensor.setMode(MAX30100_MODE_SPO2); // Set mode to SpO2
sensor.setLEDsPulseWidth(MAX30100_LED_PW_1600US); // Set LED pulse width
sensor.setSamplingRate(MAX30100_SAMPLING_RATE_100HZ); // Set sampling rate
Serial.println("MAX30100 initialized successfully.");
}
void loop() {
float spo2, heartRate;
// Read SpO2 and heart rate data
if (sensor.readSpO2AndHeartRate(&spo2, &heartRate)) {
Serial.print("SpO2: ");
Serial.print(spo2);
Serial.print("%, Heart Rate: ");
Serial.print(heartRate);
Serial.println(" bpm");
} else {
Serial.println("Failed to read data. Ensure proper finger placement.");
}
delay(1000); // Wait for 1 second before the next reading
}
Sensor Not Detected on I2C Bus:
0x57 address.Inaccurate Readings:
High Power Consumption:
Interrupts Not Triggering:
Q: Can the MAX30100 measure SpO2 and heart rate simultaneously?
A: Yes, the MAX30100 can measure both SpO2 and heart rate simultaneously using its dual LED and photodetector setup.
Q: What is the maximum I2C clock speed supported by the MAX30100?
A: The MAX30100 supports I2C clock speeds up to 400 kHz (Fast Mode).
Q: Can the MAX30100 be used with a 5V microcontroller?
A: Yes, but a level shifter is required to interface the 3.3V I2C lines with the 5V microcontroller.
Q: How do I improve measurement accuracy?
A: Use the sensor in a stable, low-light environment and ensure proper finger placement on the sensor.