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

Пульсоксиметр с открытым исходным кодом для COVID-19

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

Arduino Nano R3
× 1
Maxim Integrated MAX30102 Pulse and Heartrate Sensor
× 1
Дисплей DFRobot Gravity I2C OLED-2864
× 1

Необходимые инструменты и машины

3D-принтер (общий)
Паяльник (общий)

Приложения и онлайн-сервисы

IDE Arduino
Autodesk Fusion 360

Об этом проекте

Проблемы COVID-19

COVID-19 - это заболевание, вызываемое вирусом SARS-CoV-2, который в первую очередь поражает дыхательную систему человека. Некоторые более легкие симптомы могут включать жар, боли и озноб, но также могут привести к более серьезным заболеваниям, таким как пневмония. Человек, у которого пневмония или даже небольшая одышка, может не знать, когда идти в больницу, тем более, что он становится еще более подавленным. Вот почему я создал этот пульсоксиметр с открытым исходным кодом, который может помочь людям получить необходимую помощь и получить точную информацию об их текущем состоянии.

Немного отказа от ответственности

Это устройство / проект нельзя использовать в качестве точного медицинского диагностического инструмента!

Электроника

MAX30102

128x64 пикселей OLED

Ардуино Нано

Пошаговое создание устройства

Вот пошаговое руководство по созданию этого проекта.

Начните с загрузки каждого фрагмента из раздела вложений этого проекта и загрузки его в выбранный вами слайсер. Я использовал заполнение примерно 70-80% и средние опоры, все с PLA. После того, как они были напечатаны, я снял опоры и немного отшлифовал, чтобы убедиться, что все они хорошо сочетаются друг с другом.

2. Припаяйте электронику

Все устройство спроектировано на базе Arduino Nano, которая устанавливается на перфорированной плате размером 44 на 30 мм. Сначала провода припаиваются к контактам VIN, GND, SDA и SCL датчика, а затем проходят под основанием к Arduino Nano.

Затем разъем для OLED подключается к Nano, а затем поднимается к самому дисплею.

И, наконец, вся электроника вставляется в корпус и закрепляется парой винтов диаметром 3 мм.

3. Соберите устройство

После того, как электроника будет вставлена, просто прикрепите OLED-экран к верхней части и прикрепите его к остальной части корпуса с помощью пары 3-миллиметровых винтов. Вы можете проверить его движение, осторожно повернув крышку вверх и вниз.

4. Загрузка эскиза

Прилагаемый скетч выполняет несколько действий, чтобы отобразить текущую частоту сердечных сокращений и насыщение кислородом пользователя. Чтобы загрузить его, просто установите необходимые библиотеки, выберите Arduino Nano из списка плат в меню «Инструменты» и нажмите «Загрузить».

Что касается самого скетча, он сначала инициализирует OLED и MAX30102, сообщая обо всех возможных ошибках. Затем он считывает 100 значений для калибровки датчика и начинает их отображать. Затем устройство входит в цикл, где считывает 25 новых значений и вычисляет с ними скользящее среднее. Наконец, он проверяет правильность значений и, если они, выводит их на экран.

5. Использование

Чтобы использовать пульсоксиметр, поместите кончик пальца на датчик и осторожно закройте верхнюю крышку. Затем подключите источник питания и просто дождитесь отображения данных.

Код

  • Код пульсоксиметра
Код пульсоксиметра C / C ++
 / * Аппаратные соединения (коммутационная плата к Arduino):-5 В =5 В (допускается 3,3 В) -GND =GND -SDA =A4 (или SDA) -SCL =A5 (или SCL) -INT =Не подключен MAX30105 Breakout может обрабатывать логику I2C 5 В или 3,3 В. Мы рекомендуем запитать плату от 5 В, но она также будет работать от 3,3 В. * / # include  #include "MAX30105.h" #include "spo2_algorithm.h" #include "SSD1306Ascii.h" #include "SSD1306AsciiWire .h "MAX30105 particleSensor; SSD1306AsciiWire oled; #define MAX_BRIGHTNESS 255 # если определено (__ AVR_ATmega328P__) || defined (__ AVR_ATmega168 __) // Arduino Uno не имеет достаточного количества SRAM для хранения 50 выборок данных ИК-светодиода и данных красного светодиода в 32-битном формате // Для решения этой проблемы 16-битный старший бит дискретизированных данных будет усечен. Образцы становятся 16-битными data.uint16_t irBuffer [50]; // данные датчика инфракрасного светодиодаauint16_t redBuffer [50]; // данные датчика красного светодиода # elseuint32_t irBuffer [50]; // данные датчика инфракрасного светодиодаauint32_t redBuffer [50]; // данные датчика красного светодиода # endifint32_t spo2; // значение SPO2int8_t validSPO2; // индикатор, показывающий, верен ли расчет SPO2 int32_t heartRate; // значение пульса int8_t validHeartRate; // индикатор, показывающий правильность расчета пульсаvoid setup () {Serial.begin (115200); // инициализируем последовательную связь со скоростью 115200 бит в секунду:oled.begin (&Adafruit128x64, 0x3C); oled.setFont (Arial14); // Инициализируем датчик if (! ParticleSensor.begin (Wire, I2C_SPEED_FAST)) // Использовать порт I2C по умолчанию, скорость 400 кГц {Serial.println (F ("MAX30105 не найден. Пожалуйста, проверьте проводку / питание.")); в то время как (1); } particleSensor.setup (55, 4, 2, 200, 411, 4096); // Сконфигурируйте датчик с этими настройками} void loop () {// считываем первые 50 выборок и определяем диапазон сигнала для (byte i =0; i <50; i ++) {while (particleSensor.available () ==false ) // у нас есть новые данные? ParticleSensor.check (); // Проверяем датчик на наличие новых данных redBuffer [i] =particleSensor.getRed (); irBuffer [я] =ParticleSensor.getIR (); ParticleSensor.nextSample (); // Мы закончили с этим образцом, поэтому переходим к следующему образцу Serial.print (F ("red =")); Serial.print (redBuffer [i], DEC); Serial.print (F (", ir =")); Serial.println (irBuffer [i], DEC); } // вычисляем частоту сердечных сокращений и SpO2 после первых 50 образцов (первые 4 секунды образцов) maxim_heart_rate_and_oxygen_saturation (irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate); // Непрерывный выборка из MAX30102. Частота сердечных сокращений и SpO2 рассчитываются каждую 1 секунду, в то время как (1) {// выгружаем первые 25 наборов образцов в память и сдвигаем последние 25 наборов образцов наверх for (byte i =25; i <50; i ++) {redBuffer [i - 25] =redBuffer [i]; irBuffer [i - 25] =irBuffer [i]; } // берем 25 наборов образцов перед вычислением частоты пульса. for (byte i =25; i <50; i ++) {while (particleSensor.available () ==false) // у нас есть новые данные? ParticleSensor.check (); // Проверяем датчик на наличие новых данных redBuffer [i] =particleSensor.getRed (); irBuffer [я] =ParticleSensor.getIR (); ParticleSensor.nextSample (); // Мы закончили с этим образцом, поэтому переходим к следующему образцу Serial.print (F ("red =")); Serial.print (redBuffer [i], DEC); Serial.print (F (", ir =")); Serial.print (irBuffer [i], DEC); Serial.print (F (", HR =")); Serial.print (частота сердечных сокращений, DEC); Serial.print (F (", HRvalid =")); Serial.print (validHeartRate, DEC); Serial.print (F (", SPO2 =")); Серийный принт (spo2, DEC); Serial.print (F (", SPO2Valid =")); Serial.println (действительныйSPO2, DEC); } // После сбора 25 новых выборок пересчитываем ЧСС и SP02 maxim_heart_rate_and_oxygen_saturation (irBuffer, 50, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate); printToScreen (); }} void printToScreen () {oled.clear (); oled.setCursor (0,0); если (validSPO2 &&validHeartRate) {oled.print (F ("HR:")); oled.println (частота сердечных сокращений, DEC); oled.print (F ("SPO2:")); oled.println (spo2, DEC); } else {oled.print (F ("Недействительно")); }} 

Изготовленные на заказ детали и корпуса

Схема


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

  1. Журнал проекта для FirePick Delta, MicroFactory с открытым исходным кодом
  2. Цифровые игральные кости Arduino
  3. Железный человек
  4. Найди меня
  5. Роботизированная рука, напечатанная на 3D-принтере Arduino
  6. ОКСИМЕТР ИМПУЛЬСА для АВАРИЙНОГО ПРИМЕНЕНИЯ во время болезни КОРОНАВИРУСА
  7. Управление увлажнителем Arduino
  8. NeoMatrix Arduino Pong
  9. Health Band - умный помощник для пожилых людей
  10. Необходимость открытого исходного кода на периферии (электронная книга)