Arduino İle Nabız Ölçme ve Bluetooth İle Aktarma

Arduino İle Nabız Ölçme ve Bluetooth İle Aktarma Projesi ile nabzımızı ölçeceğiz ve nabız verimizi bluetooth ile telefonumuza aktaracağız. Gönderdiğimiz nabız verisini telefonumuzdan takip edeceğiz.

Projeye başlamadan önce bilmemiz gereken bir kaç konu var. Bunlara aşağıdaki linklerden ulaşabilirsiniz.

Projede Kullanılan Malzemeler

Pulse Nabız Sensörü ve Bluetooth Bağlantı Şeması

Arduino İle Nabız Ölçme ve Bluetooth İle Aktarma Projesi Devre Şeması
Arduino İle Nabız Ölçme ve Bluetooth İle Aktarma Projesi Devre Şeması

Arduino İle Nabız Ölçme ve Telefona Aktarma Kodu

Pulse nabız sensörünü kullanabilmeniz için gerekli olan kütüphaneyi aşağıdan indirebilirsiniz.

#define USE_ARDUINO_INTERRUPTS true    
#include <PulseSensorPlayground.h>     

const int PulseWire = 0;      //  Nabız sensörünün bağlanacağı analog pin
const int LED13 = 13;         // Kalp atışı gerçekleşince arduino dahili ledini yakacak olan pin
int Threshold = 580;           // Uygulanacak olan treşold değeri
                               
PulseSensorPlayground pulseSensor;  
//-----------------------Ortalama Alma-----------------
const int dizielemansayisi = 10;
int veridizisi[dizielemansayisi];      // okunan değerleri tutacak dizi tanımlanıyor
int okunanindex = 0;              // okunan elemanın index sayısı
int toplam = 0;                  // elemanların toplamı
int ortalama = 0;                // verilerin toplamını tutacak değişken
//-------------------------------------------------------------
void setup() {   

  Serial.begin(9600);         
  pulseSensor.analogInput(PulseWire);   
  pulseSensor.blinkOnPulse(LED13);       
  pulseSensor.setThreshold(Threshold);   
  if (pulseSensor.begin()) {
    Serial.println("Pulse Sensor projesi olusturuldu!");  
  }
  for (int thisReading = 0; thisReading < dizielemansayisi; thisReading++) {
    veridizisi[thisReading] = 0;
  }
}
void loop() {

 int myBPM = pulseSensor.getBeatsPerMinute(); 
 if (pulseSensor.sawStartOfBeat()) {            
  Serial.println("♥  Kalp Atisi Tespit Edildi ! "); 
  Serial.print("Nabiz: ");                       
  toplam = toplam - veridizisi[okunanindex];
  veridizisi[okunanindex] = myBPM;
  toplam = toplam + veridizisi[okunanindex];
  okunanindex = okunanindex + 1;
  if (okunanindex >= dizielemansayisi) {
    okunanindex = 0;
  }
  ortalama = toplam / dizielemansayisi; 
  Serial.println(ortalama);                    
 }else{

 }
 delay(20); 
 if(ortalama>80){
  Serial.println("Nabiz 80'den buyuk.");
 }else if(ortalama<80){
  Serial.println("Nabiz 80'den kucuk.");
 }                   
}

Öncelikle arkadaşlar pulse sensörümüz medikal bir ürün olmadığı için bize %100 doğru değerler vermemektedir. Bu sebeble asla hüzne kapılıp benim projem doğru çalışmıyor demeyin çünkü bu sensör çok hassas ve ortamdaki ışık kaynaklarından kolaylıkla etkilenmektedir. Hatta sizin sensöre sert veya hafif bastırmanız bile sensörde okunan değerlerin değişmesine sebeb olmaktadır. Hadi o zaman kodumuzu açıklamaya başlayalım.

#define USE_ARDUINO_INTERRUPTS true    
#include <PulseSensorPlayground.h>     

const int PulseWire = 0;      //  Nabız sensörünün bağlanacağı analog pin
const int LED13 = 13;         // Kalp atışı gerçekleşince arduino dahili ledini yakacak olan pin
int Threshold = 580;           // Uygulanacak olan treşold değeri
                               
PulseSensorPlayground pulseSensor; 

Burada projemize kullanılacak olan kütüphnemiz eklenmiştir ve interupts kullanılacağı belirtilmiştir. Pulse sensörümüzün hangi pine bağlanacağı belirlenmiştir. Sensörümüz kalp atışı gerçekleştiği zaman dahili olarak 13. pine bağlı olan ledi yakmak için 13. pin tanımlanmıştır. Bu kısımda Treshold diye bir değişkenimiz bulunmaktadır. Bu değişkenimizin türkçe anlamı eşik değeridir. Biz bu eşik değerimizi sensörden gelen veriyi bununla kıyaslama yapmak için kullanmaktayız. Bu kıyaslamada gelen verimiz bizim eşik değerimizden büyük ise kalp atışımız gerçekleşmiş olarak anlamaktayız ve son olarak kütüphanemizden bir tane nesne tanımlamaktayız.

//-----------------------Ortalama Alma-----------------
const int dizielemansayisi = 10;
int veridizisi[dizielemansayisi];      // okunan değerleri tutacak dizi tanımlanıyor
int okunanindex = 0;              // okunan elemanın index sayısı
int toplam = 0;                  // elemanların toplamı
int ortalama = 0;                // verilerin toplamını tutacak değişken
//-------------------------------------------------------------

Size sensörden gelen verilerin %100 doğru olmadığını söylemiştik. İşte bu yüzden biz gelen verilerin olabildiğince gerçeğe yakın olmasını istiyoruz. Bu yüzden gelen verileri 10 elemanlı bir dizi de tutup bunları toplayıp 10’a bölerek ortalamasını nabız olarak ölçmekteyiz. Bunu sebebi sensördeki ani değişimleri olabildiğince azaltıp gerçeğe yakın değerler almak için.

void setup() {   

  Serial.begin(9600);         
  pulseSensor.analogInput(PulseWire);   
  pulseSensor.blinkOnPulse(LED13);       
  pulseSensor.setThreshold(Threshold);   
  if (pulseSensor.begin()) {
    Serial.println("Pulse Sensor projesi olusturuldu!");  
  }
  for (int thisReading = 0; thisReading < dizielemansayisi; thisReading++) {
    veridizisi[thisReading] = 0;
  }
}

İlk olarak burada seri haberleşme hızımızı 9600 BaudRate başlatmaktayız. Daha sonra oluşturduğumuz Nabız sensörü nesnemizin kütüphanesinde gerekli olan elemanları tanımlıyoruz. İlk olarak nabız sensörünün takılı olduğu pin tanımlanmıştır. İkinci olarak kalp atışı tespit edilince yanacak olan ledimiz tanımlanmıştır. Üçüncü olarak kütüphanemizin gelen verilere uygulayacağı eşik değeri kütüphanemize tanımlanmıştır. Daha sonra nabız sensörü başlatılmıştır ve son olarak bizim ortalama almak için oluşturduğumuz 10 haneli elemanlarımızın ilk elemanları 0 olarak değiştirilmiştir.

void loop() {

 int myBPM = pulseSensor.getBeatsPerMinute(); 
 if (pulseSensor.sawStartOfBeat()) {            
  Serial.println("♥  Kalp Atisi Tespit Edildi ! "); 
  Serial.print("Nabiz: ");                       
  toplam = toplam - veridizisi[okunanindex];
  veridizisi[okunanindex] = myBPM;
  toplam = toplam + veridizisi[okunanindex];
  okunanindex = okunanindex + 1;
  if (okunanindex >= dizielemansayisi) {
    okunanindex = 0;
  }
  ortalama = toplam / dizielemansayisi; 
  Serial.println(ortalama);                    
 }else{

 }
 delay(20); 
 if(ortalama>80){
  Serial.println("Nabiz 80'den buyuk.");
 }else if(ortalama<80){
  Serial.println("Nabiz 80'den kucuk.");
 }                   
}

İlk olarak, myBPM değişkeninde bizim dakikadaki nabzımızı tutuyoruz. Eğer sensörümüz kalp atışı tespit ederse dakikalık nabız değerimizi veridizisi’ne eklemektedir. Eğer veridizisi dolmuş ise baştaki elemanı son okunan veri ile değiştirmektedir. Daha sonra dizinin ortalamasını alarak seri porta yazdırmaktadır ve eğer ortalama 80’den büyük ise nabızın 80’den büyük olduğunu seri porta yazdır. Eğer 80’den küçük ise 80’den küçük olduğunu seri porta yazdırmaktadır.

Bir projemizde burada biter. Takıldığınız kısmı yorum olarak sorabilirsiniz 🙂