Библиотека Arduino за наблюдение на сърдечната честота с пулсов оксиметър

Библиотека Arduino за наблюдение на сърдечната честота с пулсов оксиметър

Библиотека Arduino за наблюдение на сърдечната честота с пулсов оксиметър

Един от параметрите, наблюдавани в моя проект за управление на съня

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

Съдържание

    Във фазата на проектиране и тестване на устройство за измерване на пулса Разработих няколко малки програми, които да ми помогнат да проверя дали асемблирането е правилно. Първо написах кода по-долу, който вземаше измерените стойности от време на време (поне всеки MAXIMUM_MEASUREMENT_TIME и най-много всеки MINIMUM_MEASUREMENT_TIME), когато варираха минимум между едно и предишното (стойността, която съответства на MINIMUM_SIZE) и наблюдавани от компютър с приложение на Python за да можете да ги анализирате по-късно.

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

    графика на измерванията с пулсов оксиметър

    Със събраните данни, както е представено на изображението по-горе, следващата операция беше да определим дали плътността на стойностите ни позволява да изчислим по надежден, но „икономичен“ начин (без вземане на проби от повече от необходимите данни) стойността на пулс; Както може да се види на графиката по-долу, предприетите мерки изглежда служат за постигане на разумно очакваните резултати.

    .

    измерване на наличието на оксихемоглобин във времето с пулсов оксиметър

    След това, с информацията от вземането на проби от данни, беше необходимо да се разработи алгоритъм, който да измерва пулса. Придържайки се към графиката, че за простота се приема, че тя представлява оформление, подобно на QRS комплекс, най-простото нещо изглежда е да се измерят времената между най-изпъкналите части, с по-високи стойности (което съответства на qRs зоната на деполяризация на вентрикулите), като се изхвърли по-плоската и "по-шумна" зона, която следователно е по-трудна за измерване. Приетото решение, което съответства на тестовия код по-долу, работи съгласно следната процедура:

    • Открийте зоната, която се измерва във всеки случай, за да обърнете внимание само на пиковете на стойността qRs и изхвърлете долината. За да направите това, могат да бъдат измерени стойности, по-високи от определена константа, но съществува риск индивидът и/или обстоятелствата да могат, макар и пропорционално, да повишат или понижат стойностите. За да се избегне това, стойността в областта се счита за по-голяма от тази, която надвишава средната стойност с определен коефициент. По този начин измерването е чувствително самокалибрирано и може да бъде коригирано още повече чрез фина настройка на коефициента, което в моя случай постигнах експериментално по време на тестовете.

      Изберете стойностите на низходящата зона за измерване (Rs) на върха qRs, възможно най-близо до максимума на кривата. За да разберете, че възходящата зона е изоставена, достатъчно е да проверите дали новата стойност е по-малка от предишната и да проверите дали търсената стойност все още не е намерена, тъй като по принцип има няколко стойности в низходящ зона на qRs в зависимост от плътността на вземане на проби. За време на импулса се съхранява стойността на момента, в който е намерена точката (милисекундите, върнати от милис ()) и го сравнява със следващия.

      За да се гарантира, че измерената стойност е най-голямата в низходящата зона на най-високата крива, се използва променлива булево (измерване_импулс в този пример и активно_измерване_на_пулса в библиотеката), който се активира при влизане във възходящата зона на основната крива и се деактивира, след като бъде открита първата низходяща стойност, която е времевата.

      Тъй като е обичайно да се представя продължителността на импулса като удари в минута (ppm), получената стойност на времето между импулсите се коригира чрез изчисляване чрез разделяне на общото време на представянето (една минута, 60000 XNUMX милисекунди) на интервала, получен от изваждане на текущите милисекунди (от текущата стойност) от предварително измерените.

      За да се избегнат фалшиви измервания (като устройството, измерващо във вакуум, например), се проверява дали резултатът е между максималните и минималните стойности, преди да се приеме за даденост. Въпреки че се счита за средна, че нормалната стойност за здрав възрастен в покой е между 60 и 100 ppm, има допустими стойности по-долу, лесно е да се намерят 40 ppm при спортист в покой, до 200 ppm по време на интензивни упражнения и други от 100 ppm при заседнали възрастни в състояния на възбуда, точно интересен фактор за проекта за управление на съня което ме кара да развия това устройство за измерване на пулса. Поради тази причина е препоръчително тези стойности да се отпуснат много, така че крайностите да не се губят, което би могло да покаже точно съответните аспекти.

      Новата средна стойност се изчислява чрез намаляване на уместността на текущата средна стойност на базата на броя на пробните стойности и се добавя последната стойност, също претеглена с коефициент, който я намалява допълнително, колкото повече стойности са били измерени досега .

    Накрая, използвайки алгоритъма, описан по-горе, разработих библиотеката за изчисляване на импулса чрез откриване на наличието на хемоглобин о ла оксихемоглобин (в зависимост от дължината на вълната на използваната светлина) от кода по-долу.

    Библиотеката очаква функцията за вземане на проби да се извиква периодично monitor_pulse() за изчисляване на пулса, който може да се консултира с функцията last_pulse() или с функцията среден_пулс() средният пулс. Освен че е ограничен ресурс, изключих използването на прекъсвания, защото нямах нужда от незабавни стойности, а по-скоро от устойчиви във времето, за да наблюдавам пулс в моя проект за управление на съня

    . Във всеки случай, от тестовете, които направих, не изглежда да е необходимо; или от устройството, или от поведението на пулс, вземането на проби при определена честота предлага достатъчно информация и не се получава много повече (релевантно) чрез нейното увеличаване, нито е възможно да се намали много, без да се загубят съответните данни за изчислението; в ранните версии на кода за наблюдение на четенето на пулсов оксиметър Открих, че не е необходимо да се придържаме към максималното време за измерване, тъй като, ако вариациите на последователните стойности бяха правилно отчетени, то беше много близо до минимума.

    Следната примерна програма показва как да използвате предишната библиотека за измерване на пулс с пулсов оксиметър. В допълнение към инстанцирането на класа китка мониторинг на нивото на оксихемоглобин/хемоглобин а с по-малка периодичност стойността на пулс изчислено и средно.

    За да се гарантира, че измерванията са уместни, се програмира изчакване, преди да се покаже каквато и да е стойност. Тъй като стойността може да е неправилна (например ако потребителят премахне устройството), стойностите се показват само ако са в обхвата на считаните за валидни.

    Публикувай коментар

    Може да сте пропуснали