Бібліотека Arduino для моніторингу серцевого ритму за допомогою пульсоксиметра

Бібліотека Arduino для моніторингу серцевого ритму за допомогою пульсоксиметра

Бібліотека Arduino для моніторингу серцевого ритму за допомогою пульсоксиметра

Один із параметрів, який відстежується в моєму проекті керування сном

Це пульс. щоб виміряти його Я розробив пристрій, заснований на поведінці гемоглобіну та оксигемоглобіну проти різних довжин хвиль світла. В основному мова йде про вимірювання того, скільки світла певного типу здатне проходити або відбиватися на добре зрошуваній ділянці тіла. Частота, з якою відбувається повний цикл цього явища, дозволяє виміряти Pulso.

Зміст

    На етапі проектування та тестування прилад для вимірювання пульсу Я розробив кілька невеликих програм, щоб допомогти мені перевірити правильність збірки. Спочатку я написав наведений нижче код, який час від часу брав виміряні значення (принаймні кожен MAXIMUM_MEASUREMENT_TIME і не більше кожного MINIMUM_MEASUREMENT_TIME), коли вони коливалися мінімум між одним і попереднім (значення, яке відповідає MINIMUM_SIZE) та відстежується з комп’ютера за допомогою програми Python щоб мати можливість проаналізувати їх пізніше.

    Коли значення були скориговані (починаючи з дуже щільних вимірювань), я отримав колекцію значень із пульсоксиметр з часом я міг побудувати графік за допомогою електронної таблиці, LibreOffice Calc de LibreOffice, специфічний.

    графік вимірів пульсоксиметра с

    Після зібраних даних, як показано на зображенні вище, наступною операцією було визначити, чи дозволяє щільність значень обчислити надійним, але «економічним» способом (без вибірки більше, ніж необхідні дані) значення Pulso; Як видно на графіку нижче, вжиті заходи, здавалося, сприяли отриманню результатів, яких розумно очікувати.

    .

    вимірювання наявності оксигемоглобіну в часі за допомогою пульсоксиметра

    Далі, на основі інформації із вибірки даних, необхідно було розробити алгоритм, який би вимірював частоту пульсу. Дотримуючись графіка, для простоти передбачається, що він представляє макет, подібний до Комплекс QRSнайпростішим здається виміряти час між найбільш виступаючими частинами, з більш високими значеннями (які відповідають зоні qRs деполяризації шлуночків), відкидаючи більш плоску та «шумнішу» зону, яку, отже, важче визначити міра. Прийняте рішення, яке відповідає наведеному нижче тестовому коду, працює за такою процедурою:

    • Визначте площу, яка вимірюється в кожному випадку, щоб звернути увагу лише на піки значень qRs і викинути долину. Для цього можна виміряти значення, вищі за певну константу, але існує ризик того, що особа та/або обставини можуть, хоча й пропорційно, підвищити або знизити значення. Щоб цього уникнути, значення в області вважається більшим за те, що на певний коефіцієнт перевищує середнє значення. Таким чином, вимірювання чутливо самокалібрується і може бути скориговано ще далі шляхом точного налаштування коефіцієнта, чого в моєму випадку я досяг експериментально під час тестів.

      Виберіть значення спадної зони для вимірювання (Rs) піку qRs, якомога ближче до максимуму кривої. Щоб знати, що висхідна зона покинута, достатньо переконатися, що нове значення менше попереднього, і переконатися, що шукане значення ще не знайдено, оскільки, загалом, у спадній є кілька значень. зона о qRs в залежності від щільності вибірки. Для визначення часу імпульсу зберігається значення моменту, коли було знайдено точку (мілісекунди, повернуті міліс ()) і порівнює його з наступним.

      Щоб переконатися, що виміряне значення є найбільшим у низхідній зоні найвищої кривої, використовується змінна логічний (вимірювати_пульс в цьому прикладі і активне_вимірювання_пульсу у бібліотеці), який активується при вході в зону зростання головної кривої та дезактивується, коли знайдено перше спадне значення, яке є часовим.

      Оскільки прийнято представляти тривалість пульсу як ударів на хвилину (ppm), отримане значення часу між імпульсами коригується шляхом обчислення шляхом ділення загального часу представлення (одна хвилина 60000 XNUMX мілісекунд) на інтервал, отриманий за допомогою віднімаючи поточні мілісекунди (з поточного значення) серед попередньо визначених.

      Щоб уникнути помилкових вимірювань (наприклад, вимірювання пристрою у вакуумі), перевіряється, що результат знаходиться між максимальним і мінімальним значеннями, перш ніж приймати його як належне. Незважаючи на те, що вважається середнім, що нормальне значення для здорової дорослої людини в спокої становить від 60 до 100 ppm, є допустимі значення нижче, легко знайти 40 ppm у спортсмена в спокої, до 200 ppm під час інтенсивні фізичні вправи тощо 100 ppm у сидячих дорослих у стані збудження, що є цікавим фактором для проекту управління сном що спонукає мене розвивати це прилад для вимірювання пульсу. З цієї причини доцільно значно послабити ці значення, щоб не втратити крайності, які могли б точно показати відповідні аспекти.

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

    Нарешті, використовуючи описаний раніше алгоритм, я розробив бібліотеку для обчислення пульсу шляхом виявлення присутності гемоглобін O оксигемоглобін (залежно від довжини хвилі світла, що використовується) з наведеного нижче коду.

    Бібліотека очікує періодичного виклику функції вибірки monitor_pulse() для обчислення пульсу, який можна переглянути за допомогою функції last_pulse() або з функцією середній_пульс() середній пульс. Окрім того, що це обмежений ресурс, я виключив використання переривань, оскільки мені потрібні були не миттєві значення, а скоріше стійкі з часом для моніторингу Pulso у моєму проекті керування сном

    . У будь-якому випадку, з тестів, які я зробив, це не здається необхідним; або через пристрій, або через поведінку Pulso, вибірка з певною частотою пропонує достатньо інформації, і не набагато більше (релевантне) отримується шляхом її збільшення, також неможливо значно зменшити її без втрати відповідних даних для розрахунку; у ранніх версіях коду для моніторингу читання пульсоксиметр Я виявив, що немає необхідності дотримуватися максимального часу вимірювання, оскільки, якщо варіації послідовних значень були правильно враховані, він був дуже близький до мінімального.

    Наступний приклад програми показує, як використовувати попередню бібліотеку для вимірювання Pulso з одного пульсоксиметр. На додаток до створення екземпляра класу Пульсо моніторинг рівня оксигемоглобін/гемоглобін і з меншою періодичністю значення в Pulso розрахунковий і середній.

    Щоб гарантувати релевантність вимірювань, перед відображенням будь-якого значення запрограмовано очікування. Оскільки значення може бути неправильним (наприклад, якщо користувач видаляє пристрій), значення відображаються, лише якщо вони знаходяться в діапазоні тих, що вважаються дійсними.

    Дати коментар

    Можливо, ви пропустили