The MAX30102 and MAX30100 are integrated pulse oximetry and heart-rate monitor sensor modules commonly used in wearable health devices. While both use red and infrared LEDs to measure blood oxygen (SpO2) and heart rate (BPM), the MAX30102 is the upgraded version with significant technical improvements.
![]() | ![]() |
|
| Feature | MAX30100 | MAX30102 (Upgrade) |
| FIFO Buffer | 16-deep (smaller storage) | 32-deep (stores more data) |
| ADC Resolution | 14-bit | 18-bit (higher sensitivity) |
| Voltage | 1.8V and 3.3V | 1.8V (logic) & 3.3V–5.0V (LEDs) |
| Temperature Sensor | No internal temperature sensor | Includes on-chip temperature sensor (±1°C accuracy) |
| Motion Rejection | Basic | Improved ambient light and motion rejection |
| Interfacing | Both use the I²C protocol (SDA/SCL) The default 7-bit I²C slave address for both sensors is 0x57. This corresponds to an 8-bit write address of 0xAE and an 8-bit read address of 0xAF |
|
| Accuracy | Calibrated tests show roughly 95.8% to 97% accuracy for heart rate monitoring | |
If you'd like to support the development of the site with the price of a coffee — or a few — please do so here.
Here's a handy tip: you can quickly save this page as a PDF by clicking “export to PDF” in the menu on the right side of the screen.
The sensor consists of a pair of light-emitting diodes, one emitting monochromatic red light at 660 nm and the other emitting infrared light at 940 nm. These wavelengths are chosen because at these wavelengths, oxygenated and deoxygenated hemoglobin have very different absorption properties. As shown in the graph below, there is a clear difference between HbO2 (oxygenated Hb) and Hb (deoxygenated Hb) when subjected to these specific wavelengths.
Both modules share the same pin layout for common use cases.
Important Pin Notes
For the MAX30102, the most robust library is the SparkFun MAX3010x Pulse and Proximity Sensor Library.
#include <Wire.h> #include "MAX30105.h" // Works for MAX30102 MAX30105 particleSensor; void setup() { Serial.begin(115200); if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) { // 400kHz speed Serial.println("MAX30102 was not found. Check wiring/power."); while (1); } particleSensor.setup(); // Configure with default settings } void loop() { // Get raw infrared and red light data Serial.print(" IR: "); Serial.print(particleSensor.getIR()); Serial.print(" Red: "); Serial.println(particleSensor.getRed()); }
This page has been accessed for: Today: 2, Until now: 50