

The MAX30102 Pulse Oximeter by Generico is a compact, low-power sensor designed for non-invasive monitoring of blood oxygen levels (SpO2) and heart rate. It utilizes photoplethysmography (PPG) technology, combining an integrated red and infrared LED with a photodetector to measure changes in blood volume. This makes it ideal for wearable devices, fitness trackers, and medical monitoring systems.








The MAX30102 is designed for high performance and low power consumption, making it suitable for battery-powered applications. Below are its key specifications:
| Parameter | Value |
|---|---|
| Operating Voltage | 1.8V (core) and 3.3V (I/O) |
| Supply Voltage Range | 1.7V to 2.0V (core), 3.0V to 3.6V (I/O) |
| Operating Current | 600 µA (typical) |
| Standby Current | 0.7 µA |
| LED Wavelengths | Red: 660 nm, Infrared: 880 nm |
| Communication Interface | I2C (7-bit address: 0x57) |
| Sampling Rate | Programmable (up to 1000 Hz) |
| Operating Temperature | -40°C to +85°C |
| Package | 14-pin optical module |
The MAX30102 has 14 pins, as detailed in the table below:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | GND | Ground connection |
| 2 | SDA | I2C data line |
| 3 | SCL | I2C clock line |
| 4 | INT | Interrupt output (active low) |
| 5 | VDD | Power supply for I/O (3.3V) |
| 6 | VDDIO | Power supply for core (1.8V) |
| 7 | NC | No connection |
| 8 | NC | No connection |
| 9 | LED1 | Red LED cathode |
| 10 | LED2 | Infrared LED cathode |
| 11 | NC | No connection |
| 12 | NC | No connection |
| 13 | NC | No connection |
| 14 | GND | Ground connection |
0x57. Ensure no other devices on the I2C bus share this address.Below is an example of how to interface the MAX30102 with an Arduino UNO to read heart rate and SpO2 data:
#include <Wire.h>
#include "MAX30102.h" // Include the MAX30102 library
MAX30102 sensor; // Create an instance of the MAX30102 class
void setup() {
Serial.begin(9600); // Initialize serial communication
Wire.begin(); // Initialize I2C communication
// Initialize the MAX30102 sensor
if (sensor.begin() == false) {
Serial.println("MAX30102 not detected. Check connections.");
while (1); // Halt execution if the sensor is not detected
}
Serial.println("MAX30102 initialized successfully.");
}
void loop() {
// Variables to store heart rate and SpO2 values
int heartRate;
int spo2;
// Read data from the sensor
if (sensor.check() == true) {
heartRate = sensor.getHeartRate(); // Get heart rate
spo2 = sensor.getSpO2(); // Get SpO2 level
// Print the results to the serial monitor
Serial.print("Heart Rate: ");
Serial.print(heartRate);
Serial.print(" bpm, SpO2: ");
Serial.print(spo2);
Serial.println(" %");
} else {
Serial.println("No data available. Ensure proper contact with the sensor.");
}
delay(1000); // Wait for 1 second before the next reading
}
Sensor Not Detected:
0x57.Inaccurate Readings:
No Data Output:
Can the MAX30102 be used with a 5V microcontroller?
What is the maximum sampling rate of the MAX30102?
How do I reduce power consumption?
Can the MAX30102 measure SpO2 in real-time?