1. februarja, 2020

Merilnik srčnega utripa in kisika v krvi z ATtiny85

ha 300x80 - Merilnik srčnega utripa in kisika v krvi z ATtiny85

Prikažite svoj srčni utrip, nivo kisika v krvi ter si oglejte premikajoči graf vsakega srčnega utripa s tem enostavnim projektom!

Komponente, ki jih bomo potrebovali v tem projektu:

Arduino Nano R3 1 kos
Arduino UNO in Genuino UNO 1 kos
Microchip ATtiny85 1 kos
OLED SSD1306 128×32 displej 1 kos
MAX30102 zelo občutljiv merilnik kisika v krvi in senzor srčnega utripa 1 kos
3 mm LED: Rdeča 1 kos
Upor 1k Ohm 1 kos
Tipko 1 kos

Hardverske komponente

Programska oprema in spletne storitve:

  • Arduino IDE

Ta projekt je narejen s pomočjo ATtiny85, ki na malem OLED displeju prikazuje premikajoč diagram srčnega utripa s podatkom o nivoju kisika v krvi (SpO2). Projekt prikazuje foto pletizmograf (angl: photoplethysmograph: PPG). Uporablja SSD1306 128×32 OLED displej in MAX30102 senzor. Potrebno je poudariti, da ta naprava ni primerna za uporabo v medicinske namene! Preračun SpO2 je zelo približen in ni umerjen. Ta projekt je pravzaprav prikaz, kaj vse lahko naredimo z uporabo procesorja, ki ima 512 bajtov RAMa. To pomeni, da bodo izmerjeni vzorci iz MAX30102 procesirani med delovanjem. Večina obstoječih Arduino programov bere v blokih po 100 vzorcev in jih nato procesira.

Na Github sem dodal tudi mapo z imenom nanoPulsePPG, ki teče na standardnem Arduino Nano, moral bi pa delovati tudi na Arduino Uno. Tako lahko eksperimentirate s programom in senzorjem.

Vezje
Vezje sem sestavil kar na univerzalnem tiskanem vezju, kot se vidi na sliki 2, vendar pa bi ga lahko sestavil tudi na prototipni plošči.
ATtiny85 je nastavljen tako, da deluje na 16 MHz z uporabo “Spence Konde ATtinyCore” (poglejte si David Johnson-Davies-a blog Technoblogy [1] za več informacij o tem, kako konfigurirati in naložiti Arduino programe v ATtiny85). Glede na podatke o komponentah, naj bi bila napajalna napetost > 4,5V. V resnici pa vezje dobro deluje z enocelično LiPo baterijo (3,7 – 4,2V).

Delovanje

Nekaj sekund po vklopu napajalne napetosti se bo na zaslonu pojavilo sporočilo (glej sliko 2a). Ko položimo prst na senzor, se bo na displeju pokazala številka srčnega utripa in ocena kisika v krvi (kar je razloženo kasneje). Lahko si tudi ogledate video na povezavi [2].

Prikazovanje PPG nefiltriranih vzorcev
Rdeča LED utripa enkrat na srčni utrip. PPG displej se obnovi vsakih 50ms. Video [2] prikazuje obliko signala, ki smo ga že povprečili in filtrirali z namenom detekcije utripa. Edina tipka zbudi sistem, ki se postavi v režim spanja po 10 sekundah, če prsta v tem času ne prislonimo na senzor. V tem času tudi prikaže 4 načine prikaza signala, ki ga detektira rdeča in tudi infrardeča LEDica. Na sliki 3 vidimo izbrano možnost, ko signal povprečimo v izbranem filtru. Video posnetek [2] prikaže rezultat izbranega filtra.

Softverski problemi
Problem z driverjem. Maximov podatkovni list za MAX30102 predpostavlja, vendar izrecno ne navaja, da je LED1 rdeča, LED2 pa infrardeča (IR) LEDica. Če pa je amplituda LED1 nastavljena na nič, rdeča LED (kot je prikazano na mestu za prst) sveti. Če je LED2 nastavljena na nič, rdeča LED ugasne. Očitna ugotovitev je, da je LED1 IR, LED2 pa rdeča (to pomeni, da sta zamenjani), kar deluje tudi pri računanju kisika v krvi – glejte spodaj. To omenim kot najpogostejši gonilnik, ki se uporablja pri Arduino projektih za MAX30102, je gonilnik SparkFun 3010x, ki jasno identificira LED1 z rdečo in LED2 z IR LEDico. To morda velja za MAX30105, nameščen na Sparkfun plošči, vendar se zdi, da to ne velja za MAX30102 na MH-ET-LIVE plošči.
SpO2 računanje: “SpO2 pomeni nasičenost periferne kapilare s kisikom, kar predstavlja oceno količine kisika v krvi. Natančneje, to je odstotek oksigeniranega hemoglobina (hemoglobin, ki vsebuje kisik) v primerjavi s skupno količino hemoglobina v krvi (oksigeniran in neoksigeniran hemoglobin).”

Oksigenirani hemoglobin in deoksigenirani hemoglobin imata različne lastnosti absorpcije svetlobe za rdeče in IR valovne dolžine. To je osnova za senzorje, kot je MAX30102. Pri izračunu se uporabi razmerje:

R = (AC_red/DC_red)/(AC_IR/DC_IR)

kjer je AC_xxx nihajoča komponenta signala xxx, DC_xxx pa fiksna komponenta. tinyPulsePPG uporablja R v dveh različnih formulah. Zgornji odstotek je iz klasične formule:

R = 104 - 1.7 * R

Spodnja uporablja tabelo Maxim Arduino gonilnika, ki je približek formule:

-45.060 * R * R + 30.354 * R + 94.845

AC se izračuna v tinyPulsePPG kot amplituda vrha do vrha signala po odstranitvi DC-elementa. enosmerni element izračunamo s pomočjo eksponentnega filtra s premičnim povprečjem, izmenični tok pa se tudi filtrira. Nisem dovolj eksperimentiral s konstantami v teh filtrih, da bi določil učinek na izračun SpO2 ali kako zanesljiv je ta način izračunavanja teh količin.

PPG displej Prebrani in IR signali iz senzorja gredo preko dveh stopenj filtriranja. Prva, kot je opisano zgoraj, je odstranitev istosmernega elementa. Drugo je filter s premikajočim se povprečjem, ki deluje kot nizkoprepustni filter za odstranjevanje prehodnih pojavov, preden signal vstopi v detektor utripa. Po vsakem od teh filtrov se lahko prikaže valovna oblika, na splošno pa je neprilagojena oblika valov bolj zanimiva.

Na primer, na sliki projekta in v prvem video posnetku je mogoče videti zareze z mikrotiki – “sekundarni udar v padajočem delu sledenja impulza, ki ustreza prehodnemu povečanju aortnega tlaka ob zaprtju aortne zaklopke. – Merriam Webster Dictionary”

Opazil sem, da če je ta diskotična zareza še posebej močna – mlajši posamezniki – lahko premaga filtriranje na drugi stopnji in povzroči napačen izhod iz detektorja utripa, ki v bistvu išče vrhove in doline v valu. Delo v teku!

3D natisnjeno ohišje
Dodal sem povezavo do strani, ki vsebuje OpenScad in STL datoteke za ohišje prikazano na sliki 4.

Morali boste prilagoditi višino ohišja in višino plošče, da bo ustrezala vaši plošči in bateriji. Zgoraj prikazana plošča je nižjega profila kot originalna različica (8 mm).

Viri:

  • 1: http://www.technoblogy.com/
  • 2: https://youtu.be/hlncEN-ZyvY
  • https://www.hackster.io/jeffreymagee/attiny85-pulse-oximeter-and-photoplethysmograph-e3f907
Hackster Inc.
2020_282_51
www.hackster.io