back to top

Arduino Dersleri #15: Arduino Hareket Sensörü Kullanımı (PIR Sensörü)

Herkese merhabalar ! Blog sayfamızda Arduino ile pek çok proje yaptık ve yapmaya devam ediyoruz. Bu projelerle ilgili sorularınızı yazının hemen altındaki Yorum Yap kısmından bizimle paylaşabilirsiniz. Bu yazımızda hareket (PIR) sensörü kullanarak Arduino ile basit hırsız alarmı uygulaması yapacağız. Bu sayede hareket sensörünün kullanımını öğrenceğiz ve Arduino ile birçok farklı proje yapabileceğimizi göreceğiz. Hadi öyleyse çalışmaya başlayalım !

PIR Sensörü ile Raspberry Pi derslerimizde de uygulama yapmıştık >>> Raspberry Pi 3 PIR Sensör ile Hareket Algılama

Arduino İle Hareket Sensörü Diğer Adıyla PIR (Passive Infrared Sensör) Kullanımı

PIR ismi Passive Infra-Red kelimelerinin baş harflerinden gelmektedir. Bu da bu sensörün kızılötesi dalgalarla çalıştığı anlamına gelir. Hareket sensörü ortamdaki sıcaklık ve kızılötesi dalga değişimlerini algılamaya yarayan sensörlerdir. Yapılarında bir fresnel lens bulunur. Bu lens sayesinde ortamdaki nesnelerden gelen ışınlar sensörün odaklanmasını sağlar. Ortamda bir dalga değişimi olduğunda sensör algılama işlemi gerçekleştirir.

PIR Sensörü ve diğer tüm sensörler hakkında detaylı bilgi almak için blog yazımızı ziyaret edebilirsiniz.

Arduino ile PIR sensörünün kullanımı dersimizde devrede yalnızca bir servo motor kullanmıştık. Hareket sensörü ile daha önce hiç çalışmadıysanız kanalımızdaki videomuzu takip ederek hazırlanabilirsiniz. PIR sensörü ile ilk uygulamamızı yapmak için aşağıdaki devreyi kurarak Arduino kodunu yüklememiz yeterli olacaktır.

PIR Sensörü Servo Motor Devresi
PIR Sensörü Servo Motor Devresi
#include  <Servo.h>  //Servo kütüphanemizi ekliyoruz.
int pirPin = 8; //Sensörü takacağımız pin
int servoPin = 9; //Servoyu takacağımız pin
int hareket; //Sensörden aldığımız veri
Servo motor; //Servo motor değişkeni
void setup() {
  motor.attach(servoPin); //Servomuzu 9. pin ile ilişkilendiriyoruz.
  pinMode(pirPin, INPUT); //Sensör pinimizi giriş olarak ayarlyoruz.
}
void loop() {
  hareket = digitalRead(pirPin); //Sensörden okuma yapıyoruz.
  if (hareket == HIGH) { //Hareketlilik var ise içerideki komutlar uygulanır.
    motor.write(150);
    delay(250);
    motor.write(30);
    delay(250);
    motor.write(150);
    delay(250);
    motor.write(30);
    delay(250);
    motor.write(150);
    delay(250);
    motor.write(30);
    delay(250);
    motor.write(90);
  } else { //Hareketlilik yok ise içerideki komutlar uygulanır.
    motor.write(90);
  }
}

Şimdi İse Arduino ve Hareket Sensörünü Kullanarak Hırsız Alarmı Yapalım

Şimdi ise PIR sensörü kullanarak gerçek bir proje yapmaya hazırız ! Hareket sensörü, buzzer ve LED kullanarak basit bir hırsız alarmı uygulaması yapacağız. Kuracağımız devrede hareket sensörümüz bir hareket algıladığında bu bilgiyi Arduino’ya aktaracak ve Arduino’nun çıkışına bağlı olan LED ve buzzerı tetikleyecektir. Aynı zamanda hareket algılama işlemini seri port ekranından da takip edebileceğiz. Hadi öyleyse projemize başlayalım !

Gerekli Malzemeler:

Devre Şeması

Basit hırsız alarmı yapımı için gerekli devreyi aşağıdaki gibi kuralım:

Arduino Hırsız Alarmı Devresi
Arduino Hırsız Alarmı Devresi

Basit Hırsız Alarmı Arduino Kodu

int sensor = 2;
int led = 13;
int buzzer = 10;
int sensordurum = LOW;
int deger = 0;
int it = 0;
void setup() {
  pinMode(sensor, INPUT);
  pinMode(led, OUTPUT);
  pinMode(buzzer, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  deger = digitalRead(sensor);
  if (deger == HIGH) {
    digitalWrite(led, HIGH);
    playTone(300, 160);
    delay(150);
    if (sensordurum == LOW) {
      Serial.println("Hareket Tespit Edildi!");
      sensordurum = HIGH;
    }
  } else {
    digitalWrite(led, LOW);
    playTone(0, 0);
    delay(300);
    if (sensordurum == HIGH) {
      Serial.println("Hareket Sonlandi!");
      sensordurum = LOW;
    }
  }
}
void playTone(long duration, int freq) {
  duration *= 1000;
  int period = (1.0 / freq) * 1000000;
  long elapsed_time = 0;
  while (elapsed_time & it, duration) {
    digitalWrite(buzzer, HIGH);
    delayMicroseconds(period / 2);
    digitalWrite(buzzer, LOW);
    delayMicroseconds(period / 2);
    elapsed_time += (period);
  }
}

Son Çıkan Yazılar

25 YORUMLAR

  1. İyi günler. Hırsız alarm sistemini yaptığımda hareket olmadığında bile led ve buzzer sürekli belli aralıklarla yanıp ses çıkartıyor. Aynı kodları yazıp aynı devreyi kurduğum ve hassasiyetleriyle oynadığım halde bu sorun gitmedi. Bu sorunu çözmek için ne yapabilirim ?

    • Merhaba Kübra hanım,
      Yukarıdaki kod eksik. Yanlış diyemeyeceğim çünkü ben birşey anlamadım. Ama kendi yazdığım basit kod aşağıda. Denedim çalışıyor. Pinleri koda göre değiştirmeyi unutmayın!
      int sensor=8;
      int led=11;
      int buzzer=10;
      int sensordurum=LOW;
      int deger=0;

      void setup() {
      // put your setup code here, to run once:
      pinMode(sensor,INPUT);
      pinMode(led,OUTPUT);
      pinMode(buzzer,OUTPUT);
      Serial.begin(9600);
      }

      void loop() {
      // put your main code here, to run repeatedly:
      sensordurum=digitalRead(sensor);

      if(sensordurum==HIGH){
      Serial.println(“hareket var”);

      digitalWrite(led,HIGH);
      tone(buzzer,440);
      delay(3000);
      noTone(buzzer);
      }
      else
      {
      Serial.println(“hareket yok”);

      digitalWrite(led,LOW);
      noTone(buzzer);
      delay(300);
      }

      }

      • sizin kodunuzu denedim özgür bey fakat hareket yok demiyor aslında internette bu proje için her kodu denedim ama hareket algılıyor hep anlamadım gitti

      • dostum senin yazdiğin kodu denedim hem ardunyo belli aralıklarla kendisi yanıp söryo hemde Serial.println(“hareket var”); ve Serial.println(“hareket yok”); kodlarını ardunyoda kontrol et dediğimde sildiriyo bunun için yapabileceğin bir şey varsa yardim edersen evinirim

    • int sensor = 2;
      int led = 13;
      int buzzer = 10;
      int sensordurum = LOW;
      int deger = 0;
      void setup() {
      pinMode(sensor, INPUT);
      pinMode(led, OUTPUT);
      pinMode(buzzer, OUTPUT);
      Serial.begin(9600);
      }
      void loop() {
      deger = digitalRead(sensor);
      if (deger == HIGH) {
      digitalWrite(led, HIGH);
      playTone(300, 160);
      delay(150);
      if (sensordurum == LOW) {
      Serial.println(“Hareket Tespit Edildi!”);
      sensordurum = HIGH;
      }
      } else {
      digitalWrite(led, LOW);
      playTone(0, 0);
      delay(300);
      if (sensordurum == HIGH) {
      Serial.println(“Hareket Sonlandi!”);
      sensordurum = LOW;
      }
      }
      }
      void playTone(long duration, int freq) {
      duration *= 1000;
      int period = (1.0 / freq) * 1000000;
      long elapsed_time = 0;
      while (elapsed_time < duration) {
      digitalWrite(buzzer, HIGH);
      delayMicroseconds(period / 2);
      digitalWrite(buzzer, LOW);
      elapsed_time += (period);
      }
      }

  2. merhaba, hareket sensörüm kendi kendine değerler oluşturuyor, mesela ortamda hareket yokken buzzer çalıyor ve ya bir kez hareket gördüğünde durmuyor. öneriniz nedir?

    • Merhaba Efe Bey,
      Yalnızca Arduino İle Hareket Sensörü Diğer Adıyla PIR (Passive Infrared Sensör) Kullanımı kodunda yer alan servo motorun kütüphanesini kurmak gerekmiyor. Sadece kodu yazmak yeterli. Servo kütüphanesi Arduino kütüphaneleri içinde mevcut. Ama haklısınız, yukarıda yer alan kodda bir eksiklik var “#include” dan sonrası yazılmamış. Kod şöyle olmalı:”#include ”
      Aslında “#include”u silip arduino programının üzerindeki bölümlerden taslak>library ekle>Arduino Kütüphaneler başlığı altındaki Servo’ya tıkladığında otomatik eklenecektir.
      İyi çalışmalar…

  3. Merhaba,
    Pır hareket sensöründe her seyi eksiksiz yapmama rağmen
    ‘servoPin’ was not declared in this scope hatası aldım. Bunu düzeltmek için ne yapabilirim? İlk ardunio denemem oldukca çaylak durumdayım.

  4. Hocam merhabalar. Photecelli sokak lambası yapmak istiyorum. içinde bir adet ışık sensörü, bir adet hareket sensörü ve bir adet led bulunacak.
    mantık şu ; gece hareket var ise lambayı yak, gece hareket yok ise lambayı yakma
    gündüz hareket var ise lambayı yakma, gündüz hareket yok ise lambayı yakma gibi

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz