Arduino ile PIR – Hareket Sensörü Kullanımı

Merhaba arkadaşlar!

Bu yazıda PIR yani hareket sensörünü kullanarak ortamdaki hareketleri algılamayı göstereceğiz. PIR, “Passive Infrared” yani pasif kızılötesi anlamına gelir. Bu sensör görüş alanına giren nesnelerden kızılötesi ışığı ölçerek hareket algılamayı sağlar. Bu işlemi, ortamda bulunan kızılötesi ışıktaki değişikliğe dayanarak gerçekleştirir. Özellikle bir insanın sensör aralığına girip girmediğini veya insan hareketlerini algılamada kullanılır. Uygulamaya geçmeden önce bu sensör hakkında bazı bilgiler vermek istiyorum.

Her insanın özel hayatını genç veya yetişkin olsun koruması doğal hakkıdır. İster bir bilim adamı olarak laboratuvar isterse de bir genç olarak size ait odayı izinsiz girişlerden korumak temel hakkınızdır. Bu alanları korumak isterseniz PIR sensörü işinizi oldukça görecektir. PIR ile odanıza sizden habersiz girenleri tespit edebilirsiniz. Tabi burada giren kişiyi doğrudan tespit etmekten ziyade hareketi algılamak asıl amaçtır. Bu sensör gündelik hayatta sıkça kullanılmaktadır. Kullanım alanlarına örnek olarak şunları verebiliriz:

  • Modern güvenlik sistemlerinde
  • Otomatik yanan lambalarda
  • Garaj kapısını otomatik açan sistemlerde
  • İnsanların varlığında çalışması gereken klima gibi elektrikli cihazlarda

PIR, hareket algılamayı şu şekilde gerçekleştirir. Mutlak sıfırın üzerinde bir sıcaklığa sahip olan tüm nesneler Kızılötesi radyasyon şeklinde ısı enerjisi yayar. Buna insan vücudu da dahildir. Bir nesne ne kadar sıcak olursa yaydığı radyasyon o kadar fazladır. PIR sensörü, bu tür kızılötesi radyasyon seviyelerini tespit etmek için özel olarak tasarlanmıştır.

Bu sensör temel olarak iki ana bölümden oluşur:

  • Pyroelektrik Sensör
  • Kızılötesi sinyalleri pyroelektrik sensöre odaklayan Fresnel lens adı verilen özel bir lens.

Bir Pyroelektrik Sensör aslında kızılötesi radyasyonun geçmesine izin veren bir malzemeden yapılmış iki dikdörtgen deliğe sahiptir. Bunların arkasında, biri pozitif çıkış, diğeri negatif çıkış üretmekten sorumlu iki ayrı kızılötesi sensör elektrotu bulunur. Bunun nedeni, ortam seviyelerinde değil, IR seviyelerinde bir değişiklik aramamızdır. Hareketi algılamayı sağlayan temel etken, sensör elektrotları arasındaki IR farkının meydana gelmesidir.

Bu sensörün görüntüsü aşağıdaki gibidir:

PIR Hareket Sensörü Görünümü

Resimde görüleceği üzere bu sensör 3 adet pin ile gelmektedir. Şimdi bu pinleri inceleyelim.

aOUT : Arduino’da bulunan dijital pinlerden herhangi birine bağlanır. Dijital çıkış üretir.

aVCC : +5V

aGND : Ground yani topraklama

Bu bilgileri verdikten sonra şimdi PIR sensörünü kullanarak ortamdaki hareketi algılayan bir proje geliştirebiliriz. Uygulama için ihtiyacımız olan devre elemanları aşağıdaki gibidir:

  • PIR Sensor x 1
  • 220 ohm x 1
  • Red Led x 1
  • Yeterince erkek-erkek bağlantı kablosu

Elemanları temin etikten sonra devremizi aşağıdaki gibi oluşturalım.

PIR Hareket Sensörü Devre Şeması

Yukarıda görülen devrede bağlantı işlemi aşağıdaki gibi yapılmıştır.

  • Sensörün VCC pini, 5V çıkışına bağlandı.
  • Sensörün GND pini, GND pinine bağlandı.
  • Sensörün OUT pini, Arduino’daki dijital 2 pinine bağlandı.
  • Red yani kırmızı ledimizin (+) ucu 5 nolu pine bağlandı.

Bu bilgilerden sonra devremiz aşağıdaki gibi olur.

PIR Hareket Sensörü Devresi

Yukarıdaki resimde kodu yükleyip devreyi çalıştırdıktan hemen sonra projemizin nasıl çalıştığını göstermektedir. Ortamda herhangi bir hareket yoksa led sönük olur. Eğer ortamda çok az dahi olsa bir hareket varsa, kırmızı led yanacaktır.

Projemiz ilk çalıştığında hareketsiz bir ortam ile karşılaştığı için kırmızı led sönük kalır. Eğer ortamda çok az bir hareket bile olsa ve bu sensör tarafından algılanırsa projemiz aşağıdaki gibi olur.

PIR Hareket Sensörü Çalışması

Yukarıdaki resimde dikkat edilirse kırmızı ledin yandığı görülür. Şimdi de projemizin kodlarını sizlere gösterelim. Devremizin kodu aşağıdaki gibidir.



int led = 5;                
int sensor = 2;              
int state = LOW;             
int val = 0;                 

void setup() {
  pinMode(led, OUTPUT);      
  pinMode(sensor, INPUT);    
  Serial.begin(9600);        
}

void loop(){
  val = digitalRead(sensor);   
  if (val == HIGH) {           
    digitalWrite(led, HIGH);   
    delay(100);                 
    
    if (state == LOW) {
      Serial.println("Hareket algılandı!"); 
      state = HIGH;      
    }
  } 
  else {
      digitalWrite(led, LOW); 
      delay(200);              
      
      if (state == HIGH){
        Serial.println("Hareket yok!");
        state = LOW;       
    }
  }
}

Kodların açıklaması aşağıdaki gibidir:


int led = 5;                
int sensor = 2;              
int state = LOW;             
int val = 0;  

Daha iyi bir kod deneyimi için uygulamanın hayat döngüsü boyunca sürekli olarak kullanacağımız pinleri değişkenlere atadık. Kırmızı led 5 ve sensörün OUT pini 2 nolu pinlere bağlanmıştır. State değişkenine varsayılan olarak LOW değerini verdik. Bunun amacı başlangıçta herhangi bir hareket olmadığını varsaymaktır. Val değişkeni ise sensörden gelen veriyi saklamak için kullanılmıştır.


pinMode(led, OUTPUT);      
pinMode(sensor, INPUT);    
Serial.begin(9600);   

pinMode metodu ile pinlerin giriş veya çıkış olması sağlanır. 5 nolu pin çıkış, 2 nolu pin ise giriş olarak set edilir.


val = digitalRead(sensor);   

digitalRead() komutu 2 nolu giriş pininden dijital veri okumayı sağlar. PIR sensöründen okunan dijital veri bu şekilde alınır.


  if (val == HIGH) {           
    digitalWrite(led, HIGH);   
    delay(100);                 
    
    if (state == LOW) {
      Serial.println("Hareket algılandı!"); 
      state = HIGH;      
    }
  } 


val değişkeni yani PIR sensöründen gelen veri HIGH ise kırmızı led yakılır ve 100 ms kadar beklenir. Ayrıca state yani hareket durumu LOW ise seri port ekranında “Hareket algılandı!” mesajı yazılarak ortamdaki değişim kullanıcıya gösterilmiş olur.


else {
      digitalWrite(led, LOW); 
      delay(200);              
      
      if (state == HIGH){
        Serial.println("Hareket yok!");
        state = LOW;       
    }
  }

val değişkeni yani PIR sensöründen gelen veri LOW ise kırmızı söndürülür ve 200 ms kadar beklenir. Ayrıca state yani hareket durumu HIGH ise seri port ekranında “Hareket yok!” mesajı yazılarak ortamdaki değişim kullanıcıya gösterilmiş olur.

Uygulamayı çalıştırdığımızda, sensörün çok hafif hareketleri bile algıladığı ve ledin yandığı gürülmüştür.

PIR Hareket Sensörü Çalışması

Hareketin veya hareketsizliğin olduğu durumlar seri port ekranında aşağıdaki gibi kullanıcıya gösterilir.

PIR Hareket Sensürü – Seri Port Haberleşmesi

Bu sensörü kullanarak evinizde veya ofisinizde olmadığınız zamanlarda sizden izinsiz yapılan girişlerden anında haberiniz olmasını sağlayabilirsiniz.

**Bana en büyük desteğiniz yazılarıma yorum yapmanız ve paylaşmanızdır.