Thursday, March 28, 2024

Smart Blood Oxygen And Heart Rate Monitor With Automatic Data Saving System

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.

So, let’s start the project.

Pulse Sensor prototype with Heart Rate Monitor and oxygen meter
Fig 1. Pulse Sensor prototype with Heart Rate Monitor and oxygen meter

Components:

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

Coding

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.

- Advertisement -
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.

- Advertisement -
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.

Connection

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
RX TX
TX RX

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

MIT App Setup For Heart Rate Monitor and oxygen meter

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

App Inventor code Blocks For Heart Rate Monitor and oxygen meter
Fig 9. App Inventor code Blocks

Testing

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 Source Code

 

26 COMMENTS

  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.

  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’

  3. The code you provided is not compiling. It says
    Arduino: 1.8.5 (Windows 10), Board: “Arduino/Genuino Uno”

    C:\Users\Student\Desktop\bloodoxy\bloodoxy.ino:2:36: fatal error: MAX30100_PulseOximeter.h: No such file or directory

    #include “MAX30100_PulseOximeter.h”

    ^

    compilation terminated.

    Multiple libraries were found for “Wire.h”
    Used: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\Wire
    Not used: C:\Users\Student\Documents\Arduino\libraries\Wire
    exit status 1
    Error compiling for board Arduino/Genuino Uno.

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

  4. Arduino: 1.8.13 (Windows Store 1.8.42.0) (Windows 10), Board: “Arduino Nano, ATmega328P”

    Sketch uses 15828 bytes (51%) of program storage space. Maximum is 30720 bytes.

    Global variables use 1840 bytes (89%) of dynamic memory, leaving 208 bytes for local variables. Maximum is 2048 bytes.

    Low memory available, stability problems may occur.

    Serial port not selected.

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

  5. Hello,
    Thanks for the project.
    I want to add one more thing: when the oxygen level falls below 90% it gives an audio visual alarm.
    Kindly provide the modified code and connection.

    Thanks and best regards,

SHARE YOUR THOUGHTS & COMMENTS

Electronics News

Truly Innovative Tech

MOst Popular Videos

Electronics Components

Calculators