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.
- Arduino İle Analog Veri Nasıl Okunur?
- HC06 Bluetooth Modülü Nedir ve Teknik Özellikleri Nelerdir?
- Arduino HC06 Bluetooth Modülü Kullanımı
Projede Kullanılan Malzemeler
- Arduino Uno
- Pulse Nabız Sensörü
- HC06 Bluetooth Modülü
- Jumper Kablo
- 1 adet android telefon
Pulse Nabız Sensörü ve Bluetooth Bağlantı Ş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 🙂
Bağlantıları yaptık ve kodu yapıştırdık arduino bluetooth kontrllerdan nasıl görücez nabzı
İlk başta telefonunuzun kendi bluetooth uygulamasından hc06 modülü ile eşleştirmeniz lazım. Daha sonra arduino bluetooth controller uygulamasından hc06 modülünü seçip terminal modda açıp arduinonuzun gönderdiği verileri görebilirsiniz.
pulse sensör aynı değerde kalıyor ne yapmalıyım?
Vucudunuza tam temas etmiyor veya dışarıdan fazla ışığa maruz kalıyor olabilir mi?
Merhaba,
Devremi kurdum , arduino yazılım yükledim herhangi bir hata ile karşılaşmadım. kütüphanelerim tam
telefonuma arduino bluetooth control uygulamasını indirdim. ilk önce telefonumun bt bağlantısını sağladım modül ile daha sonra uygulama üreinden hc-6 modülünü seçerek terminal ekranını açtım. elimi nabız sensörü üzerine koyuyorum ama terminal üzerinden herhangi bir veri göremiyorum. eksik veya atladığım bir kısım mı var?
Yardımcı olabilir misiniz. Durum biraz acil ödev olarak seçtim projeyi ama çalıştıramadım şuan.
kalp atışı tespit etmiyor olabilir. Kalp atışı tespit ettiğinde arduinonun 13. pinine bağlı olan dahili ledin yanıp sönmesi lazım. Bunu bir süre yapması lazım ki nabız tespiti yapılabilinsin.