MAX30102 Pulse Oximeter Heart Rate Sensor Module

  • 💓 MAX30102 pulse oximeter & heart-rate sensor module
  • 🩸 Measures heart rate and SpO2 (blood oxygen level)
  • 🔴🔵 Integrated red + IR LEDs with photodetector
  • 🚌 I2C interface—easy to connect to Arduino/ESP32/STM32
  • ⚡ Low power operation—great for wearable devices
  • 🧩 Ideal for fitness tracking and health-monitoring prototypes
  • 📈 Real-time readings suitable for DIY biomedical projects
  • ✅ Popular choice for IoT health and sensing applications
SKU: NB169 Category: Tag:

Apple Shopping Event

Hurry and get discounts on all Apple devices up to 20%

175,00 EGP

12 People watching this product now!

Payment Methods:

Description

Product Description

The MAX30102 Sensor Module is an integrated pulse oximeter and heart-rate sensor designed for wearable and health monitoring applications. It combines LEDs, photodetectors, and a high-sensitivity optical sensor in a compact module capable of measuring blood oxygen saturation (SpO₂) and heart rate (BPM) using light absorption.

This module is ideal for projects involving health tracking, fitness devices, biometric monitoring, and interactive wearables. It communicates over I²C and can be easily interfaced with Arduino, ESP32, STM32, Raspberry Pi, or any microcontroller with I²C support.


✨ Key Features

  • Measures heart rate (BPM) and blood oxygen saturation (SpO₂)

  • Built-in red and infrared LEDs with photodetector

  • Low power and compact design

  • Works over I²C interface (SDA, SCL)

  • Compatible with Arduino, ESP32, STM32, Raspberry Pi, etc.

  • Easy to integrate with open-source libraries

  • Ideal for health and fitness monitoring projects

  • Improved ambient light cancellation for accuracy

  • Can be mounted on finger or earlobe via custom housing


📐 Technical Specifications

📡 Sensor & Measurement

  • Sensor Type: Pulse oximeter and heart rate monitor

  • LEDs: Red (~660 nm) and Infrared (~880 nm)

  • Detection: Light absorption to estimate SpO₂ and pulse

  • Output: Digital via I²C

📶 Interface

  • Communication Protocol: I²C

  • Logic Level: 3.3 V (level shifting required for 5 V logic if needed)

  • Pins:

    • VIN/VCC: 3.3 V (some breakout boards support 5 V via regulator)

    • GND: Ground

    • SDA: I²C data

    • SCL: I²C clock

    • INT: Interrupt (optional)

🧠 Power

  • Operating Voltage: ~1.8 V core, 3.3 V supply (breakout boards may include regulator)

  • Low Power Consumption: Suitable for battery operation

🛠️ Compatibility

  • Microcontrollers: Arduino, ESP32, STM32, PIC, AVR, etc.

  • Single-board Computers: Raspberry Pi, BeagleBone, etc.

📦 Physical

  • Module Size: Small, compact breakout board

  • Mounting: Pin headers or solder points


🧰 Typical Applications

  • Heart rate monitoring

  • Blood oxygen saturation (SpO₂) measurement

  • Wearable health trackers

  • Fitness and wellness devices

  • Biometric sensing systems

  • Interactive health projects for makers


🔧 How It Works (Quick Overview)

  1. Place the sensor where blood flow is detectable (finger, earlobe).

  2. Illuminate with LEDs: Red and infrared light penetrate tissue.

  3. Measure reflected light: Detector captures variations due to blood flow.

  4. Compute SpO₂ and BPM: Firmware algorithms derive physiological values.

  5. Output via I²C: Microcontroller reads sensor data for processing and display.


🧠 Integration Tips

  • Use established libraries (like Arduino MAX3010x libraries) to simplify coding.

  • Add proper time averaging and signal filtering for more stable readings.

  • Ensure good sensor contact (gentle pressure) for accurate detection.

  • Keep the sensor area free of ambient light interference.

🔌
Pin Connections
1 Table
Pin Connections Table 1
BoardSensor PinConnection
MAX30102VCC/GND/SDA/SCL3.3V / GND / board SDA / board SCL
📟
MAX30102 Pulse Oximeter Heart Rate Sensor Module
7 Examples • C/C++ | Boards: Arduino Uno, Arduino Nano, Arduino Mega, ESP32, ESP8266, STM32, Raspberry Pi Pico
MAX30102 Pulse Oximeter Heart Rate Sensor Module - Arduino Uno
MAX30102 Pulse Oximeter Heart Rate Sensor Module - Arduino Nano
MAX30102 Pulse Oximeter Heart Rate Sensor Module - Arduino Mega
MAX30102 Pulse Oximeter Heart Rate Sensor Module - ESP32
MAX30102 Pulse Oximeter Heart Rate Sensor Module - ESP8266
MAX30102 Pulse Oximeter Heart Rate Sensor Module - STM32
MAX30102 Pulse Oximeter Heart Rate Sensor Module - Raspberry Pi Pico
📄 File: max30102_pulse_oximeter_heart_rate_sensor_module_-_arduino_uno.inoArduino Uno
915 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for Arduino Uno: A4=SDA, A5=SCL
6#include <Wire.h>
7#include "MAX30105.h" // SparkFun library - also covers MAX30100/30102 register-compatible reads
8
9MAX30105 particleSensor;
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 if (!particleSensor.begin(Wire, I2C_SPEED_STANDARD)) {
15 Serial.println("MAX3010x not found - check wiring!");
16 while (1) delay(10);
17 }
18 particleSensor.setup(); // default sensor settings (LED brightness, sample rate...)
19}
20
21void loop() {
22 long irValue = particleSensor.getIR();
23
24 if (irValue < 50000) {
25 Serial.println("No finger detected");
26 } else {
27 Serial.print("IR: "); Serial.print(irValue);
28 Serial.print(" Red: "); Serial.println(particleSensor.getRed());
29 // Real BPM/SpO2 needs the library's beat-detection / SpO2 algorithm on top of these raw readings.
30 }
31
32 delay(20);
33}
📄 File: max30102_pulse_oximeter_heart_rate_sensor_module_-_arduino_nano.inoArduino Nano
916 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for Arduino Nano: A4=SDA, A5=SCL
6#include <Wire.h>
7#include "MAX30105.h" // SparkFun library - also covers MAX30100/30102 register-compatible reads
8
9MAX30105 particleSensor;
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 if (!particleSensor.begin(Wire, I2C_SPEED_STANDARD)) {
15 Serial.println("MAX3010x not found - check wiring!");
16 while (1) delay(10);
17 }
18 particleSensor.setup(); // default sensor settings (LED brightness, sample rate...)
19}
20
21void loop() {
22 long irValue = particleSensor.getIR();
23
24 if (irValue < 50000) {
25 Serial.println("No finger detected");
26 } else {
27 Serial.print("IR: "); Serial.print(irValue);
28 Serial.print(" Red: "); Serial.println(particleSensor.getRed());
29 // Real BPM/SpO2 needs the library's beat-detection / SpO2 algorithm on top of these raw readings.
30 }
31
32 delay(20);
33}
📄 File: max30102_pulse_oximeter_heart_rate_sensor_module_-_arduino_mega.inoArduino Mega
918 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for Arduino Mega: D20=SDA, D21=SCL
6#include <Wire.h>
7#include "MAX30105.h" // SparkFun library - also covers MAX30100/30102 register-compatible reads
8
9MAX30105 particleSensor;
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 if (!particleSensor.begin(Wire, I2C_SPEED_STANDARD)) {
15 Serial.println("MAX3010x not found - check wiring!");
16 while (1) delay(10);
17 }
18 particleSensor.setup(); // default sensor settings (LED brightness, sample rate...)
19}
20
21void loop() {
22 long irValue = particleSensor.getIR();
23
24 if (irValue < 50000) {
25 Serial.println("No finger detected");
26 } else {
27 Serial.print("IR: "); Serial.print(irValue);
28 Serial.print(" Red: "); Serial.println(particleSensor.getRed());
29 // Real BPM/SpO2 needs the library's beat-detection / SpO2 algorithm on top of these raw readings.
30 }
31
32 delay(20);
33}
📄 File: max30102_pulse_oximeter_heart_rate_sensor_module_-_esp32.inoESP32
917 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for ESP32: GPIO21=SDA, GPIO22=SCL
6#include <Wire.h>
7#include "MAX30105.h" // SparkFun library - also covers MAX30100/30102 register-compatible reads
8
9MAX30105 particleSensor;
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 if (!particleSensor.begin(Wire, I2C_SPEED_STANDARD)) {
15 Serial.println("MAX3010x not found - check wiring!");
16 while (1) delay(10);
17 }
18 particleSensor.setup(); // default sensor settings (LED brightness, sample rate...)
19}
20
21void loop() {
22 long irValue = particleSensor.getIR();
23
24 if (irValue < 50000) {
25 Serial.println("No finger detected");
26 } else {
27 Serial.print("IR: "); Serial.print(irValue);
28 Serial.print(" Red: "); Serial.println(particleSensor.getRed());
29 // Real BPM/SpO2 needs the library's beat-detection / SpO2 algorithm on top of these raw readings.
30 }
31
32 delay(20);
33}
📄 File: max30102_pulse_oximeter_heart_rate_sensor_module_-_esp8266.inoESP8266
911 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for ESP8266: D2=SDA, D1=SCL
6#include <Wire.h>
7#include "MAX30105.h" // SparkFun library - also covers MAX30100/30102 register-compatible reads
8
9MAX30105 particleSensor;
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 if (!particleSensor.begin(Wire, I2C_SPEED_STANDARD)) {
15 Serial.println("MAX3010x not found - check wiring!");
16 while (1) delay(10);
17 }
18 particleSensor.setup(); // default sensor settings (LED brightness, sample rate...)
19}
20
21void loop() {
22 long irValue = particleSensor.getIR();
23
24 if (irValue < 50000) {
25 Serial.println("No finger detected");
26 } else {
27 Serial.print("IR: "); Serial.print(irValue);
28 Serial.print(" Red: "); Serial.println(particleSensor.getRed());
29 // Real BPM/SpO2 needs the library's beat-detection / SpO2 algorithm on top of these raw readings.
30 }
31
32 delay(20);
33}
📄 File: max30102_pulse_oximeter_heart_rate_sensor_module_-_stm32.inoSTM32
911 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for STM32: PB7=SDA, PB6=SCL
6#include <Wire.h>
7#include "MAX30105.h" // SparkFun library - also covers MAX30100/30102 register-compatible reads
8
9MAX30105 particleSensor;
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 if (!particleSensor.begin(Wire, I2C_SPEED_STANDARD)) {
15 Serial.println("MAX3010x not found - check wiring!");
16 while (1) delay(10);
17 }
18 particleSensor.setup(); // default sensor settings (LED brightness, sample rate...)
19}
20
21void loop() {
22 long irValue = particleSensor.getIR();
23
24 if (irValue < 50000) {
25 Serial.println("No finger detected");
26 } else {
27 Serial.print("IR: "); Serial.print(irValue);
28 Serial.print(" Red: "); Serial.println(particleSensor.getRed());
29 // Real BPM/SpO2 needs the library's beat-detection / SpO2 algorithm on top of these raw readings.
30 }
31
32 delay(20);
33}
📄 File: max30102_pulse_oximeter_heart_rate_sensor_module_-_raspberry_pi_pico.inoRaspberry Pi Pico
927 characters
1//ekostra.com
2//electronics store in egypt
3//+201008896258
4
5// I2C wiring for Raspberry Pi Pico: GPIO4=SDA, GPIO5=SCL
6#include <Wire.h>
7#include "MAX30105.h" // SparkFun library - also covers MAX30100/30102 register-compatible reads
8
9MAX30105 particleSensor;
10
11void setup() {
12 Serial.begin(115200);
13 Wire.begin();
14 if (!particleSensor.begin(Wire, I2C_SPEED_STANDARD)) {
15 Serial.println("MAX3010x not found - check wiring!");
16 while (1) delay(10);
17 }
18 particleSensor.setup(); // default sensor settings (LED brightness, sample rate...)
19}
20
21void loop() {
22 long irValue = particleSensor.getIR();
23
24 if (irValue < 50000) {
25 Serial.println("No finger detected");
26 } else {
27 Serial.print("IR: "); Serial.print(irValue);
28 Serial.print(" Red: "); Serial.println(particleSensor.getRed());
29 // Real BPM/SpO2 needs the library's beat-detection / SpO2 algorithm on top of these raw readings.
30 }
31
32 delay(20);
33}
I2C optical heart-rate/SpO2 sensor.

Specification

Specification

WeightWeight10 g
Dimensions5 × 4 × 2 cm
Product TypePulse Oximeter & Heart Rate Sensor Module
Sensor ICMAX30102
FunctionSpO₂ (Blood Oxygen) + Heart Rate (PPG)
Light SourceRed LED (660 nm) + IR LED (880/940 nm, typical)
PhotodetectorIntegrated
InterfaceI²C (Address 0x57 typical)
Logic Level1.8–3.3 V (module often supports 3.3–5 V via regulator/level shift)
Supply Voltage3.3 V (typical)
Operating CurrentLow-power (depends on LED current & sampling rate)
Sampling RateUp to 3200 samples/sec (IC capability)
ADC Resolution18-bit (typical)
Operating Temperature-40°C to +85°C (IC)
Module Pins (Typical)VIN/VCC, GND, SDA, SCL, INT
Dimensions~20×15×3 mm (typical)
ApplicationsWearables, fitness monitors, health projects, Arduino/ESP32 projects

Customer Reviews