Alışverişlerinizi Robotistan’dan Yapın

Faydalı içerikler oluşturarak size yardımcı olmak istiyoruz. Aynı zamanda hızlı teslimat ve müşteri memnuniyetini ön planda tutarak malzeme satışı yapıyoruz. Alışverişlerini robotistan.com‘dan yaparak sen de bize yardımcı olabilirsin 🙂

Kategoriler Arduino Projeleri

Arduino ile Nabız Ölçer

Herkese merhabalar, bu yazımızda medikal sensörlerden biri olan Pulse nabız sensörünü kullanarak nabız verisini okumayı ve elde ettiğimiz sonucu Nokia 5110 ekranda göstermeyi öğreneceğiz. Bu sayede kendi nabız ölçerimizi üretmiş olacağız.

Yapacağımız Projenin Son Hali

Nokia 5110 ekranların kullanımıyla ilgili detaylı bilgiye bu yazımızdan ulaşabilirsiniz >>> Arduino ile Nokia 5110 ekranı kullanımı

Bu yazıda anlatılan proje için ihtiyacınız olan malzemeler:

Pulse Nabız Ölçer Nedir ve Nasıl Çalışır?

Öncelikle, projemizin en önemli malzemelerinden biri olan Pulse Nabız Ölçer’i tanıyarak başlayalım. Pulse Nabız Ölçer, parmak ucunuza veya kulağınıza sabitleyerek kolayca nabzınızı ölçmeye yarayan bir sensördür. Bu sensörü 3V veya 5V ile beslemek mümkündür. Üzerinde bulunan gürültü engelleme özellikli devre sayesinde temiz ve stabil bir ölçüm alabilirsiniz. 

Pulse Nabız Ölçer’in çalışma prensibi şu şekildedir: Sensör parmak ucunuza veya kulağınıza gönderdiği ışığın ne kadarının yansıdığı bilgisini ölçerek sinyal pini üzerinden 0 ile 1023 arasında analog bir değer verir. Bu değer nabız atışı sırasında yükselir ve daha sonra tekrar düşer. Arduino’ya yazacağımız kod bu değişimleri kullanarak dakikadaki nabız sayımızı ölçer.

Nabız Ölçer Projesi

Projemiz iki kısımdan oluşacak. İlk kısımda, Pulse sensörü ile Arduino arasındaki bağlantıyı gerçekleştireceğiz. Bu kısmı başarıyla tamamladıktan sonra ise elde ettiğimiz nabız değerini 5110 ekranımıza yansıtacağız. İlk kısımla başlayalım.

Sensör bağlantılarını bu şekilde gerçekleştiriyoruz:

Pulse Sensörünün Bağlantısı

Sıra Arduino için olan kodu yazmaya geldi. Arduino IDE’yi açtıktan sonra, sensörümüzü kullanabilmek için yapmamız gereken ilk şey gerekli kütüphaneyi bilgisayarımıza kurmak. Bunun için, yukarıdaki seçeneklerden “Araçlar” seçeneğine tıklayıp oradan “libraryleri düzenle” seçeneğine tıklamalıyız. Bu işlemin ardından “Library Yönetici” olarak adlandırılan sekme açılacaktır. Buradan gerekli kütüphaneyi kurmak için yapmamız gereken arama kısmına “pulse sensor playground” yazmak, “versiyon seç” kısmından en güncel versiyonu seçmek ve “Kur” butonuna basmak.

Pulse Sensöründen Gelen Veriyi Okuma

Gerekli kütüphaneyi başarıyla kurduğumuza göre sıradaki adıma geçebiliriz. Yukarıdaki kısımda da anlattığım üzere, Arduino nabız atışının gerçekleşip gerçekleşmediğini sensörden gelen analog değerin büyüklüğüne göre karar veriyor. Bu nedenle bizim önceden bir threshold, yani eşik değeri, belirlememiz gerekiyor. Bu sayede Arduino belirlediğimiz eşik değerinin üzerinde bir sinyal geldiğinde nabız atışının gerçekleştiğini anlayabilecek. Eşik değerini belirleyebilmek için sensörden gelen değerleri görmemiz gerekiyor. Bunu yapmanın en kolay yolu indirmiş olduğumuz kütüphanede yer alan örnek kodlardan birini kullanmak. Gerekli örnek kod dosyasını açabilmek için sırasıyla Dosya>Örnekler>Pulse Sensor Playground>GettingStartedProject seçeneklerine tıklıyoruz. Daha sonra, ekranda açılmış olan kodu Arduino’muza yüklüyoruz. Şimdi gelen sinyalleri bilgisayarımızda görüntüleyebilmek için Araçlar>Seri Çizici seçeneklerine tıklıyoruz. Ekranda, sensörden gelen veriler ışığında ilerleyen bir çizgi oluştuğunu göreceksiniz. Şimdi yapmanız gereken sensöre parmak ucunuzu yerleştirmek. Şimdi ise ekranda aşağıdaki görseldeki gibi dalgalar oluştuğunu görmeniz gerekiyor. Eğer durum buysa herşey yolunda gidiyor demektir ve yolumuza devam edebiliriz. Ancak aşağıdakine benzer bir sinyal akışı elde edemediyseniz bu yazının en aşağısında bulunan “Sorun Giderme” kısmını inceleyebilirsiniz.

Eşik Değerini Belirleme

Sıradaki adım, ekranınızdaki grafiğe göre eşik değerini belirlemek. Bunun için öyle bir değer belirlemeliyiz ki grafikteki yükselişler bu değerin üzerine çıkmalı ama yükselişler dışındaki kısımlar da bu değerin altında kalmalı. Örneğin aşağıdaki görselde 520 uygun bir eşik değeri. Ama siz kendi değerinizi ekranınızdaki grafiğe göre belirlemelisiniz çünkü farklılık gösterebilir.

Eşik değerimizi de belirlediğimize göre sıra sensörümüz ile nabız değerini ölçüp Nokia 5110 ekranımıza yazdırmada. Bunun için öncelikle devremize 5110 ekranımızı eklemeliyiz. Aşağıdaki devre şemasında bunun nasıl yapıldığını görebilirsiniz.

Kod

Şimdi sıra, sensörden aldığı veriyle dakikadaki nabzı hesaplayıp 5110 ekranına yazdıracak kodu yazmaya geldi. Bu aşamada Pulse Playground ve LCD5110 Basic kütüphaneleri işimizi oldukça kolaylaştırıyor. Yazmamız gereken kodu aşağıda bulabilirsiniz. Her bir kısmın ne işe yaradığını yanlarına yorum satırı olarak yazdım. Yine de aklınıza takılan herhangi bir nokta olursa aşağıdaki Yorumlar kısmından sorabilirsiniz. İhtiyacımız olan  LCD5110 Basic kütüphanesini buradan indirip arduino/library/ klasörüne atabilirsiniz. Aşağıdaki kodda yer alan threshold değişkeninin değerini yazının öncei kısmından belirlemiş olduğunuz değerle değiştirmeyi unutmayın.

#include <LCD5110_Basic.h> //5110 ekranımız için gerekli kütüphaneyi ekliyoruz.
LCD5110 myGLCD(8, 9, 10, 11, 12); // Ekran objemizi bağlamış olduğumuz pinleri belirterek oluşturuyoruz
#define USE_ARDUINO_INTERRUPTS true    // Pulse kütüphanesinin daha doğru ölçüm yapabilmesi için bu ayarı etkinleştiriyoruz
#include <PulseSensorPlayground.h> //Yazının başında bilgisayarımıza kurmuş olduğumuz Pulse Playground kütüphanesini ekliyoruz.
int nabiz; //İçinde dakikadaki nabzı tutacağımız değişkeni oluşturuyoruz.
int lcd_ledi = 6; //5110 ekranımızın arka plan aydınlatmasının bağlı olduğu pini belirliyoruz.
extern uint8_t SmallFont[];
extern uint8_t BigNumbers[]; //5110 ekranımızda yazacağımız yazı için gerekli fontları ekliyoruz.
const int PulseWire = 0; // Pulse sensörümüzü bağlamış olduğumuz Analog pinini belirliyoruz.
const int LED13 = 13; // Arduino üzerindeki ledin nabzımızla birlikte yanıp sönmesi için bu değişkeni 13 numaralı pin olarak ayarlıyoruz.
int Threshold = 580; // Yazının başında belirlemiş olduğumuz eşik değerini bu değişkene atıyoruz.
PulseSensorPlayground pulseSensor; //Sensörümüzü kodumuzda kullanabilmek için onu obje olarak oluşturuyoruz.

void setup() {
  Serial.begin(9600);  //Bilgisayrımızla olan seri iletişimi başlatıyoruz.
  pulseSensor.analogInput(PulseWire); //Pulse sensörünün bağlıu olduğu pini belirliyoruz.
  pulseSensor.blinkOnPulse(LED13);       //arduino üzerindeki ledin nabzımızla yanıp sönmesini istediğimizi söylüyoruz.
  pulseSensor.setThreshold(Threshold); //Değişkene atamış olduğumuz eşik değerini uyguluyoruz.
  // put your setup code here, to run once:
  digitalWrite(lcd_ledi, HIGH); //5110 ekranın arka plan aydınlatmasına güç veriyoruz.
  myGLCD.InitLCD(); //5110 ekranımızı başlatıyoruz.
  myGLCD.setContrast(58); //5110 ekranımızın kontrastını belirliyoruz.
  myGLCD.setFont(SmallFont); //Birazdan yazacağımız yazıların küçük fontla yazılmasını sağlıyoruz.
  //myGLCD.drawBitmap(0,0, cmon, 84, 48);
  myGLCD.print("Dakikadaki", CENTER, 0);
  myGLCD.print("Nabziniz:", CENTER, 15); //Ekrana dakikadaki nabzınız yazdırıyoruz.
  myGLCD.setFont(BigNumbers); //Birazdan yazacağımız yazıların büyük sayı fontuyla yazılmasını sağlıyoruz.
  myGLCD.printNumI(0, CENTER, 25); //Dakikadaki nabzınız yazısının altına 0 yazıyoruz.
  if (pulseSensor.begin()) {
    Serial.println("Pulse sensörü objesini yarattık."); 
  } //Pulse sensörü başarıyla başlatılırsa bilgisayara mesaj gönderioyoruz.

}

void loop() {
  // put your main code here, to run repeatedly:
  if (pulseSensor.sawStartOfBeat()) { //Eğer nabız algılarsak
    nabiz = pulseSensor.getBeatsPerMinute(); //Dakikadaki nabzı nabiz değişkenine kaydediyoruz.
    myGLCD.clrScr(); //5110 ekranı temizliyoruz.
    myGLCD.setFont(SmallFont); //Birazdan yazacağımız yazıların küçük fontla yazılmasını sağlıyoruz.
    myGLCD.print("Dakikadaki", CENTER, 0);
    myGLCD.print("Nabziniz:", CENTER, 15); //Ekrana dakikadaki nabzınız yazdırıyoruz.
    myGLCD.setFont(BigNumbers); //Birazdan yazacağımız yazıların büyük sayı fontuyla yazılmasını sağlıyoruz.
    myGLCD.printNumI( nabiz, CENTER, 25); //Dakikadaki nabzınız yazısının altına dakikadki nabzı değerini yazıyoruz.
    Serial.println("Nabız attı. ");
    Serial.print("BPM: ");                        
    Serial.println(nabiz); //Dakikdaki nabız değerini aynıo zamanda bilgisayarımıza da gönderiyoruz.
  }


  delay(20); //20 milisaniye bekletiyoruyuz.

}

Arduino ile Nabız Ölçer projemizi tamamlamış olduk. Proje ile ilgili aklınıza takılan her türlü soru ve proje hakkındaki yorumlarınızı bekliyorum. Sonraki projelerde görüşmek üzere… 👋


Sorun Giderme

Eğer sensörünüzden düzgün bir veri akışı elde edemediyseniz bunun çeşitli sebepleri olabilir. Yazının bu bölümünden birkaç olası sorundan ve çözümlerinde bahsedeceğim.

Parmağınızı sensöre bastırma gücünüz oldukça önemli. Çok bastırmanız halinde parmağınıza kan gitmeyeceğinden nabzını ölçmek zorlaşır. Yeterince bastırmamanız durumunda ise sensörle parmağınız arasına ışık gürültüsü girer ve düzgün bir veri akışı elde edemezsiniz. Bu nedenle parmağınızı sensöre ne çok bastırmalısınız, ne de çok az bastırmalısınız.

Karşılaşabileceğiniz bir diğer sorun ise benim de projeyi yapış sürecinde karşılaştığım bir sorun. Arduino’yu besleme şeklinize göre bazı durumlarda sensör düzgün çalışmayabiliyor. Örneğin benim yaşadığım durumda, Arduino’nun bağlı olduğu dizüstü bilgisayar şarja bağlıyken düzgün bir veri akışı elde edemezken dizüstü bilgisayarı şarjdan çıkarınca düzgün bir veri akışı elde edebiliyordum. Aynı şekilde, denediğim farklı bilgisayarlarda da bazılarında düzgün sonuçlar elde ederken bazılarında edemedim. Bu nedenle eğer sensörden doğru veri elde etmede sorun yaşıyorsanız farklı bir bilgisayarda veya şarja takılı/değilken denemeyi, hiçbiri işe yaramaz ise Arduino’yu dışardan beslemeyi deneyebilirsiniz.

Yorumları Görüntüle

  • peki ben ekran yerine aldığı veriyi sesli bir şekilde belirtmesini istesem ne yapabilirim? Bu konuda bir fikriniz var mı?

  • Aşağıdaki kodda yer alan threshold değişkeninin değerini yazının öncei kısmından belirlemiş olduğunuz değerle değiştirmeyi unutmayın. burayı açıklarmısınız

    • Tabii ki açıklarım👍 Yazının ilk kısmında GettingStartedProject adında bir örneği Arduino'ya yükleyip sensörden gelen veriyi bir grafik halinde bilgisayarımızda görüyoruz. Yazının başındaki grafik resminde de görebileceğiniz üzere grafik belirli noktalarda yükseliyor ve sonra tekrar alçalıyor. Bir eşik değeri belirlerken yapmamız gereken grafiğin en yüksekteki değerinin belirlediğimiz eşik değerinden yukarıda, grafiğin diğer kısımlarının ise eşik değerinin altında olduğundan emin olmak. Örneğin yazının başında paylaşmış olduğum grafiği incelediğinizde, grafiğin yükselirken 520'yi geçtiğini ve başka hiçbir kısmın 520'yi geçmediğini görebilirsiniz. Bu nedenle o örnekte uygun eşik değeri 520 olacaktır. Fakat bu sizin için farklı olabilir, bu nedenle bahsettiğim adımlara yaparak kendi eşik değerinizi bulmalısınız. Sizin bahsettiğiniz cümlede ise şundan bahsediyordum: En altta paylaşmış olduğum kodda int Threshold = 580; şeklinde bir satır var. Bu satırda yer alan değeri az önce bahsetmiş olduğum şekilde bulduğunuz eşik değeri ile değiştirmelisiniz. Örneğin grafiğinizi inceleyerek eşik değerinin 410 olduğuna karar verdiyseniz bu satırı int Threshold = 410; şeklinde değiştirmelisiniz. Umarım sorunuzu yanıtlayabilmişimdir. Kafanıza takılan başka bir şey olursa yazmayı unutmayın. İyi günler:)

    • Merhabalar,
      Öncelikle yazıya olan ilginiz için teşekkürler :) 2x16 lcd ekranın Arduino ile kullanımıyla ilgili detaylı bir yazıya buradan ulaşabilirsiniz. Bu projeye nasıl dahil edebileceğinize gelecek olursak, kodun baş kısmında yer alan 5110 ekranın kütüphanesini ekleme ve ekranın bağlandığı pinleri belirleme kodlarını az önce bahsetmiş olduğum yazıda yer alanlarla değiştirmelisiniz. Daha sonramyGLCD.setFont(SmallFont); //Birazdan yazacağımız yazıların küçük fontla yazılmasını sağlıyoruz.
      myGLCD.print("Dakikadaki", CENTER, 0);
      myGLCD.print("Nabziniz:", CENTER, 15);
      myGLCD.setFont(BigNumbers);
      myGLCD.printNumI( nabiz, CENTER, 25);
      ve benzeri ekrana yazı yazdırdığımız yerlerdeki kodları lcd.print("Nabziniz: ");
      lcd.print(String(nabiz));
      şeklind yeni kütüphaneye uyarlıyoruz. Ayrıca eski kodda myGLCD.clrScr(); satırıyla ekrana temizlerken yeni kodda lcd.clear ( ); satırıyla temizlemelisiniz. Projeyi 2x16 ekrana nasıl uyarlayabileceğiniz hakkında bir fikir vermeye ve yol göstermeye çalıştım. Umarım faydalı olmuştur. Eğer herhangi bir noktada takılırsanız veya daha detaylı bir yardıma ihtiyacınız olursa tekrardan iletişime geçebilirsiniz. İyi günler dilerim...

    • Yapmış olduğunuz projenin çalışmaması pek çok nedene bağlı olabilir. Hatalı bağlantı, yanlış belirlenen bir eşik değeri, parmağınızı sensöre ne kadar bastırdığınız, sensörün güç beslenmesinin sağlıklı olup olmaması bunlardan yalnızca birkaçı. Eğer sorunun kaynağı hakkında en ufak bir fikriniz yok ise ve yazının soz kısmında yer alan sorun giderme basamaklarını uygulamış iseniz yazının ilk kısımlarından bahsettiğim grafiğinizin ekran görüntüsünü alıp onursertgil0@gmail.com mailine gönderirseniz en azından problemin nereden kaynaklandığını tespit edip size destek olabilirim. İyi günler 🙂

  • Biz burada ki her şeyi harfi harfine yaptık ama yanlış ölçüyor nabzı, ya çok yüksek ya çok az bunu nasıl düzeltebiliriz?

    • Merhabalar,
      Projenin düzgün çalışığ çalışmaması pek çok faktöre bağlı. Bu nedenle yapmamız gereken ilk şey problemin kaynağını anlamak. Eğer problemin ne ile alakalı olduğu hakkında bir fikriniz varsa paylaşabilir misiniz? Eğer problemin kaynağı ile ilgili hiçbir fikriniz yok ise yazının ilk kısımlarından bahsettiğim grafiğinizin ekran görüntüsünü alıp onursertgil0@gmail.com mailine gönderirseniz en azından problemin nereden kaynaklandığını tespit edip size destek olabilirim. İyi günler dilerim :)

  • Abı bız yaptık çalışıyor ama sağlıklı ölçmüyor dokunmadan 230 falan dıyor ne yapmalıyız

    • Merhabalar,
      Yazıda da bahsettiğim üzere sensörden sağlıklı bir veri akışı alamamanızın pek çok sebebi olabilir. Eğer yazıdaki Sorun Giderme kısmını okuyup denediyseniz ve halen bu sorunu yaşıyorsanız size yardımcı olmaktan mutluluk duyarım. Yazının ilk kısımlarından bahsettiğim grafiğinizin ekran görüntüsünü alıp onursertgil0@gmail.com mailine gönderirseniz en azından problemin nereden kaynaklandığını tespit edip size destek olabilirim. İyi günler :)

En Son İçerik

Arduino’nun Korkulu Rüyası: ESP8266

Herkese merhabalar! Daha önce hiç kablosuz internet bağlantısı ile proje yaptınız mı? IoT projelerine ilginiz var mı? Sizi bu yazımızda…

3 gün Önce

Arduino ve C# ile LCD Ekrana Yazı Gönderme – 7. Ders

Sonraki Ders > < Önceki Ders Arkadaşlar merhaba, bu dersimizde C# ile hazırlayacağımız form uygulaması üzerinden Arduino'ya bağlı LCD ekranımızı…

3 hafta Önce

3D Printer Yapımı – 553TL’ye Kendi 3D Yazıcını Yap

Herkese merhabalar! Bu yazımızda üç boyutlu yapımı için hangi adımları uygulamak gerekiyor, 3D yazıcı yapımı için gerekli olan malzemelerden ve…

4 hafta Önce

Lipo Pil Nedir? Çeşitleri ile Kapsamlı Lipo Batarya Rehberi

Birçok RC araçta ve robot projelerinde kullanılan Li-Po batarya çeşitlerini, güvenli kullanım ve şarj yöntemlerini bu videomuzu izleyerek öğrenebilirsiniz.

2 ay Önce

Arduino ve C# Haberleşmesi: Bluetooth ile Servo Motor Kontrolü – 6. Ders

Sonraki Ders > < Önceki Ders Arkadaşlar merhaba, bu derste hazırladığımız arayüz üzerinden seri haberleşmeyi kullanarak servo motor kontrolünü göreceğiz.…

2 ay Önce

Corby Smart Drone’ları İncele – Satın Alma Rehberi

Merhaba arkadaşlar. Uygun ve kaliteli drone bulabilir miyim diyorsanız bu yazı tam size göre! Bu yazımızda Corby Drone çeşitlerinden ve…

3 ay Önce