- МАКС30100 сензор
- Потребне компоненте
- Повезивање оксиметра МАКС30100 са ЕСП32
- Адафруит ИО са ЕСП32 за праћење срчане фреквенције
- Објашњење кода
- Демонстрација пулс оксиметра заснована на ИоТ-у
Пулсна оксиметрија је широко коришћен медицински инструмент за мерење и неинвазиван је и безболан тест који мери ниво засићености кисеоником у нашој крви који лако може открити мале промене у кисеонику. У тренутној ситуацији са Цовид-19 постало је важно пратити ниво кисеоника више пацијената истовремено на даљину, без контакта са пацијентом.
Дакле, у овом пројекту градимо пулсни оксиметар користећи пулсни оксиметар МАКС30100 и ЕСП32 који ће пратити ниво кисеоника у крви и слати податке путем Интернета повезивањем на Ви-Фи мрежу. На овај начин можемо даљински надгледати више пацијената одржавајући социјалну дистанцу са пацијентима. Добијени подаци биће приказани у облику графикона који олакшава праћење и анализу стања пацијента. Раније смо изградили и друге мониторе срчане фреквенције помоћу импулсних сензора. А ако сте заинтересовани за друге пројекте повезане са Цовид-19, можете погледати термометар за људско тело, паметни ИР термометар за праћење грознице и скенер за температуру на зиду који смо раније направили.
Осим апликације Цовид-19, овај пројекат се такође може широко користити код хроничне опструктивне болести плућа (ХОБП), астме, упале плућа, карцинома плућа, анемије, срчаног или срчаног затајења или код урођених срчаних мана.
Имајте на уму да сензор који се користи у овом пројекту није медицински оцењен и пројекат није тестиран на примене отпорне на кварове. Увек користите пулсни оксиметар са медицинском оценом да бисте одредили ниво пулса и кисеоника пацијента и разговарајте о томе са лекаром. Овде се говори о пројекту само у образовне сврхе.
МАКС30100 сензор
МАКС30100 сензор је интегрисана пулсна оксиметрија и модул за надзор пулса. Комуницира са И2Ц линијом података и пружа информације СпО2 и Пулсе главној јединици микроконтролера. Користи фотодетекторе, оптичке елементе где црвени, зелени ИР ЛЕД модулира ЛЕД импулсе. ЛЕД струја се може конфигурисати од 0 до 50мА. На доњој слици је приказан сензор МАКС30100.
Горњи сензорски модул ради са 1,8 В до 5,5 В опсега. Вучни отпорници за И2Ц пинове су укључени у модул.
Потребне компоненте
- ВиФи веза
- ЕСП32
- МАКС30100 сензор
- ИД корисника Адафруит ИО и прилагођена контролна табла (напредоваће)
- Адекватна јединица за напајање од 5В са номиналном струјом од најмање 1А
- УСБ кабл Мицро УСБ на УСБА
- ПЦ са Ардуино ИДЕ са програмским окружењем ЕСП32.
Повезивање оксиметра МАКС30100 са ЕСП32
Комплетна шема кола за МАКС30100 са ЕСП32 дата је у наставку.
Ово је врло једноставна шема. Пин 21 и 22 ЕСП32 девкит-а Ц повезани су сензором пулсног оксиметра МАКС30100 са СДА и СЦЛ пиновима. Оксиметар се такође напаја 5В пином на развојној плочи ЕСП32. Повезао сам се помоћу плоче за повезивање и повезивања жица и подешавање тестирања изгледа овако
Адафруит ИО са ЕСП32 за праћење срчане фреквенције
Претходно смо изградили многе Адафруит ИО пројекте за различите ИоТ апликације. Адафруит ИО је изврсна платформа на којој се може направити прилагођена контролна табла. Да бисте креирали прилагођену контролну таблу за сензор пулс-оксиметра заснован на ИоТ-у, користите кораке у наставку -
Корак 1: Прво се пријавите у адафруит ИО након давања имена Фист, презимена, адресе е-поште, корисничког имена и лозинке.
Корак 2: Празан прозор контролне табле отвориће се након што се поступак пријављивања заврши. У овом сегменту мораћемо да направимо контролну таблу за приказ података на разне начине. Стога је време да направите нову контролну таблу и наведете назив контролне табле и опис.
Корак 3: Након попуњавања горњег обрасца, време је да направите графикон и контролни одељак за сензор.
Изаберите блок прекидача. Биће потребно за УКЉУЧИВАЊЕ или ИСКЉУЧИВАЊЕ сензора пулс-оксиметра.
Корак 4: Запишите име блока. Као што видимо на горњој слици, функција пребацивања пружа два стања, УКЉУЧЕНО и ИСКЉУЧЕНО. У истом процесу изаберите блок графикона.
Овај одељак графа треба одабрати два пута јер ће се приказати два графикона, Хеарт бит и СпО2. Оба одељка су створена. Као што видимо, одабрали смо све улазне и излазне функције.
Корак 5: Следећи и последњи корак је поседовање кључа адафруит. Као што видимо, добијамо кључ адафруит и то треба додати у код.
Адафруит ИО је сада конфигурисан. Време је да припремимо хардвер и направимо фирмвер за овај пројекат.
Објашњење кода
Овај код користи многе библиотеке и све су важне. Библиотеке су МАКС30100 библиотека сензора пулсног оксиметра, Вире.х за И2Ц, ВиФи.х за подршку повезану са ВиФи-јем у ЕСП32, Адафруит МКТТ и МКТТ Цлиент библиотека. Комплетан програм можете пронаћи на дну ове странице.
Горе поменуте библиотеке налазе се на почетку кода.
#инцлуде
Следеће две дефиниције су ВЛАН ССИД и ВЛАН лозинка. Ово мора бити тачно и користиће га ЕСП32 за повезивање са ВиФи мрежом.
#дефине ВЛАН_ССИД "ккккккккк" #дефине ВЛАН_ПАСС "2581ккккк2"
Затим смо дефинисали дефиниције Адафруит ио.
#дефине АИО_УПДАТЕ_РАТЕ_СЕЦ 5 #дефине АИО_СЕРВЕР "ио.адафруит.цом" #дефине АИО_СЕРВЕРПОРТ 1883 #дефине АИО_УСЕРНАМЕ "ккккккккккккк" #дефине АИО_КЕИ "абцдефгх"
Брзина ажурирања ажурираће податке на сваких 5 секунди, сервер ће бити ио.адафруит.цом са серверским портом од 1883. Корисничко име и лозинка биће генерисани корисничко име и лозинка са надзорне табле Адафруит ИО. За све ће бити различито и треба га генерисати како је описано у одељку за подешавање адафрута.
И2Ц портови су накнадно дефинисани као што је приказано у шеми.
#дефине И2Ц_СДА 21 #дефине И2Ц_СЦЛ 22
Даље, три променљиве се користе за чување последњег извештаја и вредности бпм и спо2.
уинт32_т тсЛастРепорт = 0; плутајуће бпм_дт = 0; плутајуће спо2_дт = 0;
МКТТ ради са пуб-суб моделом (објавите и претплатите се). У овом моделу рада, уређај који доставља податке серверу Адафруит остаје у режиму објављивања где се Адафруит ИО сервер претплаћује на исте тачке података. У том смислу, кад год уређај објави нове податке, сервер, будући да је на њих претплаћен, прима податке и пружа потребне радње.
Иста ствар се дешава када сервер објави податке, а уређај се претплати на њих. У нашој апликацији уређај шаље серверу податке СПО2 и БПМ, па их објављује и прима ОН-ОФФ стање од сервера, претплаћујући се на овај. Ова ствар је конфигурисана у исечку кода описаном доле -
ВиФиЦлиент клијент; Адафруит_МКТТ_Цлиент мктт (& клијент, АИО_СЕРВЕР, АИО_СЕРВЕРПОРТ, АИО_УСЕРНАМЕ, АИО_КЕИ); Адафруит_МКТТ_Субсцрибе св_суб = Адафруит_МКТТ_Субсцрибе (& мктт, АИО_УСЕРНАМЕ "/ феедс / свитцх"); // Обавештавамо да МКТТ путање за АИО следе образац:
У функцији подешавања покрећемо И2Ц, повезујемо ВиФи са унапред дефинисаним ССИД-ом и лозинком и започињемо поступак претплате на МКТТ за стање прекидача (дугме за пребацивање креирано на контролној табли Адафруит ИО).
воид сетуп () {Сериал.бегин (115200); Вире.бегин (И2Ц_СДА, И2Ц_СЦЛ); ВиФи.бегин (ВЛАН_ССИД, ВЛАН_ПАСС); вхиле (ВиФи.статус ()! = ВЛ_ЦОННЕЦТЕД) {кашњење (500); Сериал.принт ("."); } Сериал.принтлн (); Сериал.принтлн („ВиФи повезан“); Сериал.принтлн ("ИП адреса:"); Сериал.принтлн (ВиФи.лоцалИП ()); мктт.субсцрибе (& св_суб); Сериал.принт („Иницијализација пулсног оксиметра..“); // Иницијализација инстанце ПулсеОкиметер // Кварови су углавном последица неправилног ожичења И2Ц, недостатка напајања // или погрешног циљног чипа ако (! Пок.бегин ()) {Сериал.принтлн ("ФАИЛЕД"); за(;;); } елсе {Сериал.принтлн ("УСПЕХ"); } // Подразумевана струја за ИР ЛЕД је 50мА и може се променити // тако што ћете коментарисати следећи ред. Проверите МАКС30100_Регистерс.х за све // доступне опције. богиње.сетИРЛедЦуррент (МАКС30100_ЛЕД_ЦУРР_7_6МА); // Регистровање повратног позива за откривање откуцаја пок.сетОнБеатДетецтедЦаллбацк (онБеатДетецтед); стопРеадПОКС (); }
После свега овога, мак30100 се покреће са подешавањем лед струје. Различите тренутне поставке су такође доступне у заглавним датотекама МАКС30100 за различите конфигурације. Покренута је и функција повратног позива за откривање откуцаја срца. Након свих ових подешавања, сензор оксиметра се зауставља.
У функцији петље покреће се МКТТ веза и модел претплате се проверава на сваких 5000 милисекунди. У овој ситуацији, ако је прекидач укључен, почиње да чита сензор оксиметра и објављује податке откуцаја срца и вредности СПО2. Ако је прекидач искључен, обуставља све задатке у вези са сензором пулсног оксиметра.
петља воид () {МКТТ_цоннецт (); Адафруит_МКТТ_Субсцрибе * претплата; вхиле ((субсцриптион = мктт.реадСубсцриптион (5000))) {иф (субсцриптион == & св_суб) {Сериал.принт (Ф ("Гот:")); Сериал.принтлн ((цхар *) св_суб.ластреад); иф (! стрцмп ((цхар *) св_суб.ластреад, "ОН")) {Сериал.принт (("Стартинг ПОКС…")); стартРеадПОКС (); БасеТипе_т кРетурнед; иф (покРеадТаскХлд == НУЛЛ) {кРетурнед = кТаскЦреате (покРеадТаск, / * Функција која имплементира задатак. * / "пок_реад", / * Име текста задатка. * / 1024 * 3, / * Величина слога у речима, не бајтова. * / НУЛЛ, / * Параметар је прешао у задатак. * / 2, / * Приоритет на којем се задатак креира. * / & покРеадТаскХлд); / * Користи се за одавање ручице креираног задатка. * /} кашњење (100); иф (мкттПубТаскХлд == НУЛЛ) {кРетурнед = кТаскЦреате (мкттПубТаск,/ * Функција која спроводи задатак. * / "мкттПуб", / * Име текста задатка. * / 1024 * 3, / * Величина слога у речима, а не у бајтовима. * / НУЛЛ, / * Параметар је прослеђен у задатак. * / 2, / * Приоритет на којем се задатак креира. * / & мкттПубТаскХлд); / * Користи се за одавање ручице креираног задатка. * /}} елсе {Сериал.принт (("Заустављање ПОКС-а…")); // Откривање задатка за читање ПОКС-а иф (покРеадТаскХлд! = НУЛЛ) вТаскДелете (покРеадТаскХлд); покРеадТаскХлд = НУЛЛ; } // Избриши МКТТ Пуб задатак ако (мкттПубТаскХлд! = НУЛЛ) {вТаскДелете (мкттПубТаскХлд); мкттПубТаскХлд = НУЛЛ; } стопРеадПОКС (); }}}}/ * Користи се за одавање ручице креираног задатка. * /}} елсе {Сериал.принт (("Заустављање ПОКС-а…")); // Откривање задатка за читање ПОКС-а иф (покРеадТаскХлд! = НУЛЛ) вТаскДелете (покРеадТаскХлд); покРеадТаскХлд = НУЛЛ; } // Избриши МКТТ Пуб задатак ако (мкттПубТаскХлд! = НУЛЛ) {вТаскДелете (мкттПубТаскХлд); мкттПубТаскХлд = НУЛЛ; } стопРеадПОКС (); }}}}/ * Користи се за одавање ручице креираног задатка. * /}} елсе {Сериал.принт (("Заустављање ПОКС-а…")); // Откривање задатка за читање ПОКС-а иф (покРеадТаскХлд! = НУЛЛ) вТаскДелете (покРеадТаскХлд); покРеадТаскХлд = НУЛЛ; } // Избриши МКТТ Пуб задатак ако (мкттПубТаскХлд! = НУЛЛ) {вТаскДелете (мкттПубТаскХлд); мкттПубТаскХлд = НУЛЛ; } стопРеадПОКС (); }}}}
Демонстрација пулс оксиметра заснована на ИоТ-у
Коло је правилно повезано у плочу за пренос података и програм дат у наставку се отпрема на ЕСП32. Обавезно промените поверљиве податке за Ви-Фи и Адафруит у свом коду да би то функционисало за вас.
Након везе са ВиФи и Адафруит ИО сервером, почео је да ради како се очекивало.
Као што видимо, ниво СПО2 показује 96%, а откуцаји срца 78 до 81 бит у минути. Такође пружа време када се подаци прикупљају.
Као што видимо на горњој слици, прекидач је искључен и подаци су 0. Комплетан видео снимак пројекта такође се може наћи на дну ове странице.
Надам се да вам се свидео чланак и научили сте нешто корисно. Ако имате питања, оставите их у одељку за коментаре испод или их објавите на нашим форумима.