Ateş Ölçer Projesi

09-04-2021 22:20
Ateş Ölçer Projesi
Ateş Ölçer Proje Kiti

Covid-19 salgını sebebi ile ön plana çıkan temassız ateş ölçme ihtiyacını karşılamak amacı ile hazırlanmış bir proje kitidir. MLX90614 gy-906 sensörü ile ateş ölçümü yapılıp  0,96" I2C OLED ekranda gösterilebilmektedir. Elin yaklaştığını anlamak için kızılötesi sensörü kullanılmaktadır. İşlemci olarak Arduino Pro Mini veya Arduino Nano kullanılmaktadır. 

Proje yapım aşamaları:

İlk önce şemada görüldüğü gibi elemanların bağlantısını yapınız.

Devre 

Kullandığımız OLED ekran I2C haberleşme özelliğine sahiptir. Arduinonun SDA ve SCL pinlerine bağlamamız gerekir. Arduino uno, nano gibi kartlarda A4 ve A5 pinleridir. A4 SDA ve A5 SCL pinidir. OLED ekran VCC pini arduino nanonun 5V pinine, GND pinide nanonun GND pinine bağlanmalıdır.  
MLX90514 ateş ölçer sensörümüz de yine I2C haberleşme özelliğine sahiptir. Yine SDA ve SCL pinlerine bağlanmalıdır. I2C haberleşme sisteminde aynı hat üzerine birden fazla cihaz bağlanabilir. Her cihazın bir ID si olur ve iki tel üzerinden gönderilen data sadece ilgili ID ye sahip cihaz tarafından alınır ve işlenir. Bağlantı yaparken şemadaki gibi bağlantı yaparak haberleşme ve enerji pinlerini bağlayın. 

Elimizin ateş okutmak için yaklaştığını algılayabilmek içinde bir IR sensör kullanıyoruz. Sensörümüz bize dijital bilgi vermektedir. Elimizi yaklaştırdığımızda potansiyometre ile ayarlanan mesafeye geldiğinde 0 bilgisi verir. Elimiz uzaklaştığında ise 1 bilgisi verir. Kod yazarken bu bilgi bize lazım olacak. 

Sistemin çalışma algoritmasını oluşturalım.

> Sisteme enerji verildiğinde kod kısmında ilk önce gerekli ayarlar yapılacak, gerekli kütüphane dosyaları çalıştırılacak.

> Ana program içerisinde IR sensör okunacak ve el yaklaşmadıysa (Yani 1 bilgisi geliyorsa) OLED ekrana "Elinizi uzatın" yazısı gönderilecek. 

> Eğer IR sensör elimizi görürse (yani 0 bilgisi gönderirse) ilk önce ateş ölçer sensörden ateş bilgisi alınacak sonra bu bilgi değerlendirilecek. Eğer 37.5 dereceden büyük ise " YÜKSEK" yazısı ekrana gönderilecek ve ateş değeri yazılacak. 37.5 dereceden küçük ise "NORMAL" yazısı ekrana gönderilecek ve ölçülen değer ekrana yazılacak. Yazıların okunabilmesi için kısa bir süre ekranda kalması sağlanacak. Bu arada buzzer ile gerekli uyarı sesleri çıkartılacak.

> Kod tekrar IR sensörü okuduğu ana programa dönecek.

 

Yukarıda yazdığımız algoritma doğrultusunda aşağıdaki kodu oluşturalım.

 

inculude

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

double ATES;  // ölçtüğümüz ateş değerini kayıt edeceğimiz değişken tanımı

int sure=1000;

//***********************oled 128x64 piksel ekran ayarları*****************

#define SCREEN_WIDTH 128 // OLED display genişlik piksel sayısı

#define SCREEN_HEIGHT 64 // OLED display yükseklik piksel sayısı 


#define OLED_RESET     -1 // Reset pin 

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


#define LOGO_HEIGHT   16

#define LOGO_WIDTH    16


//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

//********* Şemada gösterilmeyen Buzzer ve LED isteğe bağlıdır. Ama olursa proje daha anlamlı olur.

#define IRpin 3   //  IR sensör D3 pinine bağlanacak

#define BUZZER 5  // Buzzer D5 pinine bağlanacak

#define LED  6    // LED 6 nolu pine bağlanacak 


/*I2C haberleşme sisteminde ekrana sürekli değer gönderdiğimizde

bir süre sonra sram bellek şişmeye başla ve donmalar olmaya başlar. 

Bu sebeple ekran daki yazı değişmeyecek ise tekrar tekrar ekrana aynı

yazıyı göndermemek için bir değişken oluşturabiliriz.

mt  değişkenini bu sebeple oluşturduk.

*/

int mt = 0; // SRAM şişmesin değişkeni



void setup() {

 //****  pinler giriş çıkış olarak yönlendiriliyor.*********

  pinMode(IRpin, INPUT);

  pinMode(BUZZER, OUTPUT);

  pinMode(LED, OUTPUT);

  //** ateş ölçer kütüphanesi başlatılıyor ****

  mlx.begin();

  digitalWrite(LED,1);

  delay (500);

  digitalWrite(LED,0);

  delay (500);

  digitalWrite(LED,1);

  delay (500);

  digitalWrite(LED,0);

  delay (500);


  

  //******************oled kütüphanesi başlatılıp ayarlanıyor.**************


  //***********0x3C bizim kullandığımız OLED ekranın I2C adresi *****************

 if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 

    for(;;); // Ekran hazır olana kadar bekliyor

  }

  display.display(); // display kütüphanesi komutu işlemi onaylamaya yarıyor.

  delay(2000); // 2 sn ekran aktif olması için bekleniyor


  // Buffer temizleniyor

  display.clearDisplay(); //*** üstteki komut onaylanıyor.


   basla(); // İlk açılışta ekrana Makers Dukkan yazdırmak için bir seferliğine çelışacak fonksiyon

 

  ekranaYaz();    // Ekrana yazı gönderdiğimiz fonksiyon



 

  //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

}


//********************oled ekrana yazma fonksiyonu *********************

void ekranaYaz(void) {

  display.clearDisplay();  // bu komut ekranı siler.  

 

  display.setTextSize(4); // Yazı boyutunu ayarlıyoruz

  display.setTextColor(WHITE);  // Yazı rengini arıyoruz

  display.setCursor(15, 25);   // Yazını hangi pikselden başlayarak yazmaya başlayacağını ayarlıyoruz.

  

  ATES = mlx.readObjectTempC();  // Ateş sensörünü okuyup ATES değişkenine kayıt ediyoruz.

          

  display.println(ATES,1); //  Ekrana ATES değişkeni içindeki değeri yazmasını söylüyoruz.

  display.display();      // Yukarıdaki yazdığımızı onaylıyoruz ve ekran da görünmesini sağlıyoruz.

  delay(100);   // Ekran da okunabilmesi için bir süre 

      

}


//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

void basla(){

  display.clearDisplay(); // bu komutlar yukarıda açıklandı 

   display.setTextSize(2); 

  display.setTextColor(WHITE);

  display.setCursor(19, 2);

  display.println("Makers");

  display.setCursor(18, 25);

  display.println("Dukkan");

    

  display.display();      // Maker Dukkan Yazısını ekran da gösteriyoruz. 2 sn boyunca

  delay(2000);

}


void loop() {

  

    

 //******* IR sensörü okuyoruz  ******* El yaklaşmadıysa 1  yaklaştıysa 0 gelecek ******

 

 if (digitalRead(IRpin) == 0)  

  { 

    // Elimizi gördüyse bu kod çalışacak

    

    ATES = mlx.readObjectTempC();  // Ateş sensörünü oku ve ATES değişkenine yaz

    

    while (ATES > 37.6 && ATES < 50) {

      //****** okunan ateş değeri 37.5 ten büyük ve 50 dereceden küçük ise bu kod alanı çalışacak **

       ekranaYaz(); // Ateş değeri ekrana yazılacak

  /*        

   *    ekrana ilk defa buradan veri gönderecek isek mt değişkeni içi 0 olacaktır ama daha önce 

   *    gönderdiysek 1 olacağı için alttaki kod çalışmayacaktır.

   */

      if (mt == 0) {   

        digitalWrite(BUZZER,1);  // Buzzer i çalmaya başla

        display.clearDisplay();  // ekranı sil

 

  display.setTextSize(3); // Yazı boyutu

  display.setTextColor(WHITE);  // yazı rengi

  display.setCursor(5, 25);  // yazılacak yer

  display.println("YUKSEK");   // Ateş yüksel olduğunu ifade etmek için YUKSEK yazısı

  display.display();      // Ekranda göster

  delay(100);

        mt = 1;  // tekrar aynı kodu çalıştırmamak için  mt değişkeni 1 yapıldı

        delay(1500);

        digitalWrite(BUZZER,0); // Buzzer susturuldu  yaklaşık 2 sn civarı ses verdi uyarı amaçlı

      }

      

     ATES = mlx.readObjectTempC();  // Ateşi tekrar okuyup değişkene yazıyoruz.

    }

    while (ATES <= 37.5 && ATES >= 28)  //  Ateş 28 ile 37.5 arasında ise bu kod kısmı çalışacak **

    {

      digitalWrite(BUZZER,1);

     ekranaYaz(); 

    delay (100); 

    digitalWrite(BUZZER,0);

       delay (1000); 

      if (mt == 0) {

       display.clearDisplay();

 

  display.setTextSize(3);   // ***  :)) ***

  display.setTextColor(WHITE);

  display.setCursor(5, 25);

  display.println("Normal");

  display.display();      

  delay(100);

        mt = 1;

        delay(1500);

      }

      

      ATES = mlx.readObjectTempC(); // Ateşi tekrar okuyup değişkene yazıyoruz.

    }


  }

  else {   // Eğer IR sensör elimizi görmüyorsa kod bu kısımda dönecektir. Elimizi görene kadar while döngüsünden çıkmayacak

    while (digitalRead(IRpin) == 1)

  {

    

  

//***********************************

if (mt == 0) {  // Bir defa ekrana Elinizi uzatın yazdıktan sonra tekra tekrar yazı göndememek için bu if sorgusunu kurduk.

   display.clearDisplay();

 

  display.setTextSize(3); 

  display.setTextColor(WHITE);

  display.setCursor(2, 2);

 

  display.print("Elinizi"); // Ekran da ** Elinizi Uzatın  ** yazacak  

  display.setCursor(9, 38);

  display.println("UZATIN");

  display.display();      

  delay(100);

    mt = 1;  

  }

  }

    mt = 0;  // IR sensör elimizi görünce döngüden çıkınca mt değişkenini 0 yapıyoruz. 

  }

}

Bu kodu arduino IDE'sinde yazıyoruz.  Sensör ve ekran kütüphanelerini C: deki arduino libraries klasörüne kopyalıyoruz. Sensör kütüphanelerini aşağıdaki linklerden indirebilirsiniz.

 Derleyip arduinoya yüklüyoruz.

 

OLED ekran kütüphanesi için tıklayınız.

 MLX90614 kütüphanesi için tıklayınız.


Blog Etiketleri :
IdeaSoft® | E-Ticaret paketleri ile hazırlanmıştır.