Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Draagbare pulsoximeter voor noodgebruik tijdens COVID-19

Onderdelen en benodigdheden

Arduino Nano R3 1
MAX30100 pulsoximeter-sensor (I2C) 1
SSD1306 128×32 I2C OLED-display 1
Experimenteerprintplaat (of printplaat ontwerp) 1
Vingerclip (ontwerp van Peter Smith, Thingiverse) 1

Benodigde tools

  • 3D-printer
  • Solderbout
  • Solderdraad (loodvrij)
  • 4×0,25mm draad

Over dit project

Tijdens de COVID-19-crisis was er tekort aan pulsoximeters in ziekenhuizen. Dit open-source project biedt een snelle, goedkope, reproduceerbare oplossing voor noodsituaties.

DISCLAIMER: Dit apparaat is NIET medisch gecertificeerd, sensoren zijn niet gecalibreerd. Alleen voor preventieve monitoring onder noodomstandigheden wanneer geen medische apparatuur beschikbaar is. Gebruik op eigen risico. GNU GPL v3 licentie.

1. Hardware

Korte lijst: Arduino Nano (3.3V-logica), MAX30100, OLED 128×32, simpele "emergency board" printplaat.

2. 3D-print behuizing

Eenvoudig hoesje voor electronica + OLED. Twee delen (basis + deksel).

3. 3D-print vingerclip

Gebruikt bestaand open-source ontwerp: Pulse Oximeter Clip door Peter Smith. Past precies op MAX30100-breakout.

4. Emergency board

Simpele experimenteerprint om Arduino, sensor en OLED te verbinden (I2C-paralleel: SDA/SCL gedeeld). Later versie: printplaat ontwerp.

5. Code

Basiscode voor real-time hartslag (BPM) en zuurstofverzadiging (SpO2%) op OLED. Parameters ingesteld voor algemeen gebruik; eventueel aanpassen voor specifieke situaties.

6. Instructies

Stap-voor-stap tekeningen, bibliotheek-links (Adafruit MLX90614, U8g2, MAX30100), Thingiverse-links. Geen extra tools nodig.

Code

CE_Pulse-Oxi_dev2.4.ino (Arduino Nano)

/* CEREBRUM-oximeter dev. 2.4 - v1.1 - April 6 2020
 * Arduino NANO - 3.3V | I2C: A4 (SDA), A5 (SCL)
 * MAX30100 - PulseOximeter board (+3.3V | GND | SDA/SCL)
 * OLED SSD1306 128x32 (+3.3V | GND | SDA/SCL)
 * GNU GPL v3 - CEREBRUM srl, Italy
 */
#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, last_beat = 0;
bool initialized = false;
int HRclean, 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 (!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) &&
      (HRclean > 30 && HRclean < 220 && SpO2 > 30 && 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();
  }
}

3D-print onderdelen

  • Hoofdbehuizing (basis + deksel) voor electronica & OLED
  • Vingerclip (2 delen) – ontwerp Peter Smith

Schema's

  • Hoofdaansluitingen (I2C-bus gedeeld)
  • Emergency board (Fritzing-bestanden in repo)

Productieproces

  1. Waarom Checklijsten Fabriekefficiëntie Drijven: Bewezen Voordelen en Praktische Implementatie
  2. Bouw een Ultrasonische Zweefapparaat met Arduino – Stap-voor-stap Handleiding
  3. Efficiënte ISD1700 Audio-opname Software & Arduino Handleiding
  4. Health Band: slimme weerebare assistant voor senioren
  5. Expert Gids Voor Het Selecteren Van Wire Decks Voor Betrouwbare Palletrekken
  6. Premium zandgietoplossingen voor industriële toepassingen
  7. Elektrische Waterpomp voor Thuisgebruik – Betrouwbaar, Efficiënt, Eenvoudig te Installeren
  8. Top CNC EDM machines voor precisiebewerking
  9. Metalen 3D-printen: 5 high-tech toepassingen die de industrie transformeren
  10. COVID-19: Kernstrategieën voor een effectief nood-supply-chain-responsplan
  11. 5 krachtige use cases voor 3D-printen