Smart Blood Oxygen And Heart Rate Monitor With Automatic Data Saving System (Hindi And English Video)

Ashwini Kumar sinha


Thanks to the various wearable health devices available in the market today, we can easily monitor our health status at home, without visiting the doctor. How about making one yourself?

In this DIY project, we will try to make a Smart Health Monitoring Device that can measure SpO2 (percentage of oxygen in the blood) and heart rate. This wearable device can be used by athletes to monitor their heart rate and blood oxygen levels during workout. Best part of this project is that you can connect this device to an app that automatically saves all the sensor data to a text file.

Change Video Language

So, let’s start the project.

Fig 1. Pulse Sensor


  • Max30100 sensor
  • Any Arduino Dev board (Arduino Uno, Nano or pro mini).
  • OLED Display (SSD 1306).
  • Bluetooth HC 05
  • Wires


First of all, we need to install the required library to the Arduino IDE. Go to tools and open the library manager and search these libraries (“Addafurit GFX”, “Oak Oled”, “Max 30100”) and install these libraries.

Once we have installed the libraries, we can start coding. In the first part of the code, we have included the required libraries in code.

Fig 2. Initiating Libraries in Code

After this, we will add a short bitmap code that has a heart symbol logo. In the next part, we have a function that displays the heart bitmap logo whenever your heart beats (Refer Fig 3). Now, we can create a setup function and set the baud rate of Bluetooth along with other settings.(Refer Fig 4)

Fig 3. Bitmap Code


Fig 4. Arduino code setting baud rate of Bluetooth
Fig 5. Code for showing sensor status

Then we will create a loop function that updates the readings of sensor and displays those readings on OLED screen.

Fig 6. Arduino code for getting sensor data
Fig 7. Arduino code for displaying Sensor data on OLED

Now, connect the components as illustrated below.


Arduino Components
5v OLED and Max30100 VCC
GND OLED and Max30100 GND
SCL SCL of OLED and Max 30100
SDA SDA of OLED and Max30100
5V Bluetooth VCC
GND Bluetooth GND

App Making

We are done with coding and connection parts, so let’s build the app. We are going to use MIT App Inventor. First, we will create a layout and add the following components to it.

  • An Image View
  • A Button
  • A Text Level
  • A Text input
  • Bluetooth Clint
  • Clock Timmer
  • File Storage

Then Join the MIT App inventor code blocks according to Fig 9.

Fig 9. App Inventor code Blocks


After connecting the components, recheck each connection. Then power the Arduino. When you power the Arduino, you get a message on OLED screen which says – “Initializing Sensor.” After a few seconds when Arduino detects the sensor, it shows the reading on the screen. Initially, it will show 0 or false reading. Now place your finger on the sensor and let it detect your heartbeat rate and blood oxygen level. After a few seconds, your SpO2 (oxygen percentage in the blood) and heartbeat rate will be displayed on the OLED screen. Next, open the app that you have made and connect it to the Bluetooth. After it is connected, you can see the blood oxygen percentage (SpO2) and pulse rate in the app. The app automatically saves the sensor data in the form of text file, which you can share with a doctor or use it for analysis.

Fig 10. Sensor data in text

Download Code




  1. error help

    Arduino: 1.8.10 (Windows 10), Board: “Arduino/Genuino Uno”

    Sketch uses 15040 bytes (46%) of program storage space. Maximum is 32256 bytes.
    Global variables use 1834 bytes (89%) of dynamic memory, leaving 214 bytes for local variables. Maximum is 2048 bytes.
    Low memory available, stability problems may occur.
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x45
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xfc
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x45
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x7c
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x11
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xfc
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x45
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x1c
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x11
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x3c
    An error occurred while uploading the sketch

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    • may be problem with arduino IDE. Download the new IDE and then upload a bare minim code on arduino and then try a blink code in that then try this code . Hope this helps you

  2. Please Help

    heart_rate:62:18: error: could not convert ‘pox.PulseOximeter::begin((PulseOximeterDebuggingMode)0u)’ from ‘void’ to ‘bool’
    if (pox.begin()) {
    exit status 1
    could not convert ‘pox.PulseOximeter::begin((PulseOximeterDebuggingMode)0u)’ from ‘void’ to ‘bool’

    • Have you done any changes in code use the same code tat is provided with the article.Also check have you properly initialized the sensor correctly.


Please enter your comment!
Please enter your name here