Arduino ile Nabız Ölçer Yapımı KY-039 Kullanımı

Arduino ile Nabız Ölçer Yapımı KY-039 Kullanımı

Arduino ile nabız ölçer yapımı, gömülü sistemler ve medikal elektronik dünyasına adım atmak isteyen geliştiriciler için harika ve öğretici bir projedir. Bu rehberimizde, biyomedikal ölçüm sistemlerinin temeli olan Fotopletismografi (PPG) sinyal işleme tekniklerini ele alarak, piyasada yaygın olarak bulunan KY-039 Kızılötesi Nabız Sensörü‘nü inceleyeceğiz. Sensörden gelen gürültülü analog sinyalleri filtrelemeyi, elektrik şebekesinden kaynaklanan 50 Hz parazitleri yok etmeyi ve Arduino ile kararlı nabız dalga formları (PPG) elde etmeyi adım adım öğreneceğiz.

Diğer gelişmiş nabız ve biyosensör okuma rehberlerimiz:

Fotopletismografi (PPG) ve KY-039 Çalışma Prensibi

KY-039 sensörünün kalbinde Fotopletismografi (PPG) adı verilen optik bir ölçüm tekniği yatar. Bu yöntem, organların ve dokuların hacmindeki kan akışına bağlı değişimleri ışık absorbsiyonu (emilimi) üzerinden tespit eder. Donanım seviyesinde Kapsamlı Arduino Sensör Rehberi modellerinden biri olan KY-039, yüksek yoğunluklu bir kızılötesi (IR) Yarı İletken LED Teknolojisi elemanı ve bu ışığı karşıdan toplayan hassas bir fototransistörden oluşur.

Parmağınızı IR LED ile fototransistör arasına yerleştirdiğinizde şu fiziksel süreç gerçekleşir:

  1. Sistolik Evre (Kalp Kasılması): Kalp her pompaladığında, parmağınızdaki kılcal damarlara ani bir temiz kan hücumu olur. Kandaki hemoglobin miktarı artar, bu da kızılötesi ışığı daha fazla absorbe etmesine (emmesine) yol açar. Fototransistöre ulaşan IR ışık miktarı azalır ve analog çıkış voltajı düşer.
  2. Diyastolik Evre (Kalp Gevşemesi): Kalp çevrimi gevşeme evresine geçtiğinde kan hacmi azalır, IR ışık absorbsiyonu düşer. Foto-transistöre daha fazla ışık çarpar ve analog sinyal seviyesi yükselir.

Bu sürekli darbelenme (AC bileşeni), zaman içinde periyodik bir dalga formu oluşturur ve bu dalganın tepe noktaları (peaks) arasındaki süre bize nabız (BPM) bilgisini verir. Sensörün resmi şeması ve bacak bağlantı şemasına Joy-IT KY-039 Teknik Veri Sayfası (Datasheet) üzerinden ulaşabilirsiniz.

KY-039 Kızılötesi Optik Nabız Sensörü Modülü
KY-039 Biyomedikal Nabız Modülü

Devre Şeması ve Bağlantı Tablosu

KY-039 analog bir sensördür ve Arduino’nun Analog Giriş-Çıkış (ADC) pinlerine bağlanarak çalışır. Besleme voltajı gürültüsüz bir çalışma için 5V seviyesinde tutulmalıdır.

Arduino ve KY-039 Nabız Sensörü Bağlantı Şeması
Arduino Uno ile KY-039 kablolama diyagramı
KY-039 PinArduino Uno BağlantısıAçıklama
S (Signal)A0Analog Çıkış Sinyali
+ (VCC)5VPozitif Besleme Voltajı
– (GND)GNDToprak Hattı

Aşama 1: Ham Verinin Okunması (Filtresiz Grafik)

Eğer sensörün analog çıkışını hiçbir filtre uygulamadan doğrudan okuyup Seri Çizici (Serial Plotter) üzerinde görüntülersek, elektriksel ve çevresel faktörlerden ötürü son derece gürültülü ve kesintili bir grafik elde ederiz:

// KY-039 Ham Veri Okuma Kodu
const int sensorPin = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int rawValue = analogRead(sensorPin);
  Serial.println(rawValue);
  delay(10); // 100 Hz örnekleme sıklığı
}
KY-039 Filtresiz Ham Analog Sinyal Çıktısı
Ham analog verideki yüksek frekanslı gürültüler

Aşama 2: Hareketli Ortalama Filtresi (Moving Average Filter)

Ham verideki yüksek frekanslı rastgele elektriksel gürültüleri bastırmak için en hızlı ve etkili yöntemlerden biri Basit Hareketli Ortalama Filtresi (SMM) kullanmaktır. Bu algoritmada, son 4 veya 8 örnek sürekli bir dizi (buffer) içerisinde tutulur, her yeni okumada en eski veri silinip en yeni veri diziye eklenir ve bu grubun ortalaması alınır:

// Hareketli Ortalama Filtreli PPG Okuma Kodu
const int sensorPin = A0;
const int filterOrder = 8; // Filtre pencere boyutu
int readings[filterOrder];
int readIndex = 0;
long total = 0;
int average = 0;

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < filterOrder; i++) {
    readings[i] = 0;
  }
}

void loop() {
  // En eski okumayı toplamdan çıkar
  total = total - readings[readIndex];
  // Yeni veriyi oku
  readings[readIndex] = analogRead(sensorPin);
  // Yeni veriyi toplama ekle
  total = total + readings[readIndex];
  
  readIndex = (readIndex + 1) % filterOrder;

  // Ortalama değeri hesapla
  average = total / filterOrder;

  Serial.println(average);
  delay(10);
}
Hareketli Ortalama Filtresi Uygulanmış PPG Sinyali
Yumuşatılmış analog nabız dalgası

Aşama 3: Donanımsal 50 Hz Şebeke Parazitlerinin Temizlenmesi

Yukarıdaki grafikte, ana dalga formunun üzerinde küçük “tırtıklar” (zikzaklar) olduğunu fark edeceksiniz. Bu durum, Türkiye’deki 220V 50 Hz alternatif akım (AC) şebekesinden ve yapay aydınlatma armatürlerinden kaynaklanan optik gürültüdür. Lambalar saniyede 50 (veya floresanlar gibi 100) kez yanıp söner ve bu kızılötesi spektrumda parazit yaratır.

Mühendislik Çözümü (Entegrasyon Zamanlaması): 50 Hz sinyalin bir tam periyodu 20 milisaniyedir (T = 1/50 = 0.02 sn). Eğer biz analog ölçümlerimizi tam olarak 20 ms’lik pencereler boyunca entegre edersek (örnekleri bu süre zarfında alıp ortalamasını çıkarırsak), 50 Hz gürültü dalgasını tam bir periyodu boyunca entegre etmiş oluruz. Matematiksel olarak sinüzoidal bir dalganın tam periyottaki integrali sıfıra eşit olduğundan, şebeke gürültüsü tamamen yok olur (Notch filtre etkisi).

Eğer 60 Hz elektrik şebekesi kullanılan bir ülkedeyseniz, periyot süresini 16.67 ms (1/60) olarak güncellemelisiniz. İşte bu akıllı filtrelemeyi uygulayan nihai kararlı kod:

// 50 Hz Şebeke Gürültüsünü Yok Eden Gelişmiş Biyomedikal PPG Filtresi
const int sensorPin = A0;

void setup() {
  Serial.begin(115200); // Hızlı çizim için baud rate artırıldı
}

void loop() {
  unsigned long baslangic_zamani = micros();
  long toplam_deger = 0;
  int ornek_sayisi = 0;

  // 50 Hz için 20 ms (20000 mikrosaniye) boyunca entegrasyon yap
  while (micros() - baslangic_zamani < 20000) {
    toplam_deger += analogRead(sensorPin);
    ornek_sayisi++;
  }

  // 20 ms'lik entegrasyon penceresinin ortalamasını al
  int net_sinyal = toplam_deger / ornek_sayisi;

  Serial.println(net_sinyal);
}
Şebeke Gürültüsü Filtrelenmiş Kusursuz PPG Grafiği
50 Hz parazitlerden tamamen arındırılmış temiz biyomedikal PPG dalgası

Bu yöntem sayesinde hiçbir pahalı harici analog donanımsal aktif filtre kartına ihtiyaç duymadan, yalnızca yazılımsal entegrasyon yöntemiyle kusursuz bir biyomedikal sinyal kalitesi elde etmiş olduk.

PPG sinyal analizi, nabız dalgası hız hesaplamaları veya KY-039 sensörü ile yaşadığınız donanımsal kararsızlıklar hakkında sormak istediklerinizi yorumlar bölümünde bizimle paylaşabilirsiniz.

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.