The University Of Jordan
School Of Engineering
Mechatronics Engineering Department
Microprocessor and Microcontroller Applications Lab (0908435)
Fingertip SpO₂ and Heart Rate Monitor
with MAX30100
Prepared by
RAYA EMAD ABUALFEILAT | 0217161
AYHAM OMAYYA ANANBEH | 0188637
Amr Hosam Titi | 0211580
Sara Amjad Makahleh | 2210957
Mohammed Ahmad Al-shakht | 0195120
Presented to
Dr. Musa Alyaman
Eng. Rawan Khaled
Spring 2024/2025
1
Contents
Abstract ................................................................................................................................................ 3
Introduction ......................................................................................................................................... 3
Principle of Operation of MAX30100 ................................................................................................. 3
1. SpO₂ Measurement ....................................................................................................................... 4
2. Heart Rate Measurement ............................................................................................................. 4
3. Signal Processing .......................................................................................................................... 4
System Overview ................................................................................................................................... 4
Transmitter Process ............................................................................................................................ 4
Analog Signal Processing: ................................................................................................................ 4
Data Transmission via I²C: .............................................................................................................. 5
Receiver Process: .............................................................................................................................. 5
Data Acquisition from Sensor: ......................................................................................................... 5
Signal Interpretation & Processing: .................................................................................................... 5
The Arduino: ..................................................................................................................................... 5
Display Output: ................................................................................................................................ 5
System Implementation....................................................................................................................... 6
Hardware Implementation............................................................................................................... 6
Connections: ..................................................................................................................................... 6
MAX30100 Sensor: .......................................................................................................................... 6
Software Implementation: ............................................................................................................... 7
Key Code Features: ........................................................................................................................... 7
LCD Initialization: ............................................................................................................................ 7
Sensor Initialization: ........................................................................................................................ 7
Heartbeat Callback: .......................................................................................................................... 7
Data Acquisition and Display: .......................................................................................................... 7
Challenges and Future Work ................................................................................................................ 9
Challenges ......................................................................................................................................... 9
Future Work ....................................................................................................................................... 9
Cost..................................................................................................................................................... 10
Applications ....................................................................................................................................... 10
Conclusion.......................................................................................................................................... 10
2
Abstract
This project presents the development of a fingertip pulse oximeter and heart rate monitoring
system using the MAX30100 sensor and an OLED display. The system is designed to measure
blood oxygen saturation (SpO₂) and pulse rate in real time, displaying the results on a compact
I2C OLED screen. An Arduino microcontroller serves as the processing unit, handling sensor data
acquisition, signal processing, and visual output. The MAX30100 combines two LEDs (red and
infrared), a photodetector, and integrated analog-to-digital conversion to accurately monitor vital
signs through fingertip placement. The project aims to demonstrate the principles of biomedical
sensing and embedded system design in a low-cost, portable form factor. Future enhancements
may include Bluetooth connectivity, data logging, and improved signal filtering for medical-grade
reliability.
Introduction
Pulse oximetry is a critical health monitoring technique used to measure blood oxygen saturation
(SpO₂) and heart rate. This project aims to design and implement a real-time fingertip pulse
oximeter using the MAX30100 sensor, an Arduino microcontroller, and an OLED display.
The MAX30100 operates on the principle of photoplethysmography, using red and infrared LEDs
to detect variations in blood volume. These readings are processed by the Arduino and displayed
on the OLED in real time.
The system is compact, low-cost, and suitable for personal health monitoring or educational use.
This project demonstrates practical applications of embedded systems in biomedical sensing and
lays the groundwork for future enhancements such as Bluetooth communication and data logging.
Principle of Operation of MAX30100
The MAX30100 operates based on the principle of photoplethysmography (PPG), a non-invasive
optical technique used to measure the pulse rate and blood oxygen saturation (SpO₂).
The sensor contains two LEDs:
• A Red LED (~660 nm wavelength)
• An Infrared (IR) LED (~880 nm wavelength)
And one photodetector that captures the light reflected from the user's fingertip.
3
1. SpO₂ Measurement
Oxygenated and deoxygenated hemoglobin absorb red and infrared light differently:
• Oxygenated hemoglobin (HbO₂) absorbs more infrared light and less red light.
• Deoxygenated hemoglobin (Hb) absorbs more red light and less infrared light.
By comparing the amount of red and IR light absorbed over time, the ratio is computed and used
to estimate the SpO₂ level.
2. Heart Rate Measurement
As blood pulses through the finger with each heartbeat, it causes periodic changes in light
absorption. These fluctuations are captured by the photodetector, and the time between pulses is
used to calculate the heart rate in beats per minute (BPM).
3. Signal Processing
The MAX30100 includes:
• Low-noise analog signal processing
• Analog-to-digital conversion (ADC)
• Built-in temperature compensation for accurate readings
It communicates with the microcontroller using the I²C protocol, transmitting raw or filtered
values for SpO₂ and heart rate analysis.
System Overview
Transmitter Process
In this project, the transmitter process refers to the data acquisition phase where the MAX30100
sensor generates and transmits raw physiological signals to the Arduino.
LED Emission:
The MAX30100 uses two onboard LEDs: red (660 nm) and infrared (880 nm) that emit light into
the fingertip.
Light Absorption & Reflection:
The light passes through the finger tissue, where oxygenated and deoxygenated hemoglobin
absorb red and IR light differently. The reflected light is detected by the photodetector in the
sensor.
Analog Signal Processing:
Inside the MAX30100, these light signals are converted into electrical signals. It uses:
4
Low-noise signal amplifiers
Analog-to-digital converters (ADC)
Onboard temperature compensation
Data Transmission via I²C:
The digital data (representing raw or filtered PPG signals) is transmitted over the I²C interface
(SDA/SCL lines) to the Arduino microcontroller.
At this point, the MAX30100 is acting as the transmitter.
Receiver Process:
The receiver process takes place inside the Arduino Uno, which serves as the data processor and
visual output controller.
Data Acquisition from Sensor:
Using the MAX30100_PulseOximeter library, the Arduino reads heart rate and SpO₂ data from
the MAX30100 via the I²C bus.
Signal Interpretation & Processing:
The Arduino:
Extracts the heart rate in beats per minute (BPM)
Calculates blood oxygen saturation percentage (SpO₂ %)
Calls a callback function (onBeatDetected) when a pulse is
detected
Figure 1 Arduino
Display Output:
The processed values are formatted and sent to the LCD via I²C,
where the real-time vitals are display
Figure 2 LCD 16x2
5
System Implementation
Hardware Implementation
The system consists of three main components: an Arduino Uno microcontroller, a MAX30100
pulse oximeter sensor, and an I²C-based 16x2 LCD display. All components are integrated on a
breadboard to facilitate prototyping and ensure modular connections.
Connections:
The LCD is connected using the I²C interface, significantly simplifying the wiring by reducing the
number of required data pins from 16 to just 2. The connections are as follows:
VCC → Arduino 5V
GND → Arduino GND
SDA → Arduino A4
SCL → Arduino A5
MAX30100 Sensor:
This sensor also uses the I²C protocol for communication and is connected using four wires:
VIN → Arduino 5V (despite the sensor
operating at 3.3V, it contains an onboard
voltage regulator, allowing safe operation at
5V input)
GND → Arduino GND
SDA → Arduino A4
SCL → Arduino A5
This shared I²C bus enables both the LCD Figure 3 Hardware Connections:
and sensor to operate using the same data
lines (A4 and A5), making the circuit cleaner
and more compact.
The fingertip is placed directly on the MAX30100 sensor for measurement, and the live output is
displayed on the LCD screen. The Arduino processes incoming data in real-time and updates the
display once per second.
6
The photo illustrates the working prototype with a clear display of oxygen saturation (SpO₂) and
heart rate (BPM), demonstrating successful interfacing between the components.
Software Implementation:
The system is programmed using the Arduino IDE. The code is structured into initialization
(setup) and continuous monitoring (loop) sections. It makes use of the following libraries:
Wire.h: For I²C communication.
LiquidCrystal_I2C.h: To control the I²C LCD display.
MAX30100_PulseOximeter.h: For reading and interpreting data from the MAX30100 sensor.
Key Code Features:
LCD Initialization:
The LCD is initialized using the address 0x27, which is standard for many I²C LCD modules. The
backlight is enabled to improve visibility.
Sensor Initialization:
The MAX30100 sensor is initialized with pox.begin(). If initialization fails, the system halts and
displays "Sensor FAIL" on the LCD. On success, it prints "Sensor OK" and sets up the IR LED
current level and a callback function for heartbeat detection.
Heartbeat Callback:
When a heartbeat is detected, the callback onBeatDetected() is triggered, which currently prints
"Beat!" to the serial monitor. This can later be expanded for additional visual or auditory feedback.
Data Acquisition and Display:
inside the loop() function, the system updates the sensor reading continuously using pox.update().
7
Every second, it fetches the latest heart rate and SpO₂ values and displays them on the LCD.
Figure 4 Project code
8
Challenges and Future Work
Challenges
Unstable Readings and Hardware Checks
Inconsistent readings were often caused by loose jumper wires or poor connections. Ensuring all
wiring between the Arduino, sensor, and LCD was secure was essential for reliable operation.
LCD Display Visibility and Row Issues
Initially, writing data to the first row of the LCD did not display the output as expected. The
solution was to write to the second row instead, where the information appeared correctly.
Additionally, the LCD contrast needed fine-tuning via the potentiometer on the I2C module to
make the text clearly visible.
Incorrect I2C Addresses
A common issue was using incorrect I2C addresses for either the LCD or the MAX30100 sensor.
Identifying the correct address using an I2C scanner sketch and updating the code accordingly
resolved communication errors.
Component Compatibility and Power Supply
The MAX30100 sensor is rated for 3.3V, but since it includes an onboard voltage regulator, it was
safely powered using the 5V pin from the Arduino. Proper voltage supply was crucial to prevent
sensor malfunction.
Future Work
• Bluetooth Connectivity: Add wireless data transmission to a smartphone app for live
monitoring and alerts.
• Data Logging: Store historical data using EEPROM or SD card for long-term health
tracking.
• Mobile App Integration: Create an app for graphical display, alerts, and remote access.
• Improved Filtering Algorithms: Implement digital filters (e.g., Kalman, moving
average) to improve signal accuracy.
• Enclosure Design: Build a finger clip or wearable casing to ensure consistent readings
and portability.
9
Cost
Item Quantity Unit Cost (JOD) Total Cost (JOD)
Arduino Uno 1 8 8
MAX30100 Pulse Oximeter Sensor 1 3.75 3.75
Breadboard, Jumper Wires, Resistors - 9 9
16x2 LCD Display 1 2 2
Total 22.75
Applications
The fingertip pulse oximeter system has a wide range of real-world applications, including:
• Home Health Monitoring: Enables individuals to track SpO₂ and heart rate for early detection of
respiratory or cardiovascular issues.
• Sports and Fitness: Used by athletes to monitor oxygen levels and heart rate during workouts or
high-altitude training.
• Clinical Triage and Emergency Care: Assists medical staff in quickly assessing patient vitals in
emergency or remote settings.
• Wearable Health Devices: Forms the core component of smartwatches and fitness bands with health
tracking features.
• Educational Projects: Demonstrates biomedical sensing principles in engineering and healthcare-
related academic labs
Conclusion
This project successfully demonstrates the design and implementation of a fingertip pulse oximeter using
the MAX30100 sensor, Arduino microcontroller, and OLED display. The system accurately measures and
displays SpO₂ and heart rate in real-time, highlighting the potential of embedded systems in biomedical
applications.
Through this project, we gained hands-on experience in sensor interfacing, signal processing, and real-time
data visualization. The system is low-cost, portable, and suitable for personal health monitoring or
educational use.
Future improvements could include Bluetooth integration for wireless data transmission, enhanced
filtering algorithms for better accuracy, and data logging for trend analysis
10