abant izzet baysal üniversitesi mühendislik mimarlık

Transkript

abant izzet baysal üniversitesi mühendislik mimarlık
ABANT İZZET BAYSAL ÜNİVERSİTESİ
MÜHENDİSLİK MİMARLIK FAKÜLTESİ
ARDUINO GÖMÜLÜ SİSTEMLERİYLE PPG SİNYALİNİN
ELDE EDİLMESİ VE KALP HIZI ORANININ TESPİT
EDİLMESİ
Onur YOLAL
LİSANS BİTİRME TEZİ
ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ
BOLU, 2014
DANIŞMAN ONAY
Bu tez çalışması Abant İzzet Baysal Üniversitesi Mühendislik Mimarlık Fakültesi
Elektrik-Elektronik Mühendisliği Bölümü Mühendislik Tasarımı I-II dersleri
kapsamında hazırlanmıştır. Lisans Bitirme Tezi olarak uygun bulunmuştur.
Tez Danışmanı
Doç. Dr. Kemal POLAT
Tarih:
İmza:
ARDUINO GÖMÜLÜ SİSTEMLERİYLE PPG SİNYALİNİN ELDE
EDİLMESİ VE KALP HIZI ORANININ TESPİT EDİLMESİ
Onur YOLAL
Anahtar Kelimeler: Arduino, Gömülü Sistem, Kan, Fotopletismografi, Biyomedikal
Özet: Kandaki oksijen miktarının ölçülmesi gerektiğinde insan vücudunun kan
dokusuna doğrudan erişmeden (noninvaziv) ölçüm alınmasında bir metot olarak
kullanılan Fotopletismografi sinyallerinin ölçümünü Arduino gömülü sistemleri
üzerinde sağlamak ve elde edilen bu sinyaller doğrultusunda donörün bir dakikadaki
toplam kalp atım hızını elde etmek bu çalışmamızın amacıdır. Birçok doku ve organ
yeterli oksijeni kan dokusundan alamazsa vücutta geri dönülemez zararlar oluşabilir
ve oksijen yetersizliğinde kalp, karaciğer ve böbrekler kalıcı olarak zarar görebilir.
Bu sebepten ötürü kan ile doğrudan temas etmeden hastanın kan değerleri hakkında
hızlı ve pratik bilgi edinilebilinirse alınan örnekler hayat kurtarıcı olabilecektir.
Kullanışlı yapıları sayesinde Arduino gömülü sistemleri tercih edilmiştir. Hem hızlı
bir işlemci hem de tüm devre çıkışlarındaki çeşit sebebiyle bu gömülü devreler tercih
edilmiştir. Tüm hastalara uygulanabilir ve gerçek zamanda kan değerleri hakkında
hızlı ve net bilgi sahibi olunabilir. Fotopletismografi sinyallerinin elde edilmesinde
yazılım temelli algoritmalar kullanılır ve bu değerlerin yorumlanması üzerinde bazı
özel algoritmalar kullanılmaktadır.
ii
DISPLAYING HEART RATE USING ARDUINO EMBEDDED SYSTEMS
AND PPG SIGNALS
Onur YOLAL
Keywords: Arduino, Embedded System, Blood, Photopletismography, Biomedical
Absract: When measuring the amount of oxygen from blood is necessary in order to
predict body's situation noninvasivly, photophletismography measurement is a
method to measure Photoplethysmography signals of measuring Arduino embedded
systems provide over and the thus obtained signal in accordance with the donor's one
minute total heart rate to achieve the purpose of this study is. If tissues and organs in
the body does not receive enough oxygen from the blood, tissue and/or organs may
get damaged and the lack of oxygen in the heart, liver and kidneys could be
permanently damaged for human beings. For this reason, blood obtaining from
patient's blood gives us an information about the values taken thus a very fast and
practical measuring would be life saving. And thanks to a handy Arduino embedded
systems is preferred. Arduino kits have fast processor and a lot of circuit output
points. That’s why we preferred. With using Arduino kits, patient’s blood values can
be measurable in real time, this may provide quick and precise information.
Photoplethysmography signal measuring depends on the preparation of software
algorithms based on the interpretation of these values will be used, especially some
specific algorithms will be used. Signal samples taken from patients to be obtained
and specific formulations will be applied.
ii
ÖNSÖZ ve TEŞEKKÜR
Günümüzde biyomedikal konusu ile ilgili zor problemlerle karşılaşılmaktadır. Bu
problemlerin çözümünde kullanılan yaklaşımlar ise belli derecelerde yetersiz
kalmaktadır. İnsanların günlük hayatlarında sağlıkları hakkında anlık bilgi sahibi
olmak istemeleri ile ortaya çıkan sağlık durumlarının anlık takibi ve izlenmesi dikkat
çeken konuların arasında gelmektedir. Sağlık sektörünün hayatımızdaki yerini
düşünürsek bu türde ihtiyaçların karışılanması için kullanılan sistemlerin var
olduklarını çok rahat bir şekilde söyleyebiliriz. Bu sistemlerin hızlı bir şekilde
gelişmesindeki en önemli sebeplerden biri kuşkusuz üretim teknolojisindeki
gelişmelere paralel olarak elektronik devre ve sistemlerinin sağlık alanına sağladığı
katma değer, tasarruf ve esnekliktir.
Fotopletismografi (Kısaca PPG) sinyallerinin elde edilmesinde kullanılan aktif devre
elemanları ve elektronik devrelerden oluşan devre kartları sayesinde biyomedikal
sinyaller elde edilirken band geçiren filtreler tasarlanarak frekans bandı genellikle iki
bileşene bölünmektedir. 0.4Hz ile 0.15Hz arası alçak geçiren, 0.15Hz ve 0.6Hz arası
yüksek geçiren filtre yapıları birlikte kullanılmaktadır. Dolayısıyla, PPG sinyallerinin
gürültü sinyallerinden ayırt edilebilmesi için uygun frekans aralık değerlerini
geçirebilecek filtre yapıları aktif devre elemanlarıyla tasarlanmaktadır. Bu tasarımın
zahmetli olduğunu bu yolda çalışmaya başlayınca doğrudan fark edebiliyoruz.
Özellikle tasarlanan devrenin hızı, çözünürlüğü, band genişliği, kapladığı alan,
harcadığı güç, dinamik ve statik parametreleri oldukça önemlidir. Tasarım yaparken
bunların hepsi birden düşünülmektedir. Bu yüzden analog tasarım yapmak oldukça
zor bir iştir. Bu çalışmamızda algoritma tabanlı olarak Arduino IDE üzerinde ve
Processing üzerinde kod geliştirerek bu analog tasarımın zahmetini en aza
indirmekteyiz. Türkiye’de biyomedikal özellikte cihazların üretilmesi için kullanılan
tümleşik devre tasarımları üzerine yapılan çalışmalar diğer konulara göre oldukça az
sayıdadır. Bu yüzden yapılan bu çalışmanın ileride bu tür çalışma yapacak olanlara
yardımcı olacağına inanıyorum.
Bu çalışma adına hiçbir zaman beni yalnız bırakmayan, bilgi ve birikimleri ile beni
yönlendirip çalışmalarımın mükemmel olmasında katkısı olan sayın hocam Doç. Dr.
Kemal POLAT’a çok teşekkür ederim.
Beni bu zamanlara getiren, her zaman ve her koşulda beni destekleyen, sevgilerini
hiç esirgemeyen anneme, babama ve abime çok teşekkür ederim.
İÇİNDEKİLER
ÖZET
................................................................................................................ ii
ABSTRACT ........................................................................................................... iii
ÖNSÖZ ve TEŞEKKÜR .......................................................................................... iv
İÇİNDEKİLER ........................................................................................................ vi
SİMGELER DİZİNİ ve KISALTMALAR .............................................................. xv
ŞEKİLLER LİSTESİ ............................................................................................ xvii
TABLOLAR DİZİNİ .............................................................................................. xx
1. GİRİŞ ................................................................................................................. 1
1.1. Hemoglobin .................................................................................................. 1
1.2. Hemoglobinle Bağ Yapmış Oksijenin Ölçüm Teknikleri ............................... 1
1.2.1. Fotopletismografi (Photopletismography – PPG) ................................... 1
1.2.2. Darbe Oksimetresi ................................................................................. 2
1.3. Amaçlar ve Hedef.......................................................................................... 3
1.4. Tezin Organizasyonu ..................................................................................... 3
2. GERÇEKLEŞTİRİLEN SİSTEM.......................................................................... 4
2.1. Darbe Oksimetresi ve Sensör Devre Kartı...................................................... 5
2.2. Arduino ....................................................................................................... 10
2.3. Bilgisayar Ortamı ........................................................................................ 16
2.4. Processing ................................................................................................... 17
2.5. Sonuçlar ...................................................................................................... 20
3. SONUÇ .............................................................................................................. 24
3.1. Öneriler ....................................................................................................... 25
KAYNAKLAR ....................................................................................................... 26
EKLER ............................................................................................................... 27
ÖZGEÇMİŞ............................................................................................................ 28
SİMGELER VE KISALTMALAR DİZİNİ
IEEE
INL
LSB
MSB
PPG
ROM
VLSI
HbO2
AC
DC
WIFI
LED
: Instute of Electrical and Electronical Engineers
: Integral Non-Linearity—Tümlevsel Doğrusalsızlık
: Least Significant Bits—En Değerliksiz Bit
: Most Significant Bits—En Değerlikli Bit
: Photoplethysmogram
: Read Only Memory—Salt Okunur Bellek
: Very Large Scale Integration
: Oksijenli Hemoglobin
: Alternatif Akım
: Doğru Akım
: Wireless Fidelity – Kablosuz Ağ
: Light Emitted Diode – Işık emilimli diyot
ŞEKİLLER DİZİNİ
Şekil 1.1: Parmağın çeşitli bölgelerinden geçen ışınlar ............................................. 2
Şekil 2.1: Blok şeması.............................................................................................. 4
Şekil 2.2: Parmağa yerleştirilebilen kıskaçlı darbe oksimetresi ................................. 5
Şekil 2.3: Sensörün şematik gösterimi ...................................................................... 6
Şekil 2.4: Osiloskop ekranında görüntülenen PPG sinyali ........................................ 7
Şekil 2.5: PPg sinyalinin üretilmesini sağlayan devre kartı ....................................... 8
Şekil 2.6: Parmaktan sinyal elde edilmesini sağlayan harici bileşen.......................... 9
Şekil 2.7: Parmak ile uyumlu harici bileşen kauçuk profili ....................................... 9
Şekil 2.8: Arduino Mega 2560 ............................................................................... 11
Şekil 2.9: Arduino Mega 2560 ve Wi-Fi Katmanının Birleştirilmesi....................... 13
Şekil 2.10: Arduino IDE üzerinden geliştirilen kod satırları ................................... 15
Şekil 2.11: Arduino Mega 2560’ın bilgisayarda tanımlanması ................................ 16
Şekil 2.12: Launch4j başlangıç hatası Bluetooth bileşeninden kaynaklıdır .............. 17
Şekil 2.13: Processing logosu ve bazı örnekleri ...................................................... 18
Şekil 2.14: Processing çizim alanında PPG sinyalleri ve kalp atış oranı .................. 19
Şekil 2.15: Hem osiloskopta hem de Processing ile bilgisayarda sinyaller .............. 22
Şekil 2.16: PPG sinyallerinin eldesindeki devre kartının şeması ............................. 23
Şekil 3.1: Xively üzerinde PPG sinyalinin görüntülenmesi (WIFI Shield) .............. 25
TABLOLAR DİZİNİ
Tablo 2.2: On farklı kişiden alınan ölçümler .................................................. 24
1. GİRİŞ
1.1. Hemoglobin
Canlı vücudunda kan dokusu içerisinde yer alan hemoglobinin büyük bir kısmı
oksijen taşımaya yarayan formdadır. Fonksiyonel hemoglobin, oksijen taşıma
kapasitesine sahip olan hemoglobindir ve oksihemoglobin adı verilen oksijene bağlı
hemoglobini (Oksijenli hemoglobin, HbO2) içerir. Oksijeni taşıma kapasitesine sahip
olmayan hemoglobine disfonksiyonel hemoglobin (dishemoglobin) adı verilir.
Normal şartlar altında oksijenli hemoglobin kandaki toplam hemoglobinin %99’u
olarak ölçülür. [1]
1.2. Hemoglobinle Bağ Yapmış Oksijenin Ölçüm Teknikleri
1.2.1. Fotopletismografi (Photopletismography-PPG)
Fotopletismografi (PPG), canlı vücudunun cilt yüzeyinde seçilen bir test bölgesinde
akan kanın deriye yakın bölgelerinden alınan ve kan dokusu hakkında bilgi veren
noninvaziv türde, elektro-optik bir metottur. Bu metoda göre yerleştirilen
fotopletismografi düzenekleriyle ölçümlenen fotopletismografi sinyalleri vücudun
ilgili bölgesini aydınlatmak suretiyle deriden geri yansıyan ya da iletimi sağlanan ışık
taneciklerinin yakalanmasıyla elde edilir. PPG’yi elde etmek için parmağın veya
kulağın bir tarafına dalga boyu λ olan bir ışık kaynağı, diğer tarafına kaynağın tam
karşısına iletilen ışığı yakalayacak şekilde ayarlanmış fotodedektör yerleştirilir. Tipik
bir PPG sinyali kan damarlarının içinden geçmeden deri, kas ve kemikten geçen
büyük bir DC bileşenden, deri, kas ve kemikten ayrılarak doğrudan kan
damarlarından geçen küçük bir AC bileşenden ve arteriyel kan damarlarından da
geçen ışıktan meydana gelen kalp atımının frekansındaki bileşenden meydana gelir.
Kalbin sistolik hareketi meydana geldikten hemen sonra atardamarlardaki kan
miktarı artar ve böylece PPG için alınan ışık şiddeti de düşer. Diyastol boyunca
damarlardaki kan miktarı azalır ve ışık iletiminde bir artış görülür. Temel bir ölçüm
bölgesinde sinyalin %99’u deri, kas ve kemikten, %0,9’u toplardamardan, %0,1’i
1
atardamarlardan gelir. Parmağın çeşitli bölgelerinden geçen ışık seviyeleri şekil
1.1’de gösterilmiştir. Darbe oksimetresi metodunda biri kırmızı diğeri kızılötesi
bölgede olan iki PPG sinyali kullanılarak oksijen saturasyonu seviyesi noninvaziv
olarak elde edilir [7].
Şekil 1.1: Parmağın çeşitli bölgelerinden geçen ışınlar
1.2.2. Darbe Oksimetresi
Darbe oksimetresi kandaki oksijen saturasyonunun devamlı ve noninvaziv olarak
ölçümüdür. Bu pratik yöntem genellikle kişisel gözlemler ile saptanamayan arteriyel
hipokseminin erken fark edilmesini sağlar. Darbe oksimetresi cihazının temel işlevi
bir kişinin kanındaki oksijen doygunluğunun belirlenmesidir. Bir hemoglobin
maksimum dört tane oksijene bağlanabilir. Darbe oksimetresi cihazları uyku apnesi
ve solunum hastalıklarının teşhisinde kullanılır. Örneğin; astım, kronik bronşit,
amfizem, konjestif kalp yetmezliği ve pulmoner ödemi gibi hastalıklarda kullanılır
[1].
2
Literatürde, darbe oksimetresi ile birçok çalışma yapılmıştır. Bunlar arasında, Reddy
ve arkadaşlarının yaptığı çalışmada darbe oksimetresinin temellerinden, fotoelektrik
pletismografi ile olan ilişkisinden bahsedilmiştir. [3] Reddy ve arkadaşlarının diğer
bir çalışmasında ise ilk çalışmada kullanılan kalibrasyon eğrisi bırakılarak emilim
katsayıları ile hesaplama yapılmıştır.[4] Shafique ve arkadaşlarının çalışmasında 20
hasta insanla deney yapılmış ve bütün darbe oksimetresi çeşitleri için sonuçlar
karşılaştırılmıştır.[5] Adochiei ve arkadaşlarının çalışmasında RF teknolojisi
kullanılarak wireless darbe oksimetresi tasarlanmıştır. Ayrıca WiFi veya GSM/GPRS
teknolojisi kullanılarak telemonitörize edilmiştir.[6]
Kandaki ışık emilim miktarı bu moleküllerin sayısı arasındaki farkı görmeyi sağlar.
Bu amaçla darbe eklimetrelerinde genel olarak red (kırmızı) ve IR (kızılötesi) ışınları
kullanılır. Normal koşullar altında arteriyel kan %97 oksijen ile doymuştur. Sağlıklı
bir insanda oksijen saturasyonu %95 ile %100 arasında değişir.
1.3. Amaçlar ve Hedef
Bu çalışmanın ana amacı kalp hızı oranının elde edilmesinde kullandığımız PPG
sinyalinin elde edildiği devre tasarımının çıkışını Arduino Gömülü Sistem
devrelerine giriş olarak aktarıp sinyal değerlerinin mikroişlemci tarafından okunarak
Arduino gömülü devresinden seri haberleşme çıkışı olarak alınıp Processing
programı tarafından seri porttan okunarak anlamlandırılması ve algoritmaların
geliştirilerek kalp hızı oranının elde edilmesiyle osiloskoba ihtiyaç duyulmadan
sinyallerin elde edilerek anlamlı hale getirilmesidir.
1.4. Tezin Organizasyonu
Bu tez çalışması 5 bölümden oluşmaktadır. 1. bölümde PPG sinyallerinin alınırken
meydana gelen gürültülerin ve olası sensör hatalarının giderilmesinden, bu
çalışmanın amaçları ve hedefleri anlatılmış ve kullandığımız SpO2 devresinin
çalışma mantığı, temelleri ve fotopletismografi sinyalleri üzerine temel bilgiler
verilmiştir. 2. bölümde Arduino Gömülü Sistemleri hakkında bilgiler verilmiştir.
3
Çalışmanın yapıldığı Arduino kart çeşidi ile ilgili bilgiler verilerek donanım ve
yazılım kısımları anlatılmıştır. Donanım kısmında fiziksel olarak tasarlanmış
Arduino devre yapısı işlenmiştir. Yazılım kısmında Arduino IDE üzerinde gömülü
sistemler için C (Embedded C) dilinin kullanımı açıklanmıştır. Kullanılan sistem
Creative Commons (CC) açık kaynak lisansı altında Processing tabanlı Arduino IDE
geliştirme ortamı tarafından geliştirilmiş kodlar ile AtmelTM 2560 entegresi
programlanarak gömülü devre kartın içine bu yazılım gömülmüştür. 3. bölümde
Arduino gömülü sistemin seri haberleşme ile bilgisayara veri aktardığı gerçek
zamanlı verileri seri porttan veri okuyan yapı açıklanmıştır 4. Bölümde gerçek
zamanlı olarak bilgisayardan okunan verilerin Processing açık kaynak kodlu
programı ile işlenip C dilinde yazılmış özel geliştirilmiş kütüphaneler yardımıyla
okunan veri yığınları gerçek zamanda işlenerek belirli bir örnekleme frekansıyla
örneklenip Analog sinyale dönüştürülüp çizim alanında işlenmekte ve PPG
sinyallerinin zamansal oranı ile kalp hızı oranı elde edilmektedir. 5. bölümde bu
çalışmayı doğrulamak için yapılan simülasyonların ve deneylerin sonuçlarına yer
verilmiş ve sonuçlar vurgulanmış ve tartışılmıştır.
2. GERÇEKLEŞTİRİLEN SİSTEM
Bu tez çalışmasında gerçekleştirilen aşamalar 5 kısımda toplanabilir. Bu kısımlar;
PPG Sinyalini Almak (sensör ile), Arduino Gömülü Devre Kartı, Bilgisayar’a Veri
Aktarılması, Processing Programı ve Bilgilerin Görüntülenmesi kısımlarıdır. Şekil
3.1’de gerçekleştirilen düzeneğin blok şeması yer almaktadır.
Şekil 2.1: Blok şeması
4
Gerçekleştirilen sistemde ilk olarak; parmağın optik sensör üzerine yerleştirilip
dokuya uygulanan ışığın kırılmasıyla oluşan değişimin algılandığı ve filtre görevi
gören devre elemanlarını kullanılarak fotopletismografi sinyalleri üretilmektedir. Bu
sinyalleri devre kartının sinyal çıkışı kısmında yer alan “output” noktasından toprak
bağlantısıyla birlikte alıyoruz. Tek damarlı zil teli kablosu ile bu uca lehimlenen
kablo vasıtasıyla Arduino devre kartının analog veri girişinin olduğu A0 ucuna
yerleştiriyoruz. Bu şekilde Arduino’ya gelen analog veriler belirli örnekleme
frekansına göre örneklenip bilgisayara USB kablo üzerinden seri yollu haberleşme
ile veri aktarımını sağlar. Bilgisayarın COM portlarına düşen bu veriler Processing
programı tarafından okunarak geliştirilen algoritma tarafından sayısal olarak
işlenerek analog değerlikli PPG sinyalini bilgisayar ekranında ortaya çıkartır. Aynı
zamanda, geliştirilen kod blokları ile kalp atım oranının sayısal değeri ekrana
aktarılır.
Sistemi oluşturan kısımlar aşağıda detaylı olarak açıklanmıştır.
2.1. Darbe Oksimetresi ve Sensör Devre Kartı
Darbe oksimetresinde bir ışık kaynağı ve ışık dedektöründen oluşan sensörün
kıskaçları arasına yerleştirilen parmak ile ya da kulak memesi gibi iyi perfüze olan
dokuların yerleştirilmesi ile ölçüm yapılabilir. Şekil 2.1’de parmak tipi darbe
oksimetresi görünmektedir.
Şekil 2.2: Parmağa yerleştirilebilen kıskaçlı darbe oksimetresi
5
Oksimetreler için temel kural, oksijeni ve redükte hemoglobini ayırt edebilmesidir.
Bu ayrım red ve IR ışınların emilim oranının bir mikrodenetleyici yardımıyla analiz
edilmesi ile sağlanır. Işık yayma diyotlarından gönderilen kırmızı (660 nm dalga
genişliğinde) ve kızılötesi ışık (940 nm dalga genişliğinde) dokunun karşı tarafında
bulunan fotodedektöre iletilir ve ışığın emilim derecesi belirlenir. Kırmızı ışık (660
nm) hemoglobin, kızılötesi ışık (940 nm) oksihemoglobin tarafından absorbe edilir.
Darbe oksimetre probu temas yüzü doku yüzeyine değecek şekilde arterial
perfüzyonlu
bir
doku
üzerine
yerleştirildiğinde,
fotodedektör
ışın
yayma
diyotlarından damarın karşısına gönderilen ışığın şiddetini ölçer ve kaydeder.
Sensörün şematik gösterimi Şekil 2.2’deki gibidir.
Şekil 2.3: Sensörün şematik gösterimi
Fotodedektörden alınan sinyal, analog filtrelerden geçirilerek gürültülerden
arındırılır. Filtreleme sonucu çok küçük bir AC sinyal kalır ve kuvvetlendiricilerle
6
osiloskoba aktarılır. Bu kısımda parmaktan alınan PPG sinyali elde etme işlemi şekil
2.3’te osiloskop ekranında gösterilmiştir.
Şekil 2.4: Osiloskop ekranında görüntülenen PPG sinyali
Bu çalışmamızda kullandığımız PPG sinyalini elde etmemizi sağlayan devre kartının
sinyal çıkışını osiloskopta görmemizin sebebi olarak elde edilen sinyalin nasıl bir
şekilde değer aldığını zaman ve genlik eksen takımı üzerinde gözlemlemek ve
çalışmamızda kıyas yapabilmek amaçlıdır. Kullandığımız devre kartı SpO2 Demo
Board olup versiyonu 1.1’dir ve şekil 2.4’te gösterilmiştir.
7
Şekil 2.5: PPG sinyalinin üretilmesini sağlayan devre kartı
Bu devre kartını seçmemizdeki temel sebep devre kartı üzerinde yer alan sensör
genişleme modül desteğinin (bakınız şekil 2.5) bulunması ve kalp atışlarını
yakalayan ve her atışta LED’in yanmasını sağlayan sürücülerin bulunmasıdır. Bazı
diğer özellikleri ise hem kızılötesi ışınlarını hem de kırmızı renkli LED ışığında
çalışma imkanı sunmasıdır. Modül üzerinde yer alan sabit enerji kaynağı olarak akü
grupları yerine saat pillerinin kullanılması modül için büyük bir esneklik sağlamakta
ve üzerindeki açma kapama anahtarı sayesinde devrenin çalışması durdurulup
başlatılabiliyor. Sinyalin genlik seviyesinin ayarlanması için yerleştirilmiş genlik
değiştiren potansiyometre sayesinde çıkış sinyalinin tepe genlik değeri
ayarlanabilmektedir.
8
Şekil 2.6: Parmaktan sinyal elde edilmesini sağlayan harici bileşen
Şekil 2.5’te gösterilen harici sinyal elde edici devre elemanı kalp hızı oranı elde
edilecek kişinin parmak yapısına uygun şekle getirilmesi için harici bileşen kartı
üzerine dört adet muhafaza delikleri açılmıştır. Şekil 2.6’da bu kısımlara yerleştirilen
kauçuk malzemeden yapılmış bir kılıf tasarımı yer almaktadır. Biyomedikal sinyaller
üzerinde gerçekleştirilen çalışmalarda özellikle bu noktada oldukça hassas olunması
gerektiği oldukça çok bilinir. Olası sensör hataları başında gelen sensörlerin uygun
yerleştirilememiş olması ve sonucunda doğacak istenmeyen sinyal bileşenleri ve
gürültüler işlemimizde hatalı sonuçlar elde etmemizi ve yanlış varsayımlar
üretmemize yol açmaktadır. Bununla ilgili olarak kullanılan kauçuk model şekil
2.6’da gösterilmiştir.
Şekil 2.7: Parmak ile uyumlu harici bileşen kauçuk profili
9
Sensör devre kartının sinyal çıkış noktasında yer alan “Output” ve “Signal GND”
noktalarını kullanıp mikrodenetleyici kartımızın analog veri girişi kısmına veri
göndermek için kullanacağız. Devre kartımız 3 voltluk gerilime ihtiyaç duymaktadır.
Bu gerilimi sabit güç kaynağından sağlamaktayız. Bu kısımda gönderdiğimiz verileri
aynı zamanda osiloskopta da görmek için şekil 2.3’teki gibi osiloskop cihazının
bağlantılarını bu iki noktaya CH1 kısmından bağlandı. Osiloskop probunun ucu
output ucuna bağlanarak Signal GND ucu da toprak ucuna bağlanmıştır. Şekil 2.1’de
yer alan darbe oksimetresi ile de kişinin kalp atış oranını görüp kıyaslama işlemini
yapıyor ve SpO2 değerinin ölçülmesini sağlamak için kullanıyoruz.
2.2. Arduino
Arduino gömülü sistem devre kartları ve mikrodenetleyicileri bir giriş çıkış kartı
olarak Processing/Wiring dilinin bir çeşit özelleştirilmiş uygulaması olan geliştirme
ortamının temelde mikroişlemcileri hedef alan fiziksel programlama platfomu olarak
tanımlanır. Arduino devre kartlarına enerji verildiğinde tek başlarına çalışan
interaktif programlar ve yazılımlar geliştirmek için kullanılabilir. Ayrıca geliştirilmiş
donanım mimarisine sahip eklentiler sayesinde hazır olarak üretilmiş açık kaynak
yapısındaki donanımlara sahip birimler doğrudan eklenebilmektedir. Arduino kartları
bir
Atmel AVR mikrodenetleyicisi (Atmega8, Atmega328 gibi)
ve kod
programlaması için gerekli yan elemanlardan meydana gelmiştir. Üretilmiş her
Arduino kartında 5 voltluk regüle entegresi ve bir 16MHz kristal osilatör
bulunmaktadır. Mikrodenetleyiciye önceden bir bootloader programı yazılı
olduğundan programlama için harici bir programcıya ihtiyaç duyulmamaktadır.[8]
Arduino IDE kod editörü birçok işletim sistemi üzerinde çalışabilen kod editörü ve
derleyicisi olarak çalışmaktadır. Derlenen kodların devre kartına gömülmesini
sağlayan geliştirme ortamı Processing mimarisinin geleneğini taşımaktadır.
10
Genel olarak kullanılan malzemeler, hazır kütüphaneler ve kaynak kodları “Creative
Commons Attribution Share-Alike 2.5 açık kaynak lisansı ile sunulmaktadır. Bu
sebeple tasarım yapan araştırmacılar ve program geliştiricileri için büyük bir kolaylık
ve esneklik sağlanmıştır. Bu yönüyle Arduino’nun herkes tarafından oldukça popüler
bir kullanıma kavuşması ve herkes tarafından kullanılabilir kolay bir yapı olması
sağlanmıştır.
Bu çalışmamızda kullanmış olduğumuz Arduino Mega 2560 kartının genel
özelliklerini inceleyelim. Şekil 2.7’de Arduino Mega kartı yer almaktadır.
Şekil 2.8: Arduino Mega 2560
Atmega2560 tabanlı bir Arduino kartı olan Arduino Mega, 54 dijital giriş çıkış
pininden 14 tanesini PWM olarak tanımlamıştır. 16 analog giriş ve 4 UART (seri
port), 16 MHz kristal osilatör, USB bağlantısı, adaptör girişi, ICSP çıkışı ve bir adet
reset butonu barındırır. Tüm Arduino kartlarındaki donanımlar açık kaynak kod
mimarisine sahiptir. Arduino Mega 2560 5 voltluk gerilim seviyesinde çalışır
Arduino Due 3.3 voltla çalışır dolayısıyla her Arduino kartı ilgili ihtiyaca yönelik
üretildiğinden kartı kullanmadan önce ön bilgiler mutlaka okunulmalıdır. Arduino
Mega 2560 harici olarak 6 ila 20 volt arasında bir gerilim kaynağı ile beslenebilir.
Eğer 7 voltun aşağısında harici besleme kullanılacaksa çıkış pini 5 volt vermekte
zorlanabilir ve arıza meydana getirebilir. 12 volttan fazla bir gerilim seviyesi
11
verildiğinde ise gerilim regülatörü fazla ısınıp kartın yanmasına yol açabilir. İdeal
olarak 7 ila 12 volt arasında gerilim düzeyi seçilmelidir. Arduino Mega 2560’ın diğer
kartlardan farkı FTDI USB-to-serial sürücü entegresi kullanılmamış olmasıdır. USBto-Serial entegresi yerine Atmega 16U2 USB-to-serial dönüştürücü olarak
programlanmıştır. Aşağıda Arduino Mega 2560 kartı üzerinde özel olarak
tanımlanmış bileşenler yer almaktadır.[9]
Seri: 0 (RX) ve 1 (TX) seri veri almak (RX) ve göndermek (TX) için kullanılır. 0 ve
1 pinleri aynı zamanda ATmega16U2 USB-to-TTL seri entegresine bağlıdır.
Harici Kesme: 2 (interrupt 0), 3 (interrupt 1), 18 (interrupt 5), 19 (interrupt 4), 20
(interrupt 3), ve 21 (interrupt 2). Bu pinler harici kesmeler için kullanılır, düşen
kenar kesmeleri, yükselen kenar kesmeleri, “Interrupt on change” kesmeleri bu
kısımlara attachInterrupt() fonksiyonunun kullanılmasıyla hangi kesmenin ne şekilde
kullanılacağı belirtilir.
PWM: 0 ila 13. pinler 8-bitlik PWM çıkış verir. AnalogWrite() fonksiyonu
kullanılarak PWM işaretlerinin kullanılması sağlanır.
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS). Bu pinler SPI kütüphanesi
kullanılarak SPI türü iletişimin kurulmasını sağlar. SPI pinleri aynı zamanda ICSP
tarafından da kullanılır.
LED: 13 numaralı pinde bir LED bulunmaktadır. Çıkış “High” edildiğinde LED
yanar, “LOW” edildiğinde sönmektedir.
TWI: 20 (SDA) ve 21 (SCL). “Wire” kütüphanesi kullanılarak TWI tarzı iletişim bu
yolla sağlanır.
Genel olarak Arduino gömülü sistem devre kartları “Shield” adı verilen gömülü
eklentilerle yapabildiklerini genişletmektedir. Şekil 2.8’de Arduino Mega 2560 ile
Wi-Fi
katmanının
(shield)
yapabileceklerinin
gösterilmektedir.
12
nasıl
bir
araya
getirildiği
Şekil 2.9: Arduino Mega 2560 ve Wi-Fi Katmanının Birleştirilmesi
Arduino Mega 2560 bu çalışmamızda enerjisini USB B tipi kablo ise doğrudan
bilgisayarın USB kısmından almaktadır. Aynı zamanda USB üzerinden haberleşme
ve bilgisayara veri gönderimi yapılmasını sağlamaktadır. Bu çalışmamızda herhangi
bir shield kullanmadan bu işlemi gerçekleştirebiliyoruz. Eğer doktora veya belli bir
telemonitörize işlemiyle bir yere bilgi gönderilecekse Wi-Fi ağının bulunduğu
noktalar için Wi-Fi katmanıyla internete veri gönderilebilir yoksa Ethernet katmanı
ile internete veri gönderilip uzaktan bilgi edinme işlemi gerçekleştirilebilir.
Arduino Mega 2560 gömülü devre kartımız üzerine yazdığımız kodlar vasıtasıyla
gerçekleştirdiğimiz algoritma kod bloğu aşağıdaki şekil 2.9’da verilmiştir. Arduino
13
devre kartları için tasarlanan algoritmaların gömülü C dili ile (Embedded C) yazıldığı
ve üzerinde geliştirme yapılabildiği kısım Processing tabanlı olarak çalışan ve
Arduino gömülü devre kartları için özel olarak tasarlanan Arduino IDE ortamıdır. C
dilinde geliştirilen kod satırlarını “Verify” özelliği ile doğrulayabiliyor ve yazılan
kod satırlarındaki hataları daha kodları yazarken görebiliyoruz. Bu açıdan oldukça
esnek bir kullanım kolaylığı sağlayan uygulama birçok işletim sistemi üzerinde
çalışabilecek şekilde üretilmiştir. Açık kaynak lisansına sahip olduğu için program
ücretsizdir ve hazır kütüphaneleri kendi içinde barındırarak son kullanıcıya
ulaşmaktadır.
14
Şekil 2.10: Arduino IDE üzerinde geliştirilen kod satırları
15
2.3. Bilgisayar Ortamı
Çalışmamızın üçüncü aşamasında bir önceki aşamada Arduino Mega 2560 devre
kartımızın “Analog Read” kısmından okuduğumuz gerçek zamanlı verileri 5
milisaniye aralıklarla örnekleyip USB kablo vasıtasıyla bilgisayara aktarımını
gerçekleştirmiştik. Aynı zamanda Arduino devre kartımız enerjisini USB kablo
üzerinden 5 volt olarak almaktaydı ve Arduino Due 3.3Volt ile çalıştığı özellikle
vurgulanmıştı.
Çalışmamızın üçüncü aşamasında ise Arduino Mega 2560 devre kartımızı bilgisayara
bağladıktan sonra ne yapmamız gerektiğinden bahsedeceğiz. Arduino kartımızı ilk
defa bilgisayara taktığımızda kartta yer alan tak-çalıştır (plug & play) özelliği
sayesinde aygıtın yazılımı otomatik olarak bilgisayara Arduino Mega adıyla tanıtılır
ve haberleşmenin sağlanması amacıyla o anda bilgisayar tarafından sıradaki boş
COM portu tanımlanır. Bu işlem otomatik olarak gerçekleşirken bilgisayarınız
Arduino kartını otomatik olarak tanıyacaktır. Şekil 2.10’da kendi Arduino kartımızın
yer aldığı genişleme yuvasının bilgisayarımızda tanımlandıktan sonraki bağlantı
durumu görülmektedir.
Şekil 2.11: Windows aygıt yöneticisi, Arduino IDE ve COM numarasıyla
Arduino Mega 2560’ın bilgisayarda tanımlanması
16
Eğer Arduino IDE başlatılırken hata alınıyorsa bilgisayarınızda bulunan dahili
Bluetooth modülünün çalışmasını durdurmalısınız. Aksi takdirde Arduino.exe
programını başlatan komutu verdikten sonra programın açılması çok uzun sürer ve
şekil 2.11’de görüldüğü gibi hata ile karşılaşırsınız.
Şekil 2.12 Launch4j başlangıç hatası Bluetooth bileşeninden kaynaklıdır
2.4. Processing
Processing, dijital sanatlar, animasyon gibi konularla uğraşan sanatçılar ve
etkileşimli programlar geliştirmek isteyenlere yönelik tasarlanmış bir görsellik
ağırlıklı programlama dilidir. Geniş kütüphane desteğine sahip olan Processing
programlama platformu, son dönemde geniş bir kullanıcı çevresine ulaşmıştır.
Bu bölümde, Processing programlama diliyle bilgisayarda oluşturduğumuz
arayüzlerle Arduino Mega 2560 devre kartımız arasında etkileşimde bulunan
çalışmamızı nasıl gerçekleştirdiğimiz anlatılacaktır. Arduino IDE kod geliştirme
ortamı temelde Processing’e dayanır. Kolay bir şekilde görsel programlama yapmak
için geliştirilmiş bir programlama dili olarak Processing, Arduino IDE üzerinde
çalışmış olanlar için kullanımı çok kolay olarak öğrenilebiliyor.
17
Processing içerisindeki “Serial” kütüphanesi ile Arduino ile bilgisayar arasında seri
haberleşme üzerinden iletişim kuran projeler gerçekleştirilebilir. Arduino’da olduğu
gibi Processing de diğer işletim sistemlerinde çalışabilmektedir. Şekil 2.12’de
Processing arayüzü, logosu ve güneş sisteminden bir kesit gösterilmiştir.
Şekil 2.13 Processing Logosu ve bazı örnekleri
18
Bu çalışma için Processing programını PPG sinyallerini çizdirmek ve bu sinyaller
arasındaki ilişki vasıtasıyla kalp hızı oranını bulmak için kullanmaktayız. Arduino
Mega 2560 devre kartımızdan gelen veriler sayısal veri olacak şekilde 5 milisaniye
aralıklarla örneklenip analog biçimden sayısal türe çevrilmişti. Bilgisayar ortamında
çalıştırdığımız Processing programı ile çizim alanında grafik çizdirip kalp hızı
değerine ulaşmaktayız. Bununla ilgili olarak geliştirdiğimiz kod satırları aşağıdaki
Ek 1’de verilmiştir.
Processing programımıza yazdığımız kodlardan sonra çalışmamızın sonucunda elde
ettiğimiz veriler şekil 2.13’de gösterilmiştir.
Şekil 2.14: Processing çizim alanında PPG sinyalleri ve kalp atış oranı
Processing programında yer alan kod satırlarında kullandığımız filtreleme işlemi
Moving Average yöntemine dayanmaktadır. Moving Average filtrelemesindeki
temel gerekçe olarak SpO2 modülümüzden alınan PPG sinyalinden Arduino Mega
2560 devre kartından geçiş ve bilgisayar ortamına kadar gelen süreçte meydana gelen
gürültü bileşenlerinin ve istenmeyen hataların ortadan kaldırılması içindir. Moving
Average yöntemi ile aritmetik ortalamayı zaman düzlemi üzerinde ilerleterek
elimizdeki verileri adım adım işleyip ortalama alan ve her işlemde ortalama değeri
19
bir önceki değeri dahil edip hesaplamak temel prensip olarak yer almaktadır. Ayrıca
bu işlemin Embedded C dili ile algoritma bazlı geliştirilmesi kolaydır.
Arduino devre kartımızdan gelen 5 milisaniye ile örneklenmiş veriler Processing’e
de 5 milisaniye ile örneklenmiştir diye tanımlanması gerekmektedir. Alınan
verilerden çizilen grafik için eğri uydurma yöntemi kullanılmıştır. Alınan veriler 5
milisaniye arasında kalan boş geçen zamanda eğri oluşturacak şekilde veriler
birleştirilmiş ve bir eğri olacak şekilde çizim alanına aktarılmıştır.
Çizim alanında çizilen grafik üzerinde ilk on sanıda örnek için bir tepe bulma
fonksiyonu çalıştırılmıştır. Bu işlem 3 defa tekrarlandıktan sonra bulunan tepe
noktaları arasında geçen sürenin çarpma işlemine göre tersinin 60 ile çarpılıp, 2
aralık için iki değer elde edilir ve bu iki değerin aritmetik ortalaması hesaplanılarak
“BPM” birimiyle çizim ekranına yazdırılır. (Beats Per Minute – Dakikadaki kalp
atım birimi) Bu şekilde geçen bir dakikalık süre boyunca yaklaşık olarak kalp atım
hızı belirlenmiş olur.
Processing kodlarımızla aslında SpO2 modülümüzün üzerinde yer alan aktif ve pasif
devre elemanlarının fiziksel olarak yaptığı algoritmik akış sabit kalmak koşuluyla
birer birer Embedded C dili tarafından kod satırlarına dönüştürülmüştür. Bu yapıda
kullanılan yüksek geçiren ve alçak geçiren filtrelerin transfer fonksiyonları
çıkartılmak suretiyle elde ettiğimiz eşitlikler kod satırlarına yerleştirilip geliştirilen
kodların fiziksel bir devre elemanı gibi görev yapması sağlanmıştır.
Sensör içinde bulunan fotodiyot LED’lerin yanında ortam ışığını da sinyale dahil
edebilir. Kırmızı LED’lerden gönderilen PPG sinyallerinin frekansı 0-5 Hz
aralığındadır. Bu nedenle dış ışıktan kaynaklanan, frekansı 5 Hz’nin üzerinde kalan
gürültülerin filtrelenmesi gerekir. Alçak geçiren filtrede, kesme frekansı yaklaşık 5
Hz’dir.
20
PPG sinyalinin DC bileşeni kirli kan, kemik ve dokulardan alındığı için sağlıklı bir
ölçüm yapabilmek için DC bileşenlerin filtrelenmesi gerekir. Yüksek geçiren filtrede,
kesme frekansı yaklaşık 0,5 Hz’dir.
2.5. Sonuçlar
SpO2 devre kartı, op-amplar ve değişik değerlerdeki direnç ve kondansatörler
kullanılarak devre çıkışına sinyal aktarımını sağlıyordu. Osilaskop bağlanarak elde
edilen sinyalin görüntülenmesi yapıldığından söz edilmişti. Osiloskop cihazımız
dijital osiloskop olduğundan dolayı bilgisayar ekranında elde ettiğimiz osiloskop
görüntüsü ile kendi çalışmamızla elde ettiğimiz grafiği şekil 2.14’te karşılaştıralım.
Şekil 2.14’teki sonuçlara göre osiloskop ekranında görüntülenen sinyaller benzer
şekilde Processing geliştirme ortamına da aynen aktarılmaktadır. Aktarılan değerler
arasında en yüksek tepe genliğine sahip değer siyah çarpı işaretiyle işaretlenip çizim
ortamında belirtilmiştir.
Üniversitemizin temel elektronik laboratuarlarında bulunan ADS-3102B kodlu dijital
masaüstü osiloskobun arkasında yer alan USB çıkışını yine laboratuarımızda bulunan
Windows XP işletim sistemi yüklü bilgisayarımıza USB kablo ile bağlayıp EasyScope program CD’si ile bilgisayara yükleyip hem osiloskop ekranını bilgisayar
ekranına aktarabiliyor hem de bu aktarılan verileri. CSV, .BMP ve bilinen diğer
dosya türlerinde kaydedebiliyoruz. Osiloskobun desteklediği ölçüde kanal sayısına
göre değerler elde edebiliyor ve bilgisayar ekranında bu değerleri görüntüleyip geniş
ekranda analizini oldukça esnek bir biçimde gerçekleştirebiliyoruz.
Yaptığımız bu çalışma ile elimizde osiloskop olmadığı zamanlarda Processing
programını bir çeşit osiloskop gibi kullanabileceğimiz ortaya çıkmaktadır. Eğer
gerekli tasarımlar USB giriş kısmı için gerçekleştirilirse bilgisayarın osiloskop olarak
kullanılması gerçekleştirilmiş olacaktır.
21
Şekil 2.15: Hem osiloskopta hem de Processing ile bilgisayarda sinyaller
22
Analog PPG sinyallerini elde etmek amacıyla kullanılan devre şeması şekil 2.15’te
gösterilmiştir.
Şekil 2.16: PPG sinyalinin eldesindeki devre kartının şeması
SpO2 deney kartından elde edilen sinyal, dijital verilere dönüştürülerek Arduino
Mega 2560 gömülü devre kartı üzerinde yer alan mikroişlemciye örneklenerek
aktarılmış ve bu değer dijital olarak USB yoluyla bilgisayara seri yoldan veri girişi
olarak sağlanmıştır.
Processing programı içerisinde algoritma geliştirerek aynı programın arayüzü ile
görüntülenmiş olup PPG sinyalinin nasıl olduğu çizim alanına aktarılmış, tepe
değerleri bulunmuş ve kalp atım hızı oranı elde edilmiştir. Bu işlemler gerçekleşirken
kullanılan Moving Average yöntemi (hareketli ortalama) kullanılmıştır. Çünkü
Moving Average yöntemi, ham verilerin farklı alt kümelerini oluşturup başlangıç
noktalarının bir dizisini analiz etmek için kullanılan bir sonlu dürtü yanıtı filtre
türüdür. Bu tez çalışmasında filtreleme tek değerde yapılmıştır. Bu değer Processing
kod satırlarında uzun bir işlem satırları arasında belirtilmiştir.
Örnekleme için 5 ayrı kişiden örnek alınarak karşılaştırma yapılmıştır. Çıkan
sonuçlar Tablo 2.2’de gösterilmiştir.
23
Tablo 2.2: On farklı kişiden alınan ölçümlerin karşılaştırılması
Kişi
Darbe
Oksimetresi
ile Kalp
Atım Hızı
Değeri(dk)
1
2
3
4
5
6
7
8
9
10
68
82
70
59
71
79
56
77
75
76.9
Tez
Çalışması
Sonucu ile
Kalp Atım
Hız
Değeri(dk)
68.8
81.1
71.2
60.3
71.9
79.2
56.2
75.7
75.2
77
Cinsiyet
Yaş
Boy
Kilo
Vücut/Kitle
Endeksi
(Kg2/boy)
E
E
E
E
E
E
E
E
E
E
23
21
23
24
22
20
21
21
21
20
1.80
1.77
1.67
1.74
1.79
1.90
1.89
1.77
1.75
1.77
100
65
65
68
88
84
88
71
73
66
55.55
23.87
25.29
26.57
43.26
37.13
40.97
28.48
30.45
24.61
3. SONUÇ
Bu çalışmanın asıl amacı darbe oksimetresinin gerçekleştirdiği ölçümlemeleri
Arduino gömülü devre kartları üzerinden de yapabilmektir. Geliştirilen yazılımın
büyük bir çoğunluğu Processing programı üzerinde yazıldığından dolayı bir
bilgisayara ihtiyaç duyulmuştur. Darbe oksimetresi cihazının verdiği deney sonuçları
ile bizim yaptığımız bu çalışmadaki sonuçları karşılaştırdığımızda yaklaşık %70
oranında eşitlik olduğu gözlemlenmiştir.
Tez çalışmasının literatür tarama kısmında konuyla ilgili Türkiye’de yapılan
çalışmaların çok az sayıda olduğu, genellikle yabancı kökenli kaynaklara
ulaşılabildiği gözlenmiştir. Bu da Türkiye’de bu konuya daha çok önem verilmesi
gerektiğini göstermektedir. Aynı zamanda cihaz üretimi konusunda dışa bağımlı
durumda olduğumuz ve üretici firmaların cihazın içyapısını paylaşmakta istekli
24
olmadıkları görülmüştür. Bu da cihazın içyapısı üzerine yeni fikirler geliştirmeyi
zorlaştırmaktadır.
Uygulama kısmında ise kullanılan malzemelerin çok hassas olması nedeniyle
gürültünün fazlalığı dikkat çekmiştir. Bu durum, ileriki çalışmalarda, bilinen gürültü
filtreleme yöntemleri dışında daha hassas yöntemler geliştirilmesi gerekliliğini ortaya
koymaktadır.
3.1. Öneriler
Bu çalışmanın hedeflerinden biri de kalp hızı oranının doktora internet yoluyla
bildirilmesi için Şekil 3.1’de Xively (IOE veya IOT) servis sağlayıcısı ile PPG
sinyalinin internet ortamına gönderilip telemonitorize işlemi gerçekleştirilmiştir. Bu
değerler doktora doğrudan aktarılmak suretiyle hasta ile doktor arasındaki iletişim
kurulması sağlanabilir.
Şekil 3.1: Xively üzerinde PPG sinyalinin görüntülenmesi(Wi-Fi Shield)
25
EK 1.
Tablo 2.1: Processing üzerinde geliştirilen kod satırları
//www.onuryolal.com
// Sinyal Parametrelerinin Tanımlanması
int Sampling_Time = 5; //Örnekleme frekansının Arduino ile optimizasyonu
int Num_Samples = 600;
int Peak_Threshold_Factor = 80;
int Minimum_Range = 500;
int Minimum_Peak_Separation = 50; // 50*5=250 ms
int Moving_Average_Num = 10;
int Index1, Index2, Index3, i, j, k, ZeroFlag;
float Pulse_Rate, Temp1, Peak1, Peak2, Peak3, PR1, PR2, ADC_Range;
float Amplification_Factor,Peak_Magnitude, Peak_Threshold, Minima, Range, temp,
Sum_Points, Num_Points;
float[] ADC_Value = new float[Num_Samples];
int[] ADC_Index = new int[Num_Samples];
// Görüntü ekranının tanımlanması
float plotX1, plotY1;
float plotX2, plotY2;
float labelX, labelY;
int rowCount;
int columnCount;
int currentColumn = 0;
int count = 0;
int yearMin, yearMax;
int[] years;
int xInterval = 10;
int yInterval = 200;
PFont plotFont;
1
import processing.serial.*; //Serial kütüphanesinin eklenmesi
Serial myPort;
// Seri portun tanımlanması
void setup() {
size(720, 450); //Analiz ekranının ekran genişliğinin en-boy şeklinde gösterimi
// Köşe takımlarının tanımlanması
plotX1 = 20;
plotX2 = width - 20;
labelX = 120;
plotY1 = 50;
plotY2 = height - 150;
labelY = height - 100;
plotFont = createFont("SansSerif", 20);
textFont(plotFont);
smooth();
println(Serial.list());
myPort = new Serial(this, Serial.list()[0], 115200); //115200 Baud Rate kullanımı
myPort.bufferUntil('\n');
}
void draw() {
background(224);
// Çizim alanının arka planının beyaz olmasını ve detaylarını sağlıyoruz
fill(255);
rectMode(CORNERS);
2
noStroke();
rect(plotX1, plotY1, plotX2, plotY2);
drawTitle();
drawAxisLabels();
drawSampleLabels();
ReadSamples();
RemoveDC();
if(ADC_Range < 50) {
ZeroFlag = 1;
ZeroData();
} else ZeroFlag=0;
ScaleData();
FilterData();
ComputeHeartRate();
// Çizim alanına gelen verilerden uzun bir eğri uyduruluyor
noFill();
stroke(32, 128, 192);
strokeWeight(2);
drawDataCurve();
DisplayHeartRate();
DisplayParameters();
}
void drawTitle() {
fill(0);
textSize(20);
textAlign(LEFT);
String title = "Arduino A0'dan gelen sinyalin çizdirilmesi";
text(title, plotX1, plotY1 - 10);
3
}
void drawAxisLabels() {
fill(0);
textSize(16);
textLeading(15);
textAlign(CENTER);
text(" ("+nfc(Sampling_Time, 0)+" ms'lik çizilen veri seti)", (plotX1+plotX2)/2,
labelY);
}
void drawSampleLabels() {
fill(0);
textSize(14);
textAlign(CENTER);
stroke(224);
strokeWeight(1);
for (int row = 0; row <= Num_Samples; row++) {
if (row % 100 == 0) {
float x = map(row, 0, Num_Samples+1, plotX1, plotX2);
text(row, x, plotY2 + textAscent() + 10);
line(x, plotY1, x, plotY2);
}
}
}
//Alınan örneklerin okunduğu fonksiyonun tanımlanması
void ReadSamples(){
count = 0;
4
do{
if(myPort.available() > 0){
String inString = myPort.readStringUntil('\n');
if (inString != null) {
inString = trim(inString);
float inByte = float(inString);
// float inByte = float(inString);
ADC_Value[count] = inByte;
ADC_Index[count] = count;
count = count + 1;
}
}
} while (count < Num_Samples);
}
void RemoveDC(){
Find_Minima(0);
Find_Peak(0);
ADC_Range = Peak_Magnitude-Minima;
println("Peak Magnitude2= "+ Peak_Magnitude + ", Minima = "+ Minima);
println("Range of ADC_Samples= "+ Range);
// DC (minima) bileşenin bulunması
for (int i = 0; i < Num_Samples; i++){
ADC_Value[i] = ADC_Value[i] - Minima;
}
Minima = 0; // New Minima is zero
}
void ZeroData(){
for (int i = 0; i < Num_Samples; i++){
5
ADC_Value[i] = 0;
}
}
void ScaleData(){
// Tepe değerin bulunarak işaretlenmesi
Find_Peak(0);
Range = Peak_Magnitude - Minima;
// 1 ila 1023 arasında örnekleme işlemi
for (int i = 0; i < Num_Samples; i++){
ADC_Value[i] = 1 + ((ADC_Value[i]-Minima)*1022)/Range;
}
Find_Peak(0);
Find_Minima(0);
println("Peak Magnitude1= "+ Peak_Magnitude + ", Minima = "+ Minima);
}
void FilterData(){
Num_Points = 2*Moving_Average_Num+1;
for (i = Moving_Average_Num; i < Num_Samples-Moving_Average_Num; i++){
Sum_Points = 0;
for(k =0; k < Num_Points; k++){
Sum_Points = Sum_Points + ADC_Value[i-Moving_Average_Num+k];
}
ADC_Value[i] = Sum_Points/Num_Points;
}
Find_Peak(Moving_Average_Num);
Find_Minima(Moving_Average_Num);
println("Peak Magnitude2= "+ Peak_Magnitude + ", Minima = "+ Minima);
}
6
void ComputeHeartRate(){
// Tepe noktasının genlik ve zaman ekseninde moving average filtresiyle çizilmesi
Find_Peak(Moving_Average_Num);
Find_Minima(Moving_Average_Num);
println("Peak Magnitude3= "+ Peak_Magnitude + ", Minima = "+ Minima);
Range = Peak_Magnitude - Minima;
Peak_Threshold = Peak_Magnitude*Peak_Threshold_Factor;
Peak_Threshold = Peak_Threshold/100;
// Now detect three successive peaks
Peak1 = 0;
Peak2 = 0;
Peak3 = 0;
Index1 = 0;
Index2 = 0;
Index3 = 0;
// İlk tepe noktasının bulunarak çizdirilmesi işlemi
for (j = Moving_Average_Num; j < Num_Samples-Moving_Average_Num; j++){
if(ADC_Value[j] >= ADC_Value[j-1] && ADC_Value[j] > ADC_Value[j+1]
&&
ADC_Value[j] > Peak_Threshold && Peak1 == 0){
Peak1 = ADC_Value[j];
Index1 = j;
}
// Bir sonraki tepe noktasının bulunması
if(Peak1 > 0 && j > (Index1+Minimum_Peak_Separation) && Peak2 == 0){
if(ADC_Value[j] >= ADC_Value[j-1] && ADC_Value[j] > ADC_Value[j+1]
&&
ADC_Value[j] > Peak_Threshold){
Peak2 = ADC_Value[j];
Index2 = j;
7
}
} // Peak1 > 0
// Sonraki 10 örnek için üçüncü tepe noktasının bulunması
if(Peak2 > 0 && j > (Index2+Minimum_Peak_Separation) && Peak3 == 0){
if(ADC_Value[j] >= ADC_Value[j-1] && ADC_Value[j] > ADC_Value[j+1]
&&
ADC_Value[j] > Peak_Threshold){
Peak3 = ADC_Value[j];
Index3 = j;
}
} // Peak2 > 0
}
PR1 = (Index2-Index1)*Sampling_Time; // Milisaniyedeki
PR2 = (Index3-Index2)*Sampling_Time;
println("PR1 = "+PR1+", PR2 = "+PR2);
if(PR1 > 0 && abs(PR1-PR2) < 100){
Pulse_Rate = (PR1+PR2)/2;
Pulse_Rate = 60000/Pulse_Rate; // In BPM
println("Index2= "+ Index2 + ", Index1 = "+ Index1+", PulseRate= "+Pulse_Rate);
println("Peak Magnitude= "+ Peak_Magnitude + ", Minima = "+ Minima);
}
}
// Verilerden Eğri uydurma fonksiyonunun tanımlanması
void drawDataCurve() {
beginShape();
if(ZeroFlag == 0){
for
(int
row
=
Moving_Average_Num;
Moving_Average_Num; row++) {
8
row
<
Num_Samples-
stroke(32, 128, 192);
float value = ADC_Value[row];
float x = map(ADC_Index[row], 0, Num_Samples, plotX1, plotX2);
float y = map(value, 0, Peak_Magnitude, plotY2, plotY1+15);
if(row == Index1 || row == Index2 || row == Index3){
textSize(20);
text("x", x,y);
}
curveVertex(x, y);
// if(row == Index2){
//stroke(204, 102, 0);
// triangle(x,y-4, x-3, y+4, x+4, y+4 );
// }
// if(row == Index3){
//stroke(204, 102, 0);
// triangle(x,y-4, x-3, y+4, x+4, y+4 );
//}
}
}
else{
for
(int
row
=
Moving_Average_Num;
row
<
Num_Samples-
Moving_Average_Num; row++) {
float value = ADC_Value[row];
float x = map(ADC_Index[row], 0, Num_Samples, plotX1, plotX2);
float y = 200;
curveVertex(x, y);
}
}
endShape();
9
}
void DisplayHeartRate(){
fill(200,0,0);
textSize(20);
textAlign(LEFT);
text("BPM", plotX2-40, plotY1 - 10);
if(ZeroFlag == 0){
text(nfc(Pulse_Rate, 1), plotX2-100, plotY1 - 10);
}else {
text("000", plotX2-100, plotY1 - 10);
}
}
void Find_Minima(int Num){
Minima = 1024;
for (int m = Num; m < Num_Samples-Num; m++){
if(Minima > ADC_Value[m]){
Minima = ADC_Value[m];
}
}
}
void Find_Peak(int Num){
Peak_Magnitude = 0;
for (int m = Num; m < Num_Samples-Num; m++){
if(Peak_Magnitude < ADC_Value[m]){
Peak_Magnitude = ADC_Value[m];
}
}
}
void DisplayParameters(){
10
fill(250,00,00);
textSize(18);
textAlign(LEFT);
text("ADC örnekleme aralığı = "+ ADC_Range, plotX1+5, plotY2+80);
text("www.onuryolal.com", plotX1+500, plotY2+80);
}
11
EK 2.
Ek 2: Arduino Kodları
/*
ONUR YOLAL TARAFINDAN GELISTIRILMISTIR.
THESE CODES WRITTEN BY ONUR YOLAL.
tr.linkedin.com/in/onuryolal
ABANT IZZET BAYSAL UNIVERSITY
ELECTRICAL AND ELECTRONICS ENG.
*/
void setup() {
Serial.begin(115200);
}
void loop() {
int sensorValue = analogRead(A0); //A0 ANALOG GIRISINDEN VERI OKUNUR
Serial.println(sensorValue); //AYNI ZAMANDA OKUNAN VERI SERI MONITORE
YANSITILIR
delay_x(5); //5 MILISANIYE KADAR ORNEKLENIR
}
void delay_x(uint32_t millis_delay) {
uint16_t micros_now = (uint16_t)micros();
while (millis_delay > 0) {
if (((uint16_t)micros() - micros_now) >= 1000) {
millis_delay--; micros_now += 1000;
}}}
1
KAYNAKLAR
[1] http://www.emo.org.tr/ekler/aa87b54ed6c1dbc_ek.pdf?dergi=892 (Son Erişim:
Haziran, 2014)
[2] M. E. Altuğ, R. Gönenci, “Pulse Oksimetre ile Arteriyel Oksijenasyonun
İzlenmesi”, Veteriner Cerrahi Dergisi (2003), 9 (3-4), 58-62.
[3] K. A. Reddy, B. George, N. M. Mohan, V. J. Kumar, “A Novel Method for The
Measurement of Oxygen Saturation in Artierial Blood”, Instrumentation and
Measurement Technology Conference Proceedings, 2008. IMTC 2008. IEEE, 2008.
[4] K. A. Reddy, B. George, N. M. Mohan, V. J. Kumar, “A Novel Calibration-Freee
Method of Measurement of Oxygen Saturation in Arterial Blood”, IEEE
Transactions on Instrumentation and Measurement, 58(5), 2009, 1699-1705
[5] M. Shafique, P. A. Kyriacou, S K Pal, “Investigation Of Pulse Oximeter Failure
Rates During Artificial Hypoperfusion Utilising A Custom Made Multimıde Pulse
Oximetry Sensor”, 33rd Annual International Conference of the IEEE MEMBS,
August 30 – September 3, 2011
[6] F. Adochiei, C. Rotariu, R. Ciobotariu, H. Costin, “A Wireless Low-Power Pulse
Oximetry System for Patient Telemonitoring”, The 7th International Symposium on
Advanced Topics In Electrical Engineering, May 12-14, 2011.
[7]. J. Bailey, M. Fecteau, N. L. Pendleton, “Wireless Pulse Oximeter”, Bachelor
Degree Thesis, Worcester Polytechnic Institute, April 24,2008
[8] Http://arduino.cc/ (son erişim 01.06.2014)
[9] http://arduino.cc/en/Main/ArduinoBoardMega2560 (son erişim 01.06.2014)
[10] http://processing.org/examples/setupdraw.html (son erişim 01.06.2014)
ÖZGEÇMİŞ
1991 yılında İstanbul Göztepe’de doğdu. İlköğretim ve lise öğrenimini İstanbul’da
tamamladı. 2009 yılında Öğrenci Seçme Sınavına (ÖSS) girerek Bolu’da Abant İzzet
Baysal Üniversitesi Elektrik ve Elektronik Mühendisliği bölümünü kazandı. Elektrik
ve Elektronik Mühendisliği Bölümü’nde son sınıf öğrencisi olarak mezun olma
aşamasındadır.
İletişim Adresi:
E-posta : [email protected]
LinkedIn: tr.linkedin.com/in/onuryolal

Benzer belgeler