Project tutorial
PULSE OXIMETER for EMERGENCY use during CORONAVIRUS DISEASE

PULSE OXIMETER for EMERGENCY use during CORONAVIRUS DISEASE © GPL3+

This simple project want help people and institution in this Emergency. A pulse oximeter for fast reaction to the Covid-19.

  • 2,989 views
  • 2 comments
  • 17 respects

Components and supplies

Necessary tools and machines

3drag
3D Printer (generic)
09507 01
Soldering iron (generic)
4966285
Solder Wire, Lead Free
4x0.25 wire

About this project

This simple project want help people and institution in this Emergency. The difficult reperibility of fundamental device that in standard situation are the base in all the Hospitals is a huge problem, as also the shortage of personal protection devices..

Open source as the base for fast replication and diffusion

The "base pack" of this first release are intended to produce a functional device with all the parts:

1 - The hardware

A short list with all necessary parts, common and cheap hardware with a huge potential: Arduino Nano (next micro and others), MAX30100 pulse-oximeter sensor, OLED screen 128x32, "emergency board".

2 - 3d printable enclosures

A simple 3d printed case to protect hardware and connections.

3 - 3d printable finger-clip

An open-source and already available "finger sensor enclosure" are the fast way to share the project. FInd it in thingiverse repository. Is a "Pulse Oximeter Clip" to use with MAX30100 Board designed by Peter_Smith.

4 -Simple emergency board

To electrically connect and to support all the parts a simple "baseboard" is build with a prototype circuit board (next level will be a printable circuit). In this way connect Arduino board, the sensor and the Oled screen is fast.

5 - The code

In this preliminary release a base configuration is build to have clear view of the heart rate and of the oximetry, with real time monitoring.The base configuration and the paramers was set for a general use, some simple change could be necessary for specific situation.

6 - The instructions

Simple Draws, a step by step instructions and base information for assembly and debug. The links for libraries download and the thingiverse repository. Nothing else is needed in this phase.

DISCLAIMERPlease consider that this application, sensors and functional device are NOT tested for medical purpose and the single parts aren't calibrated and aren't certified. Please use this simple device for preventive scope and to monitorate patients only under emergency situation when no other medical deviced and Pulse-oximeters are available.Every use outside this scope will be at under own responsibility, every modification or changing will be under own responsibility.

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/licenses.en.htmlCopyright © 2020, CEREBRUM™ srl

Downloading at least a single file or use any content or instruction referrable to this work mean to accept the disclaimer and accept the intent of this project, released under an Emergnecy situation of "Covid-19 diseases".

Code

CE_Pulse-Oxi_dev2.4.inoArduino
Base code for Arduino Nano vR3
i2c for MAX30100 and Oled display
/* This program is free software: you can redistribute it and/or modify it under 
 *  the terms of the GNU General Public License as published by the Free Software 
 *  Foundation, either version 3 of the License, or (at your option) any later version.
 *  
 *  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
 *  without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
 *  See the GNU General Public License for more details.
 *  
 *  You should have received a copy of the GNU General Public License along with this program.  
 *  If not, see <http://www.gnu.org/licenses/>.
 *  Copyright 2020,CEREBRUM srl
 *  
 *  More details by CEREBRUM Srl
 *  www.cerebrum.it
 *  ITALY
 *  
 *  Please consider that this application, sensors and functional device are NOT tested for 
 *  medical purpose and the single parts aren't calibrated and aren't certified. 
 *  Please use this simple device for preventive scope and to monitorate patients only under 
 *  emergency situation when no other medical deviced and Pulse-oximeters are available.
 *  
 *  CEREBRUM-oximeter dev. 2.4 - version 1.1   // April, 6 2020
 *  
 *  Arduino NANO - 3,3v | i2c A4 (SDA) , A5 (SCL)
 *  Arduino NANO Every - 3,3v | i2c A4 (SDA) , A5 (SCL)
 *  Arduino MICRO - 3,3v | i2c 2 (SDA), 3 (SCL)
 *  
 *  MAX30100 - PulseOximeter board (+3.3v | GND | SCA/SCL)
 *  OLED SSD1306 128x32 (+3.3v | GND | SCA/SCL)
*/

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include "MAX30100.h"
#include <U8g2lib.h>
 
#define REPORTING_PERIOD_MS      1000
#define PULSE_WIDTH              MAX30100_SPC_PW_1600US_16BITS
#define IR_LED_CURRENT           MAX30100_LED_CURR_40MA  
#define LED_CURRENT              MAX30100_LED_CURR_20_8MA 
#define SAMPLING_RATE            MAX30100_SAMPRATE_100HZ

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);
PulseOximeter pox;
MAX30100 sensor;

uint32_t tsLastReport = 0;
uint32_t last_beat=0;
bool initialized=false;
int HRclean;
int SpO2;
 
void onBeatDetected()
{
  show_beat();
  last_beat=millis();
}

void show_beat() 
{
  u8g2.setFont(u8g2_font_cursor_tr);
  u8g2.setCursor(118,10);
  u8g2.print("_");
  u8g2.sendBuffer();
}

void initial_display() 
{
  if (not initialized) 
  {
    u8g2.clearBuffer();
    u8g2.setCursor(15,12);
    u8g2.setFont(u8g2_font_crox2hb_tr); 
    u8g2.print("CEREBRUM.it"); 
    u8g2.setFont(u8g2_font_crox2h_tr);
    u8g2.setCursor(30,29);
    u8g2.print("Initializing...");
    u8g2.sendBuffer(); 
    delay(4000);
   
    initialized=true;

      u8g2.clearBuffer();
      u8g2.setFont(u8g2_font_crox2hb_tr); 
        if (!pox.begin()) {
          u8g2.setCursor(40,12);
          u8g2.print("FAILED");
          u8g2.setCursor(15,29);
          u8g2.print("Check Sensor !");
          u8g2.sendBuffer(); 
          for(;;);
        } else {
          u8g2.setCursor(20,12);
          u8g2.print("INITIALIZED");
          u8g2.setCursor(0,29);
          u8g2.print("Wear the Sensor...");
          u8g2.sendBuffer(); 
        }
     delay(2000);
  }
}

void setup()
{
    u8g2.begin();
    initial_display();
    pox.begin();

    pox.setOnBeatDetectedCallback(onBeatDetected); 
    pox.setIRLedCurrent(LED_CURRENT);  
    sensor.setMode(MAX30100_MODE_SPO2_HR);
    sensor.setLedsPulseWidth(PULSE_WIDTH);
    sensor.setSamplingRate(SAMPLING_RATE);
}
 
void loop()
{
    pox.update();
    HRclean = pox.getHeartRate();
    SpO2 = pox.getSpO2();
    if ((millis() - tsLastReport > REPORTING_PERIOD_MS) and (HRclean>30 and HRclean<220 and SpO2>30 and SpO2<100)) {
      u8g2.clearBuffer();
      u8g2.setFont(u8g2_font_crox2h_tr);
      u8g2.setCursor(0,12);  
      u8g2.print("HR");
      u8g2.setCursor(75,12);  
      u8g2.print("Bpm");
      u8g2.setCursor(0,30);
      u8g2.print("SpO2 ");
      u8g2.setCursor(75,30);
      u8g2.print("%"); 
      u8g2.setFont(u8g2_font_fub11_tf); 
      u8g2.setCursor(45,12);  
      u8g2.print(HRclean);
      u8g2.setCursor(45,30);  
      u8g2.print(SpO2);
      u8g2.setFont(u8g2_font_cursor_tr);
      u8g2.setCursor(118,10);
      u8g2.print("^");
      u8g2.sendBuffer();

     tsLastReport = millis();      
    }
}

Custom parts and enclosures

Electronic box - bottom case
This is the main enclosure for electronic parts and oled display
Electronic box - top cover
This is the top cover of the enclosure for electronic parts and oled display
Finger clip for MAX30100 sensor
This is the 2 part's finger clip developed by peter smith, see the team contributors

Schematics

CE_Pulse-Oxi_nano_V1
main connections
ce_pulse-oxi_nano_v1_rlt456wOHw.fzz
CE_Pulse-Oxi_nano_"emergency board"
A simple board to connect display, sensor and arduino core
ce_pulse-oxi_nano_eboard_v1_Hr01HUzdkf.fzz

Comments

Similar projects you might like

Open Source Pulse Oximeter for COVID-19

Project tutorial by Arduino “having11” Guy

  • 16,489 views
  • 7 comments
  • 62 respects

ATtiny85 Pulse Oximeter and Photoplethysmograph

Project in progress by Jeff Magee

  • 15,087 views
  • 13 comments
  • 82 respects

Animated RGB Wall Clock

Project tutorial by TheTNR

  • 15,874 views
  • 11 comments
  • 41 respects

Epoxy Resin LED Clock

Project tutorial by TheTNR

  • 2,674 views
  • 2 comments
  • 15 respects

RC LOGGERSTATION - GPS Data Logger for RC Plane

Project tutorial by yvesmorele

  • 3,110 views
  • 2 comments
  • 8 respects

DIY Arduino Based Pulse Induction Metal Detector

Project tutorial by Mirko Pavleski

  • 20,732 views
  • 12 comments
  • 23 respects
Add projectSign up / Login