BP–09 · Başlangıç projesi

PIR Sensörlü Hareket Alarmı

Otomatik yanan koridor lambaları ve hırsız alarmları aynı sensörü kullanır: PIR. Bu projede HC-SR501 sensörüyle insan hareketini algılayan, LED ve siren sesiyle uyarı veren bir güvenlik sistemi yapacağız.

SeviyeBaşlangıç
Süre35 dk
Malzeme9 çeşit
HC-SR501KızılötesiDurum değişkeniKenar algılamaSensör ısınma süresi

Proje hakkında

Tüm canlılar vücut ısıları nedeniyle kızılötesi ışık yayar. PIR (Pasif Kızılötesi) sensörü bu ışığı algılar, ama sabit bir ısı kaynağına değil, görüş alanındaki değişime tepki verir. Bu yüzden odada oturan birini değil, hareket eden birini fark eder.

Sensör hareket algıladığında çıkış pinini kendiliğinden HIGH yapar; yani Arduino açısından bir butonu okumaktan farkı yoktur. Bu projede ayrıca "durum değişkeni" kullanarak Seri Port Ekranına sadece hareketin başladığı ve bittiği anı yazdırmayı öğreneceğiz.

  • PIR sensörünün çalışma prensibini
  • Sensör üzerindeki hassasiyet ve süre ayarlarını
  • Durum değişkeniyle olayın başlangıç ve bitişini yakalamayı
  • Sensör ısınma süresinin önemini

Malzeme listesi

Projeyi tamamlamak için aşağıdaki 9 çeşit malzemeye ihtiyacınız var. Parçaların çoğu Arduino başlangıç setlerinde hazır olarak bulunur.

Arduino Uno R3 1 adet

Projenin beyni. Nano veya Mega ile de aynı kod çalışır.

Breadboard 1 adet

Lehimsiz devre kurmak için yarım boy (400 delik) yeterlidir.

HC-SR501 PIR hareket sensörü 1 adet

Beyaz kubbe şeklinde Fresnel lensli, yaklaşık 7 m algılama mesafesi.

Pasif buzzer 1 adet

Siren sesi için.

5 mm kırmızı LED 1 adet

Görsel uyarı.

220 Ω direnç 1 adet

LED'i aşırı akımdan korur. Renk kodu: kırmızı-kırmızı-kahverengi.

Jumper kablo (erkek-dişi) 3 adet

PIR sensörünün pinleri için.

Jumper kablo (erkek-erkek) 4 adet

USB A-B kablosu 1 adet

Kodu yüklemek ve kartı bilgisayardan beslemek için.

Devre bağlantıları

Bağlantıları USB kablosu takılı değilken yapın. Her satır, bileşenin hangi bacağının Arduino'nun hangi pinine gideceğini gösterir; çizgi rengi önerilen kablo rengidir.

PIR VCC5VSensör 4,5–20V ile çalışır
PIR OUTD2Hareket varsa HIGH (3,3V)
PIR GNDGND
LED anot (+)D13220 Ω direnç üzerinden
Buzzer +D8
LED katot ve buzzer −GND
Pin isimlerini görmek için beyaz kubbeyi nazikçe çekip çıkarabilirsiniz; altında VCC, OUT ve GND yazar. Kubbeyi tekrar takmayı unutmayın; lens olmadan algılama mesafesi çok kısalır.

Adım adım kurulum

  1. Sensör ayarlarını yapın

    PIR kartının arkasındaki iki turuncu potansiyometreden Sx (hassasiyet) olanı ortaya, Tx (süre) olanı saat yönünün tersine en sona getirin. Jumper'ı H (tekrar tetikleme) konumuna alın.

  2. PIR'ı bağlayın

    Erkek-dişi kablolarla VCC'yi 5V'a, OUT'u D2'ye, GND'yi GND'ye bağlayın.

  3. LED'i bağlayın

    Kırmızı LED'i 220 Ω direnç üzerinden D13'e, kısa bacağını GND'ye bağlayın.

  4. Buzzer'ı bağlayın

    + bacağı D8'e, − bacağı GND'ye bağlayın.

  5. Kodu yükleyin

    Kodu yükleyip Seri Port Ekranını açın. Sensör kendini kalibre ederken 30 saniye boyunca hareketsiz bekleyin ve sensörün önünden çekilin.

  6. Alarmı test edin

    "Sistem hazır" mesajından sonra sensörün önünden geçin. LED yanmalı, siren çalmalı ve ekrana "Hareket algılandı" yazmalı.

  7. Hassasiyeti ince ayarlayın

    Alarm çok kolay tetikleniyorsa Sx potansiyometresini saat yönünün tersine çevirin.

Arduino kodu

Kodları Arduino IDE'ye yapıştırıp yükleyebilirsiniz. Türkçe karakterler yalnızca yorum satırlarında kullanıldı; Seri Port Ekranına yazdırılan metinlerde bilerek kullanılmadı.

Hareket algılayınca siren çalan ve olayları raporlayan alarm.

pir_alarm.ino
// PIR Sensörlü Hareket Alarmı
// RobotikHocasi.com

const int pirPin = 2;
const int ledPin = 13;
const int buzzerPin = 8;

int hareketDurumu = LOW;   // Bir önceki durum

void setup() {
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  Serial.begin(9600);

  // PIR sensörünün ortamı tanıması için bekle
  Serial.println("Sensor isiniyor, 30 saniye bekleyin...");
  for (int i = 30; i > 0; i--) {
    digitalWrite(ledPin, i % 2);   // Beklerken LED yanıp sönsün
    delay(1000);
  }
  digitalWrite(ledPin, LOW);
  Serial.println("Sistem hazir!");
}

void loop() {
  int okuma = digitalRead(pirPin);

  if (okuma == HIGH) {
    digitalWrite(ledPin, HIGH);

    // İki tonlu siren sesi
    tone(buzzerPin, 1200, 150);
    delay(180);
    tone(buzzerPin, 800, 150);
    delay(180);

    // Sadece hareketin başladığı anda mesaj yaz
    if (hareketDurumu == LOW) {
      Serial.println(">> Hareket algilandi!");
      hareketDurumu = HIGH;
    }
  } else {
    digitalWrite(ledPin, LOW);
    noTone(buzzerPin);

    // Sadece hareketin bittiği anda mesaj yaz
    if (hareketDurumu == HIGH) {
      Serial.println("<< Hareket sona erdi.");
      hareketDurumu = LOW;
    }
  }
}

Bonus: Sessiz modda gün içindeki hareket sayısını ve son hareketten bu yana geçen süreyi sayar.

pir_sayac.ino
// Hareket sayacı (sessiz mod)
const int pirPin = 2;
const int ledPin = 13;

int oncekiDurum = LOW;
unsigned int hareketSayisi = 0;
unsigned long sonHareket = 0;

void setup() {
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  delay(30000);   // Isınma süresi
  Serial.println("Sayac basladi.");
}

void loop() {
  int durum = digitalRead(pirPin);
  digitalWrite(ledPin, durum);

  // Yükselen kenar: LOW -> HIGH geçişi yeni bir hareket demektir
  if (durum == HIGH && oncekiDurum == LOW) {
    hareketSayisi++;
    unsigned long gecen = (millis() - sonHareket) / 1000;
    sonHareket = millis();

    Serial.print("Hareket #");
    Serial.print(hareketSayisi);
    Serial.print("  (onceki hareketten ");
    Serial.print(gecen);
    Serial.println(" sn sonra)");
  }
  oncekiDurum = durum;
}

Kod açıklaması

for (int i = 30; i > 0; i--)

Sensörün ilk açılıştaki ısınma süresini sayar. i % 2 ifadesi her saniye 1 ve 0 arasında değişerek LED'i yanıp söndürür.

int hareketDurumu = LOW;

Bir önceki turdaki durumu hatırlar. Mevcut okuma ile önceki durumu karşılaştırarak sadece değişim anlarında işlem yaparız.

if (hareketDurumu == LOW)

Bu kontrol olmasaydı hareket sürdükçe Seri Port Ekranı aynı mesajla dolardı. Bu tekniğe kenar algılama (edge detection) denir.

durum == HIGH && oncekiDurum == LOW

&& (ve) operatörü iki koşulun aynı anda doğru olmasını ister. Bu ifade yalnızca yükselen kenarda, yani hareketin ilk başladığı anda doğrudur.

Nasıl çalışır?

PIR sensörünün içinde iki yarıya bölünmüş bir piroelektrik eleman bulunur. Ortam sabitken iki yarı aynı miktarda kızılötesi ışık alır ve birbirini dengeler. Sıcak bir cisim görüş alanında hareket ettiğinde önce bir yarıya, sonra diğerine daha fazla ışık düşer. Bu dengesizlik sensörün çıkışını tetikler.

Beyaz kubbe, aslında birçok küçük mercekten oluşan bir Fresnel lensidir. Görüş alanını çok sayıda bölgeye ayırır ve kızılötesi ışığı sensöre odaklar. Böylece yaklaşık 110 derecelik bir açıda, 7 metreye kadar hareket algılanabilir.

Sorun giderme

Alarm hiçbir hareket yokken çalıyor
Sensör henüz ısınmamış olabilir; ilk 30–60 saniyeyi bekleyin. Klima, kalorifer veya güneş ışığı alan pencerelere doğru bakmasın.
Alarm bir kez çalıp uzun süre susmuyor
Kart üzerindeki Tx (süre) potansiyometresi yüksek ayarlı. Saat yönünün tersine çevirerek süreyi kısaltın.
Hiç algılama yapmıyor
OUT pininin D2'ye bağlı olduğunu kontrol edin. Sx hassasiyet potansiyometresini saat yönünde çevirin.
Hareket bittikten sonra birkaç saniye algılamıyor
Normaldir. HC-SR501 her tetiklemeden sonra yaklaşık 2,5 saniyelik bir kilitlenme süresi uygular.

Geliştirme fikirleri

Projeyi tamamladıysanız, aşağıdaki fikirlerle bir adım öteye taşıyabilirsiniz.

Şifreli alarm

Bir tuş takımı ekleyerek alarmı sadece doğru şifreyle kurulup susturulabilir hale getirin.

Otomatik merdiven lambası

Röle ve LDR ile sadece karanlıkta ve hareket olduğunda yanan bir lamba yapın.

Telefona bildirim

ESP8266 veya ESP32 ile hareket algılandığında telefonunuza mesaj gönderin.

Ziyaretçi sayacı

Hareket sayısını I2C LCD ekranda gösteren bir mağaza giriş sayacı tasarlayın.

Sık sorulan sorular

PIR sensörü camın arkasından algılar mı?
Hayır. Normal cam, PIR'ın algıladığı uzak kızılötesi ışığın çoğunu geçirmez. Sensörün görüş alanı açık olmalıdır.
H ve L jumper ayarı ne işe yarar?
H (tekrarlı) modda hareket sürdükçe çıkış HIGH kalır. L (tek) modda süre bitince çıkış hareket devam etse de LOW olur. Alarm için H modu daha uygundur.
Evcil hayvanlar alarmı tetikler mi?
Evet, sıcak kanlı her canlı tetikleyebilir. Sensörü daha yükseğe ve aşağı bakacak açıyla yerleştirmek bunu azaltır.

Bir sonraki projeye hazır mısınız?

Başlangıç serisindeki 10 projeyi sırayla tamamladığınızda sensör, motor ve ekran kullanımının temellerini öğrenmiş olursunuz.

Başlangıç projelerine dön