Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Портативный пульсоксиметр для экстренного использования в условиях COVID-19

Компоненты и материалы

Arduino Nano R31 шт.
MAX30100 (пульсоксиметр/пульс, I2C)1 шт.
OLED SSD1306 128×32 I2C1 шт.
Макетная плата1 шт.
Накладка на палец (3D-печать, модель Peter Smith на Thingiverse)1 шт.

Инструменты

О проекте

В условиях пандемии дефицит медицинских пульсоксиметров. Open-source проект для быстрого воспроизводства функционального устройства мониторинга SpO2 и пульса.

Состав «базового набора»

  1. Железо: Arduino Nano (или Nano Every, Micro), MAX30100, OLED 128×32, простая макетная плата («аварийная плата»).
  2. 3D-корпус: простой чехол для электроники + крышка.
  3. Накладка на палец: готовая модель «Pulse Oximeter Clip» (Thingiverse, автор Peter_Smith) для фиксации MAX30100 на пальце.
  4. Плата-расширитель: соединяет Nano, датчик и дисплей на макетке (следующий шаг — PCB).
  5. Прошивка: базовая конфигурация для реального времени HR и SpO2. Параметры общего назначения, могут требовать калибровки.
  6. Инструкции: пошаговая сборка, схемы, ссылки на библиотеки и 3D-модели.

ВАЖНОЕ ПРЕДУПРЕЖДЕНИЕ: Устройство НЕ сертифицировано, НЕ калибровано, НЕ предназначено для медицинской диагностики. Только для превентивного мониторинга в экстренных условиях при отсутствии медицинского оборудования. Использование на свой страх и риск. Лицензия GPL v3.

Код (CE_Pulse-Oxi_dev2.4.ino)

/* CEREBRUM-oximeter dev. 2.4 - version 1.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)
   GPL v3, Copyright © 2020, CEREBRUM™ srl */
#include 
#include "MAX30100_PulseOximeter.h"
#include "MAX30100.h"
#include 

#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.setFont(u8g2_font_crox2hb_tr); u8g2.setCursor(15,12); 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();
    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-модели

Схемы

Производственный процесс

  1. Металлическая 3D-печать: 5 передовых приложений, трансформирующих промышленность
  2. Почему чек-листы повышают эффективность завода: доказанные преимущества и внедрение
  3. COVID-19: ключевые стратегии для эффективного плана аварийного реагирования цепочки поставок
  4. Создание ультразвукового левитатора на Arduino: пошаговое руководство
  5. Health Band: умный браслет для мониторинга пожилых людей на Arduino Nano и DPS310
  6. Экспертное руководство по выбору проволочных настилов для надежных паллетных стеллажей
  7. 5 мощных кейсов использования 3D-печати
  8. Премиальные решения литья в песок для промышленных применений
  9. Электрические водяные насосы для дома — надежные, эффективные, простые в установке
  10. Топ ЧПУ-эрозионных станков для точной обработки