Portable Pulse Oximeter using Arduino Nano

 
Pulse oximeter

1. Introduction

A Portable Pulse Oximeter using Arduino is a compact device used to measure:

  • Blood Oxygen Saturation (SpO₂)
  • Heart Rate (BPM)

It works using a MAX30100/MAX30102 sensor, which emits red and infrared light through the fingertip and measures absorption changes due to blood flow.

This project is ideal for:

  • Biomedical electronics learning
  • IoT healthcare projects
  • Student demonstrations

2. Components

  • Arduino Nano / Uno
  • MAX30100 or MAX30102 Pulse Oximeter Sensor
  • OLED Display (SSD1306 I2C, 128x64)
  • Lithium-ion Battery (3.7V)
  • TP4056 Charging Module
  • MT3608 Boost Converter
  • Connecting wires
  • Breadboard / PCB

3. Circuit and Connections

Arduino Nano Pinout Diagram
Arduino Nano Pinout Diagram

Pinout Diagram MAX30102 Sensor
Pinout Diagram MAX30102 Sensor


Pinout Diagram of OLED Display SSD1306

TP4056 Pinout Diagram
TP4056 Pinout Diagram

🔹 MAX30102 Sensor → Arduino

  • VCC → 3.3V
  • GND → GND
  • SDA → A4
  • SCL → A5

🔹 OLED Display → Arduino

  • VCC → 5V
  • GND → GND
  • SDA → A4
  • SCL → A5

👉 Both devices use I2C communication, so they share the same SDA and SCL pins.

🔹 Power Section

  • Battery → TP4056
  • TP4056 → Boost Converter
  • Boost Converter → Arduino VIN (5V)

4. Detailed Step By Step Circuit Working

  1. When power is supplied, Arduino initializes the sensor and OLED display.
  2. The MAX30102 emits red and infrared light into the finger.
  3. Blood absorbs light differently based on oxygen level.
  4. The photodetector captures reflected light signals.
  5. Sensor converts signals into digital values via I2C.
  6. Arduino processes the data using an algorithm.
  7. Heartbeat is detected from waveform peaks → BPM calculated.
  8. Ratio of red/IR signals → SpO₂ calculated.
  9. Results are displayed on OLED screen in real time.

5. Libraries to be Included

Install from Arduino Library Manager:

  • Adafruit GFX
  • Adafruit SSD1306
  • MAX30100lib or SparkFun MAX3010x

6. Code

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
PulseOximeter pox;

uint32_t tsLastReport = 0;

void setup()
{
Serial.begin(9600);

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED failed");
for(;;);
}

display.clearDisplay();

if (!pox.begin()) {
Serial.println("Sensor failed");
for(;;);
}

pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
}

void loop()
{
pox.update();

if (millis() - tsLastReport > 1000) {
display.clearDisplay();

display.setTextSize(2);
display.setTextColor(WHITE);

display.setCursor(0,0);
display.print("BPM:");
display.println(pox.getHeartRate());

display.setCursor(0,30);
display.print("SpO2:");
display.print(pox.getSpO2());
display.println("%");

display.display();

tsLastReport = millis();
}
}

7. Detailed Step By Step Code Working

  • #include <Wire.h> → Enables I2C communication
  • MAX30100_PulseOximeter.h → Sensor control library
  • OLED libraries → Display control

Setup Function

  • Initializes OLED display
  • Starts pulse oximeter sensor
  • Sets LED current for stable readings

Loop Function

  • pox.update() → Continuously reads sensor data
  • Every 1 second:
    • Clears display
    • Reads BPM using getHeartRate()
    • Reads SpO₂ using getSpO2()
    • Displays results

8. Tips

  • Keep finger steady for accurate readings
  • Use 3.3V for MAX30102 (very important)
  • Avoid bright external light interference
  • Ensure proper finger placement
  • Use filtering if readings fluctuate

9. Uses

  • Health monitoring systems
  • Fitness tracking devices
  • Biomedical projects
  • Remote patient monitoring
  • IoT healthcare applications

10. Conclusion

This Arduino-based Portable Pulse Oximeter is a powerful project combining sensor technology, signal processing, and display interfacing. It is compact, low-cost, and highly useful for educational and prototype healthcare applications.

You can further enhance it by adding:

  • Bluetooth/WiFi connectivity
  • Data logging (SD card)
  • Alert systems for abnormal readings
à´¤ുà´Ÿà´•്à´•à´•്à´•ാർക്à´•ാà´¯ി ഇലക്à´Ÿ്à´°ോà´£ിà´•്à´¸് ലളിതമാà´¯ി പഠിà´•്à´•ാം.

Empowering students in Kerala with hands-on technical skills.