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

Настоящий самодельный датчик оксиметра

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

Инфракрасный излучатель, 18 °
Длина волны от 805 до 1000 нм
× 1
Фотодиод LPT80A
Требуется фотодиод широкого диапазона, он должен принимать оба красных сигнала (600 нм) и инфракрасные сигналы (940 нм).
× 1
5 мм светодиод:красный
Длина волны около 600 нм
× 1
Резистор 10 кОм
× 1
Резистор 330 Ом
× 2
Модуль ЖК-дисплея Arduino DFRobot I2C 16x2
Или другой ЖК-дисплей для отображения значений.
× 1
Arduino UNO
× 1
Перемычки (общие)
× 1
Светодиод высокой яркости, белый
Необязательный третий светодиод, см. раздел улучшения проекта
× 1

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

Жало паяльника, крыло чайки

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

IDE Arduino

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

В этот период изоляции я построил оксиметр, детали которого уже находятся в доме. В конце концов, оксиметр - это всего лишь два светодиода и фотодиод.

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

Насыщение кислородом и COVID-19

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

Этот показатель можно косвенно считать с помощью медицинского устройства под названием Оксиметр . . Вы, наверное, уже видели это, это неинвазивное устройство, которое помещается на палец с пульсирующими лампочками, которые выполняют свою работу. Как это:

Обычно, когда вы в порядке, ваш процент насыщения кислородом (SpO2) близок или больше 95%. Когда сатурация опускается ниже 90% и у вас появляется кашель и жар, это становится проблемой.

Если бы какой-либо производитель смог построить оксиметр, было бы легче обнаружить инфекцию и помочь людям принять решение о том, чтобы обратиться в больницу, когда проблема действительно существует, а не для панической атаки.

Во-первых, разберитесь, как работает датчик сердцебиения

Я начал этот проект, играя с датчиком сердцебиения KY-039, который я нашел в комплекте датчика, который у многих из нас есть дома. Как вы можете видеть на схеме ниже, это всего лишь инфракрасный светодиод, который освещает фотодиод. Также есть два резистора для защиты светодиода и считывания слабого сигнала датчика.

Поэтому, если у вас нет датчика KY-039, вы можете создать свой собственный датчик из нескольких компонентов.

Палец помещается между датчиком и фотодиодом, как на этой фотографии (изначально взято с этого сайта и изменено):

Свет, излучаемый инфракрасным светодиодом, частично поглощается ногтем, кожей и всеми другими частями вашего пальца, но он не является постоянным, потому что он изменяется вслед за изменениями крови, текущей в ваших венах. Когда ваше сердце бьется, кровь течет по венам и изменяется поглощение света. Мы можем измерить ток, генерируемый фотодиодом, освещенным достигающим его инфракрасным светом.

Датчик KY-039 имеет S (сигнал), чтобы прочитать это изменяющееся значение.

Мы можем измерить частоту сердечных сокращений, подсчитав пики сигнала

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

Я должен поблагодарить этот полезный пост от Йохана Ха, в котором объясняется, как рассчитать среднее значение сигнала, а также объясняется, как удалить шум, создаваемый домашней лампой (этот свет - это шум!).

Уловка состоит в том, чтобы создать массив, в который мы помещаем значение и отбрасываем значение, чтобы среднее значение последних X значений считывалось с датчика. Он также описывает способ определения нарастания сигнала путем подсчета N возрастающих значений. Я имею в виду, когда значение больше предыдущего в N раз, это пик.

Используя инструмент Arduino Serial plot или другой последовательный инструмент для анализа значений, напечатанных на COM-порту (например, SerialPlot), и пробуя разные значения, мы можем определить правильное число N ( rise_threshold постоянный код). Если вы определите число слишком большим или слишком маленьким, вы можете пропустить несколько ударов или посчитать дикротическую метку как бить.

Как только вы поймете, как точить пики, просто подсчитайте их или вычислите время между небольшой серией ударов, чтобы определить свой BPM скорость ( ударов в минуту ).

Создание оксиметра (взлом датчика KY-039) для определения насыщения кислородом

Наша кровь по-другому поглощает свет с изменением длины световой волны. Красный свет ( ~ 600 нм ) лучше поглощается кровью, содержащей больше кислорода, поэтому мы можем сравнить измерения, сделанные с помощью инфракрасного светодиода ( ~ 950 нм ) с помощью индикаторов, сделанных с красным светом, и определите процентное содержание кислорода в нашей крови. Это значение называется Sp02% . ( насыщение кислородом периферических капилляров ).

Поскольку у меня есть датчик KY-039, я решил его доработать. У него только инфракрасный светодиод, поэтому я добавил КРАСНЫЙ светодиод, отключите ИК светодиод от Vcc и подключите с помощью 330 Ом подключите два светодиода к двум разным контактам Arduino.

(Если у вас нет датчика KY-039 для модификации, вы можете его построить, это всего лишь пара светодиодов, фотодиод и 3 резистора, а схема очень проста!)

Вот схема модифицированного датчика:

Таким образом мы можем включить ИК светодиод и считайте значение из KY-039 S булавкой, то мы можем выключить ИК светодиодный индикатор и включите КРАСНЫЙ светодиода и считайте значение из KY-039 S булавка.

Вот оно мое:

Если вы построите график двух сигналов, вы увидите, что значения IR всегда ниже, чем значения красного.

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

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

Как измеряется сатурация SpO2%

Уровень насыщения кислородом (SpO2) представляет собой долю насыщенного кислородом гемоглобина по отношению к общему гемоглобину и является функцией параметра, называемого R . (Я нашел эту информацию в академической статье Миланского политехнического университета), которая рассчитывается с использованием минимальных и максимальных значений двух сигналов:

R =((REDmax-REDmin) / REDmin) / ((IRmax-IRmin) / IRmin)

Каждому инструменту соответствует свой R и необходима калибровка, чтобы найти кривую (функцию), которая связывает R с SpO2%.

Мы посчитали количество пиков, но теперь нам нужно найти max и мин значения двух кривых ( КРАСНЫЙ светодиод и ИК светодиод).

Для выполнения этой работы мы оцениваем «период» сердцебиения (то есть, сколько миллисекунд длится удар) и делим его на частоту дискретизации, чтобы определить, сколько отсчетов составляют период. Частота дискретизации в нашем случае составляет 40 миллисекунд, потому что мы считываем ИК-индикатор в течение 20 миллисекунд, а затем КРАСНЫЙ индикатор еще 20 миллисекунд.

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

Так что я могу проанализировать последний L образцы (где L =период / 40), которые я сохранил в массиве, чтобы найти REDmax , REDmin , IRmax и IRmin ценности.

С максимальным и минимальным значениями я могу вычислить R .

R, L и период рассчитываются для каждого удара, поэтому расчет R также выполняется для каждого удара.

От R до SpO2%:как откалибровать оксиметр?

Функция, связывающая R с SpO2 можно упростить прямой линией:

SpO2 =K * R + M

Итак, нам нужны две точки (две пары значений SpO2 и R) для определения K и M. Единственный способ найти эти 2 точки - использовать другой оксиметр и прочитать значения с его дисплея.

Новый оксиметр будет эталоном, мы считываем значение SpO2 при измерении значений R на нашем самодельном оксиметре.

Сначала вдохните нормально и прочтите значение SpO2 и R. Запишите его.

Затем попытайтесь задержать дыхание, и через 10-20 секунд вы увидите, что SpO2 на новом оксиметре уменьшается, вы также должны увидеть, что параметр R вашего оксиметра растет. Перед обмороком запишите достигнутые значения SpO2 и значение вашего параметра R.

Решите уравнение 2-й степени и найдите K и M для вашего оксиметра.

Теперь можно рассчитать как уд / мин и SpO2 значения для каждого показателя R .

Я также добавил дисплей для отображения всех чисел, я показываю значения только в том случае, если я нашел хотя бы 5 мер периодов, которые не слишком сильно меняются (± 10% длины периода). Таким образом я удаляю значения, которые слишком сильно меняются в зависимости от плохих компонентов, изменения внешнего освещения или движения пальцев.

c value указывает, что показанные значения рассчитаны с помощью c стабильные меры.

Улучшение проекта:убрать изменчивость внешнего освещения

После нескольких дней работы с моим проектом я нашел способ улучшить его.

Я заметил, что с этими недорогими компонентами (мы используем только светодиоды и фотодиод!) Меры слишком сильно зависят от окружающего света, и это нехорошо, если мы хотим правильно читать данные в реальном времени. рабочая обстановка. Поскольку я заметил, что в солнечный день результаты лучше, чем при облачном свете или вечером, когда я использую электрическую лампу, я решил добавить третий светодиод, который всегда включен и обеспечивает только свет на палец. .

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

Теперь результаты лучше и больше не зависят от окружающего освещения.

Мне также пришлось повторно откалибровать оксиметр, как видно из видео, через несколько секунд он правильно определил ударов в минуту . и SpO2% :


Код

  • оксиметр-diy-ver-0.92.ino
oximeter-diy-ver-0.92.ino Arduino
Это исходный код оксиметра DIY, который состоит из нескольких компонентов, которые производитель может иметь дома.
 / * * оксиметр своими руками. v.0.92 (мелкие исправления) * путем взлома датчика сердцебиения ky-039 или использования инфракрасного светодиода * красного светодиода и фотодиода. * https://hackaday.io/project/170752-oximeter-do-it-yourself * / # include  #include  #define maxperiod_siz 80 // максимальное количество выборок за период # define measure 10 // количество хранимых периодов # define samp_siz 4 // количество выборок для среднего # define rise_threshold 3 // количество возрастающих мер для определения пика // жидкий кристалл отображает BPM LiquidCrystal_I2C lcd (0x3F, 16, 2); int T =20; // интервал в миллисекундах для чтения значения из сенсора sensorPin =A1; int REDLed =3; int IRLed =4; byte sym [3] [8] ={{B00000, B01010, B11111, B11111, B01110, B00100, B00000, B00000}, {B00000, B00000, B00000, B11000, B00100, B01000 , B10000, B11100}, {B00000, B00100, B01010, B00010, B00100, B00100, B00000, B00100}}; void setup () {Serial.begin (9600); Serial.flush (); pinMode (sensorPin, ВХОД); pinMode (КРАСНЫЙ СВЕТОДИОД, ВЫХОД); pinMode (IRLed, ВЫХОД); // инициализируем ЖК-дисплей lcd.init (); lcd.backlight (); // выключить светодиоды digitalWrite (REDLed, LOW); digitalWrite (IRLed, LOW); for (int i =0; i <8; i ++) lcd.createChar (i, sym [i]);} void loop () {bool finger_status =true; float readsIR [samp_siz], sumIR, lastIR, reader, начало; float readsRED [samp_siz], sumRED, lastRED; int период, выборки; период =0; образцы =0; int samplesCounter =0; float читаетIRMM [maxperiod_siz], читаетREDMM [maxperiod_siz]; int ptrMM =0; for (int i =0; i  =samples) {samplesCounter =0; IRmax =0; IRmin =1023; REDmax =0; REDmin =1023; for (int i =0; i  IRmax) IRmax =readsIRMM [i]; if (readsIRMM [i]> 0 &&readsIRMM [i]  REDmax) REDmax =читаетREDMM [i]; if (читаетREDMM [i]> 0 &&читаетREDMM [i]  4) {// // НАСЫЩЕНИЕ ЯВЛЯЕТСЯ ФУНКЦИЕЙ R (калибровка) // Y =k * x + m // k и m вычисляются с другой оксиметр int SpO2 =-19 * R + 112; lcd.setCursor (4,0); если (avBPM> 40 &&avBPM <220) lcd.print (String (avBPM) + ""); // иначе lcd.print ("---"); lcd.setCursor (4,1); если (SpO2> 70 &&SpO2 <150) lcd.print ("" + Строка (SpO2) + "%"); // иначе lcd.print ("-%"); } else {if (c <3) {// если меньше 2 мер добавить? lcd.setCursor (3,0); lcd.write (2); // уд / мин? lcd.setCursor (4,1); lcd.write (2); // SpO2? }}}} else {// Хорошо, кривая падает вверх =false; rise_count =0; lcd.setCursor (3,0); lcd.print (""); } // чтобы сравнить его с новым значением и найти пики до IR =lastIR; } // палец находится внутри // УЧИТЫВАЙТЕ все Serial.print (lastIR); Serial.print (","); Serial.print (lastRED); / * * Serial.print (","); Серийный принт (R); Serial.print (","); Серийный принт (IRmax); Serial.print (","); Serial.print (IRmin); Serial.print (","); Серийный принт (REDmax); Serial.print (","); Serial.print (REDmin); Serial.print (","); Serial.print (avR); Serial.print (","); Serial.print (avBPM); * / Serial.println (); // обрабатываем массивы ptr ++; ptr% =samp_siz; } // цикл while 1} 

Схема

В моем проекте я модифицировал KY-039, но этот датчик недоступен в библиотеке fritzing, поэтому я построил его с несколькими компонентами, из которых он сделан, но я не нашел подходящий фотодиод в библиотеке fritzing. oximeter-diy_oW9ZI5zQtJ.fzzПростой оксиметр для измерения содержания кислорода в крови можно сделать взломав датчик KY-039 или построив датчик с нуля,

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

  1. Схема энергосбережения на основе инфракрасного датчика и работа
  2. Выбор длины волны в системах LiDAR
  3. Самодельная инфракрасная система датчиков движения для Raspberry Pi
  4. Датчик движения с использованием Raspberry Pi
  5. Датчик влажности почвы Raspberry Pi
  6. Тест датчика DS18B20
  7. Датчик температуры Raspberry Pi
  8. Сенсорная телеметрия 2.0.1
  9. Датчик эмоций / ЭЭГ
  10. Измерение температуры инфракрасным датчиком