MAX30100 Pulse Oximeter Heart-Rate Sensor Module


The MAX30100 is an integrated pulse oximetry and heart rate monitor sensor solution. It combines two LEDs, a photodetector, optimized optics, and low-noise analog signal processing to detect pulse oximetry and heart-rate signals.

The MAX30100 operates from 1.8V and 3.3V power supplies and can be powered down through software with negligible standby current, permitting the power supply to remain connected at all times.


  • Wearable Devices
  • Fitness Assistant Devices
  • Medical Monitoring Devices

Benefits and Features:

  • Complete Pulse Oximeter and Heart-Rate Sensor Solution Simplifies Design Integrated LEDs, Photo Sensor, and High-Performance Analog Front -End

 Tiny 5.6mm x 2.8mm x 1.2mm 14-Pin Optically Enhanced System-in-Package

  • Ultra-Low-Power Operation Increases Battery Life for Wearable Devices Programmable Sample Rate and LED Current for Power Savings

 Ultra-Low Shutdown Current (0.7μA, typ)

  • High SNR Provides Robust Motion Artifact Resilience Integrated Ambient Light Cancellation
  •  High Sample Rate Capability
  •  Fast Data Output Capability

Purple MAX30100 ModuleArduino UNO/Nano

You see, this module uses this schematic:

Image result for rcwl-9183

The MAX30100 IC uses 1.8V for VDD and this particular module uses two regulators to achieve this voltage. Nothing wrong with that. However, if you look closely, the SCL and SDA pins are pulled-up via the 4.7k ohm resistors to 1.8V! This means it won't work well with microcontrollers with higher logic levels.

The solution is to remove the resistors from the board (encircled on the image below) and attach external 4.7k ohms resistors instead.

Remove these resistors from the MAX30100 module

Here's my board with the resistors removed:

MAX30100 with resistors removed

After removing the resistors, you can now connect this module to the Arduino UNO using this wiring diagram:

Arduino MAX30100 Wiring Diagram

For the sketch, I used this library. The library provides a couple of examples. This is the most basic sketch:

If you followed the wiring diagram and uploaded this sketch to your Arduino, the red LED on the board should light up and you will see this on the serial monitor:

This means the MAX30100 is running. All you need to do is place your finger on top of the IC (the one with the LED) and your pulse rate should be displayed.

Now if the LED is not turning on, and you are getting the FAILED message on the serial monitor, it might be a power issue. If you look at line 58 of the sketch above:

This sets the current through the LED. This is originally commented so that the LED current is the default 50 mA. Comment this out to make the current through the LED equal to 7.6 mA! This would solve the power issue.

By the way, here are the other possible values you can use on the setIRLedCurrent() function above:

Just remember that the higher the current, the brighter the LED and the deeper it reaches your skin.

Kit include:

1 x Max30100 module


Max30100 Datasheet

MAX30100_PulseOximeter Library

Max30100 Library

Mikroelectron Code:

#include <Arduino.h>

#include <math.h>

#include <Wire.h>

#include "MAX30100.h"

MAX30100* pulseOxymeter;

void setup() {



  Serial.println("Pulse oxymeter test!");


//  pulseOxymeter = new MAX30100();

  pinMode(2, OUTPUT);



void loop() {


  //You have to call update with frequency at least 37Hz. But the closer you call it to 100Hz the better, the filter will work.

  pulseoxymeter_t result = pulseOxymeter->update();


  if( result.pulseDetected == true )




    Serial.print( "BPM: " );

    Serial.print( result.heartBPM );

    Serial.print( " | " );


    Serial.print( "SaO2: " );

    Serial.print( result.SaO2 );

    Serial.println( "%" );




12 JD
4 in stock
12 JD 1+ units
11.4 JD 10+ units
10.8 JD 25+ units
10.2 JD 100+ units

Related Products

subscribe to our weekly newsletter