Table of Contents

OXIMETRU

Autorul poate fi contactat la adresa: mhlcostea@gmail.com

Introducere

Mi-am produs realizaera unui oximeru pentru a masura nivelul de SpO2 din sange. Rezultatul obtinut va fi afisat pe un ecran LCD. Ideea de la care am plecat este prezentata aici [0]. Practic masurand diferentele in intenstatea luminoasa la refractia printr-o suprafata subtire a corpului unui om se poate detecta nivelul de oxigen din sange pentru ca celelalte componente care ar interfera se reduc la diferenta. Metoda aceasta de a masura nivelul de oxigen de la extremitatile corpului se apropie f mult cu metoda care se doreste de fapt si anume masurarea nivelului de oxigen din artere dar acest lucru este mult mai greu si nu se poate face facil si non-invasiv.

Descriere Generala

Modulul ATmega324p este cel care o sa faca prelucrarea datelor raw primite de la senzor si va afisa pe un ecran LCD in urma unui algoritm self-made nivelul de oxigen din sange. Senzorul va face partea din familia MAX30100 (MAX30102)

Schema Electrica

Nivelul de oxigen din sange este SpO2=HbO2/TotalHb

Software Design

Placuta comunica cu MAX30102 prin I2C. Prima oara initializez registrii din acesta. Dupa care trebuie sa colectez date de la aceasta. Placuta are intern un vector impartit in cadre. Fiecare cadru are 6 bytes. Iar acei 6 bytes sunt impartiti in 3 bytes per canal. Canalele existente sunt canalele pentru led-ul IR si led-ul rosu. Cei 3 bytes sunt rezultanti direct din ADC-ul intern senzorului, rezolutia maxima pe care acesta o are este de 18 biti. Pe langa acesta setez placuta sa agregheze cadre multiple intr-un singur cadru pentru a da o stabilitate mai mare a datelor. Am ales nivelul de agregare la 4 ceea ce face ca placuta sa imi genereze date de 4 ori mai incet dar datele au fluctuatii mai mici. Cand extrag date de la senzor trebuie sa extrag un cadru complet de odata pri I2C altfel acesta se pierde. Dupa ce am extras 100 de cadre generez dau aceste valori unui algoritm pentru a calcula nivelul de SpO2 din sange.

Mai intai se face media aritmetica a semnalului iar dupa din fiecare esantion scad media. Astfel scad componenta de curent continuu din semnal si raman doar cu componenta de curent alternativ.

Fac acest lucru si pentru esantioanele de la led-ul de rosu si de la cel IR.

Aceste semnale pe care o sa le obtin o sa le fac media din nou pentru a afla valoarea medie si dupa vrea sa verific daca valoara medie a lor este intr-un anumit threshhold unul fata de celalalt. Daca da este ok si calculez bazandu-ma pe modelul empiric de calcul al oxigenului valoarea. Daca nu inseamna ca trebuie sa reglez caderea de tensiune de pe leduri pana cand se aproprie suficient de tare.

Imaginea reprezinta un grafic in timp a diferentei dintre cele 2 semnale fix cand a fost stabilizata.

Modelul empiric este mult mai usor de folosit decat modele standard si are valori f apropriate de cel standard de la 80% in colo. Datorita faptului ca un om sanatos are aproximativ nivelul de oxigen in sange masuratorile o sa fie accurate in majoritatea cazurilor. Iar pentru cazuri deosebite in care niveul de oxigen va fi foarte low se pot vedea sintomele si fara o masurare spcifica de la aparat.

Raportul celor doua este urmatorul R=(log(IAC)∗λ1)/(log(IAC)∗λ2)

Modelul empiric ne da urmatoarea formula SpO2=110−180∗R. Aceasta este folosita in a afla nivelul de oxigen din sange

Rezultate obtinute

Concluzii

A fost un proiect interesant din care am invatat multe. Nu am reusit sa il termin. LCD-ul se stinge cand citesc date de la senzor. Dar am priceput in are parte cum functioneaza.

Bibliografie

[0] https://en.wikipedia.org/wiki/Pulse_oximetry

https://www.teachmemicro.com/max30100-arduino-heart-rate-sensor/

https://morf.lv/implementing-pulse-oximeter-using-max30100

https://pdfserv.maximintegrated.com/en/an/AN6409.pdf

https://datasheets.maximintegrated.com/en/ds/MAX30101.pdf

https://datasheets.maximintegrated.com/en/ds/MAX30102.pdf

PDF

PDF