Arduino ile MAX30100 Kalp Nabız Sensörü Kullanımı

Arduino ile MAX30100 Kalp Nabız Sensörü Kullanımı

Öncelikle MAX30100’ün nabız hızını nasıl ölçtüğünü açıklamaya çalışayım. Cihaz, biri kırmızı ışık yayan, diğeri kızılötesi ışık yayan iki LED’e sahiptir. Nabız hızı için yalnızca kızılötesi ışık gereklidir. Hem kırmızı ışık hem de kızılötesi ışık, kandaki oksijen seviyelerini ölçmek için kullanılır.

Eğer elinizde bu modül yoksa, farklı modüller kullandığımız diğer nabız ölçüm yazılarımıza bakabilirsiniz:

Arduino ile MAX30100 Kalp Nabız Sensörü Kullanımı max30100,kalp nabız sensörü,kalp nabız sensörü (max30102 - max30100),kalp hızı nabız sensörü (arduino),arduino ile max30100

Kalp kan pompaladığında, daha fazla kan olması sonucu oksijenli kanda bir artış olur. Kalp rahatladıkça oksijenli kan hacmi de azalır. Sonuçta cihaz, oksijenden zengin kanın artması ve azalması arasındaki süreyi bilerek nabız hızını hesaplar.

Oksijenli kan daha fazla kızılötesi ışığı emer ve daha fazla kırmızı ışık geçirirken, oksijensiz kan kırmızı ışığı emer ve daha fazla kızılötesi ışık geçirir. MAX30100’ün ana işlevi budur: her iki ışık kaynağı için de ışığı emme seviyelerini okur ve bunları I2C aracılığıyla okunabilen bir arabellekte saklar.

Yazı İçeriği

MAX30100 Modülü

Max30100
Max30100

Yaygın olarak bulunan iki adet MAX30100 devre kartı vardır. GY-MAX30100 modülünüz varsa:

Diğer modüllere kıyasla bu kart Arduino ile kullanıma hazırdır. Sadece bu kablolama kurulumunu takip edin:

GY-MAX30100 ModülüArduino UNO/Nano
VIN5V
GNDGND
SCLA5
SDAA4
INTD2

Sadece bu kablolama kurulumunu takip edin ve buradaki MAX30100 kütüphanesini kullanın. Kütüphanenin kullanımı oldukça kolaydır; örnek bir kod:

Burada kalp nabız hızı seri monitör aracılığıyla görüntülenir. Kan oksijen konsantrasyonunu eklemeniz gerekiyorsa, yalnızca şu satırı eklemeniz gerekir:

Serial.print( "SaO2: " );
Serial.print( result.SaO2 );
Serial.println( "%" );

Problemli MAX30100 Modülü

Eğer RCWL-0530’a sahipseniz:

Arduino ile MAX30100 Kalp Nabız Sensörü Kullanımı max30100,kalp nabız sensörü,kalp nabız sensörü (max30102 - max30100),kalp hızı nabız sensörü (arduino),arduino ile max30100

Maalesef bu modülü kullanıyorsanız yapacak çok işiniz var. Bu ucuz modülün bazı ciddi tasarım sorunları mevcut. Eğer veri sayfasına bakarsanız böyle bir şemayı kullandığını göreceksiniz:

Arduino ile MAX30100 Kalp Nabız Sensörü Kullanımı max30100,kalp nabız sensörü,kalp nabız sensörü (max30102 - max30100),kalp hızı nabız sensörü (arduino),arduino ile max30100

MAX30100 entegresi, VDD için 1.8V kullanır ve bu özel modül, bu voltajı elde etmek için iki regülatör kullanır. Bunda yanlış bir şey yok. Ancak yakından bakarsanız, SCL ve SDA pinleri 4.7k ohm dirençler aracılığıyla 1.8V’a çekilir! Bu, daha yüksek mantık seviyelerine sahip mikrodenetleyicilerle iyi çalışmayacağı anlamına gelir. Arduino, minimum 2 V’luk bir YÜKSEK voltajı algılayabilir!

Çözüm, dirençleri karttan çıkarmak (aşağıdaki resimde çevrelenmiştir) ve bunun yerine harici 4.7k ohm dirençler eklemektir.

Arduino ile MAX30100 Kalp Nabız Sensörü Kullanımı max30100,kalp nabız sensörü,kalp nabız sensörü (max30102 - max30100),kalp hızı nabız sensörü (arduino),arduino ile max30100

Dirençleri çıkartılmış modülün görüntüsü:

Dirençleri Ayrılmış Modül
Dirençleri Ayrılmış Modül

Dirençleri çıkardıktan sonra, bu kablo şemasını kullanarak bu modülü Arduino UNO’ya bağlayabilirsiniz:

Arduino ile MAX30100 Kalp Nabız Sensörü Kullanımı max30100,kalp nabız sensörü,kalp nabız sensörü (max30102 - max30100),kalp hızı nabız sensörü (arduino),arduino ile max30100

Burada SCL, SDA ve INT, 4.7k ohm’luk direnç aracılığıyla 3.3V’a çeker. Bu, Arduino UNO’nun MAX30100’ü aşırı beslemeden YÜKSEK mantık seviyesini tespit edebilmesini sağlar.

Örnek için bu kütüphaneyi kullandık. Kütüphane birkaç örnek sunar. En temel örnek hazır olarak kütüphane ile gelmektedir:

Bağlantı şemasını takip edip bu kodu Arduino’nuza yüklediyseniz, kart üzerindeki kırmızı LED yanmalıdır ve bunu seri monitörde görmelisiniz:

Arduino ile MAX30100 Kalp Nabız Sensörü Kullanımı max30100,kalp nabız sensörü,kalp nabız sensörü (max30102 - max30100),kalp hızı nabız sensörü (arduino),arduino ile max30100

Benzer bir çıktı alıyorsanız MAX30100’ün çalıştığı anlamına gelir. Tek yapmanız gereken, parmağınızı entegre’nin (LED’li olan) üstüne koymak ve nabız hızınız görüntülemektir

Eğer LED yanmıyorsa ve seri monitörde “FAILED” mesajını alıyorsanız, bu bir güç sorunu olabilir. Yukarıdaki kodun 58. satırına bakarsanız:

//pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

Bu, LED üzerindeki akımı ayarlar. Bu, başlangıçta, LED akımı varsayılan 50 mA olacak şekilde yorumlanmıştır. LED’den geçen akımı 7,6 mA’ya eşit yapmak için bunu yorumlayın. Bu güç sorununu çözecektir.

Bu arada, yukarıdaki setIRLedCurrent() işlevinde kullanabileceğiniz diğer olası değerler şunlardır:

 MAX30100_LED_CURR_0MA
 MAX30100_LED_CURR_4_4MA
 MAX30100_LED_CURR_7_6MA
 MAX30100_LED_CURR_11MA
 MAX30100_LED_CURR_14_2MA
 MAX30100_LED_CURR_17_4MA
 MAX30100_LED_CURR_20_8MA
 MAX30100_LED_CURR_24MA
 MAX30100_LED_CURR_27_1MA
 MAX30100_LED_CURR_30_6MA
 MAX30100_LED_CURR_33_8MA
 MAX30100_LED_CURR_37MA
 MAX30100_LED_CURR_40_2MA
 MAX30100_LED_CURR_43_6MA
 MAX30100_LED_CURR_46_8MA
 MAX30100_LED_CURR_50MA

Akım ne kadar yüksek olursa, LED’in o kadar parlak olduğunu ve cildinize o kadar derine ulaştığını unutmayın.

Sensör Güncelleme Hızı

Bu kod satırını çalıştırmaya gelince kullandığımız kitaplıktaki bu fonkyison ise şu işe yarar:

pox.update();

Bu satır sensör okumalarını günceller ve loop() içine yerleştirilir. Kitaplığın yazarı, bu işlevin çağrılması arasındaki sürenin 10 ms’den az olması gerektiğini vurgulamaktadır. Görünen o ki, MAX30100’ün örnekleme frekansını ayarlayabilirsiniz ancak kütüphanede bu frekans 100 Hz olarak ayarlanmıştır. Örnekleme frekansının düzenlenmesi, MAX30100’den gelen verileri işlemek için kullanılan filtrenin FIR katsayılarını gerektirir.

Kısacası, bu kodu kullanarak 10 ms’den fazla bir gecikme koyamaz veya bu süreyi loop() içinde yapamazsınız.

Bu nedenle yukarıdaki kod için şunu görüyoruz:

if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
   Serial.print("Heart rate:");
   Serial.print(pox.getHeartRate()); 
   Serial.print("bpm / SpO2:");
   Serial.print(pox.getSpO2());
   Serial.println("%"); 
   tsLastReport = millis(); 
}

normal delay() rutini yerine sensör değerlerini okurken. millis() işlevi arka planda çalışmaya devam eder ve kod yürütülmesini engellemez.

MAX30100 ile 16×2 LCD Kullanma

Zamanlama sorunları nedeniyle, şimdi MAX30100 ile diğer cihazları kullanırken bir sorun ortaya çıkıyor. pox.update()’nin 100 ms’den az olmamak üzere yürütüldüğünden emin olun.

Arduino ile MAX30100 Kalp Nabız Sensörü Kullanımı max30100,kalp nabız sensörü,kalp nabız sensörü (max30102 - max30100),kalp hızı nabız sensörü (arduino),arduino ile max30100

Arduino Kodu

loop() içinde hiçbir delay() yoktur ve görüntü yalnızca her saniyede bir güncellenir, bu nedenle pox.update() mümkün olduğunca hızlı yürütülür.

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.