Skip to Content
SensörlerPIR Hareket Sensörü

PIR Hareket Sensörü

PIR (Passive Infrared — Pasif Kızılötesi) sensör, önündeki ortamdaki kızılötesi ısı değişimini algılayarak hareket tespit eder. Alarm sistemleri, otomatik aydınlatma ve varlık algılama projelerinin temel bileşenidir.

En yaygın modeli HC-SR501’dir; üzerindeki beyaz plastik kubbe (Fresnel merceği) ile tanınır.

”Pasif” Ne Anlama Geliyor?

Ultrasonik sensör gibi dışarı bir sinyal göndermez. Sadece ortamdaki mevcut kızılötesi ışımayı dinler. Bu yüzden pasiftir: enerji yaymaz, sadece alır.

Vücut sıcaklığı olan her canlı kızılötesi ışıma yayar. Sensör bu ışımadaki değişimi fark eder.

Kritik nokta: hareket algılar, varlık değil

PIR sensör “orada biri var mı?” sorusuna cevap veremez. Yalnızca “kızılötesi tabloda bir değişim oldu mu?” sorusuna cevap verir.

Bir odada tamamen hareketsiz duran bir insan, birkaç saniye sonra PIR tarafından algılanmaz olur. Bu yüzden PIR ile kurulan otomatik ışık sistemleri, masada hareketsiz oturan birinin üzerinde ışığı söndürür.

Nasıl Çalışır?

Sensörün içinde iki adet piroelektrik algılayıcı bölge bulunur ve bunlar birbirine ters bağlanmıştır.

  1. Ortam sabitken iki bölge de aynı miktarda kızılötesi alır; fark sıfırdır, çıkış yoktur.
  2. Bir insan sensörün önünden geçtiğinde önce bir bölgeyi, sonra diğerini etkiler.
  3. İki bölge arasında anlık bir fark oluşur.
  4. Devre bu farkı yükseltir ve çıkışı HIGH yapar.

Üstteki beyaz Fresnel merceği, geniş bir alanı çok sayıda küçük algılama dilimine böler. Hareket eden bir cisim bu dilimler arasında geçerken art arda sinyal üretir; bu da hassasiyeti belirgin şekilde artırır.

HC-SR501 Bağlantısı

Sensörün üç pini vardır. Kubbe yukarı bakarken kart üzerinde pin isimleri yazılıdır.

PIR piniArduino
VCC5V (4,5 – 20 V arası çalışır)
OUTHerhangi bir dijital pin (örn. D2)
GNDGND

Çıkış sinyali 3,3 V seviyesindedir; hem Arduino (5V) hem ESP32 (3,3V) ile doğrudan kullanılabilir.

Temel Kod

const int PIR_PIN = 2; const int LED_PIN = 13; void setup() { pinMode(PIR_PIN, INPUT); pinMode(LED_PIN, OUTPUT); Serial.begin(9600); Serial.println("Sensor isiniyor, 60 saniye bekleyin..."); delay(60000); // isinma suresi Serial.println("Hazir."); } void loop() { if (digitalRead(PIR_PIN) == HIGH) { digitalWrite(LED_PIN, HIGH); Serial.println("Hareket algilandi!"); } else { digitalWrite(LED_PIN, LOW); } delay(100); }

Isınma süresi neden gerekli?

PIR sensör enerji verildikten sonra 30–60 saniye boyunca ortamın kızılötesi haritasını öğrenir. Bu süre içinde rastgele HIGH sinyalleri üretir.

Isınma beklenmezse sistem açılır açılmaz yanlış alarm verir. Gerçek bir kurulumda bu süreyi mutlaka hesaba katın.

Kart Üzerindeki Ayarlar

HC-SR501 üzerinde iki turuncu potansiyometre ve bir jumper bulunur.

Hassasiyet (Sensitivity) potansiyometresi

Algılama mesafesini belirler: yaklaşık 3 ile 7 metre arası.

  • Saat yönünde çevirmek genellikle mesafeyi artırır (bazı klonlarda tersidir).
  • Küçük bir odada maksimuma almak yanlış alarmları artırır; kısmak daha doğrudur.

Gecikme (Time Delay) potansiyometresi

Hareket algılandıktan sonra çıkışın ne kadar süre HIGH kalacağını belirler: yaklaşık 3 saniye ile 5 dakika arası.

Kısa süre hızlı tepki verir ama sık tetiklenir. Otomatik ışık projelerinde 30 saniye – 2 dakika arası pratik bir aralıktır.

Tetikleme modu jumperı

Kart üzerindeki jumper iki konumdan birinde olur. Bu, en sık gözden kaçan ayardır.

KonumİsimDavranış
LTek tetikleme (non-repeatable)Çıkış HIGH olur, gecikme süresi dolunca LOW’a döner. Süre içindeki yeni hareketler sayacı sıfırlamaz.
HSürekli tetikleme (repeatable)Her yeni hareket gecikme sayacını yeniden başlatır. Hareket devam ettiği sürece çıkış HIGH kalır.

Pratikte neredeyse her zaman H konumu istenir. L konumundayken, odada hareket sürse bile ışık gecikme süresi dolduğunda söner ve sonra tekrar yanar. Yeni kartların çoğu fabrikadan H konumunda gelir ama kontrol edin.

Bloke Etmeyen Işık Kontrolü

delay() kullanmadan, hareket sonrası belirli süre yanan bir ışık:

const int PIR_PIN = 2; const int ROLE_PIN = 7; const unsigned long ISIK_SURESI = 30000; // 30 saniye unsigned long sonHareket = 0; bool isikAcik = false; void setup() { pinMode(PIR_PIN, INPUT); pinMode(ROLE_PIN, OUTPUT); digitalWrite(ROLE_PIN, LOW); Serial.begin(9600); delay(60000); // isinma } void loop() { if (digitalRead(PIR_PIN) == HIGH) { sonHareket = millis(); if (!isikAcik) { isikAcik = true; digitalWrite(ROLE_PIN, HIGH); Serial.println("Isik acildi"); } } if (isikAcik && (millis() - sonHareket > ISIK_SURESI)) { isikAcik = false; digitalWrite(ROLE_PIN, LOW); Serial.println("Isik sondu"); } // program burada baska isler de yapabilir }

Bu yapı, kart üzerindeki gecikme potansiyometresine bağımlı kalmadan süreyi yazılımdan kontrol etmenizi sağlar. Bu durumda potansiyometreyi en kısa süreye almak mantıklıdır.

Kesme (Interrupt) ile Kullanım

Hareketi anında yakalamak isterseniz donanımsal kesme kullanılabilir. Arduino Uno’da kesme pinleri D2 ve D3’tür.

const int PIR_PIN = 2; volatile bool hareketVar = false; void hareketAlgilandi() { hareketVar = true; } void setup() { Serial.begin(9600); pinMode(PIR_PIN, INPUT); attachInterrupt(digitalPinToInterrupt(PIR_PIN), hareketAlgilandi, RISING); delay(60000); } void loop() { if (hareketVar) { hareketVar = false; Serial.println("Kesme ile hareket yakalandi!"); } }

volatile anahtar kelimesi zorunludur; kesme fonksiyonu içinde değişen değişkenler derleyici tarafından optimize edilmesin diye bu şekilde işaretlenir.

Yanlış Alarmların Nedenleri

PIR sensörle en çok uğraşılan konu budur.

Hava akımı ve klima. Sıcak veya soğuk hava akımı sensörün gördüğü ısı tablosunu değiştirir. Sensörü klima, kalorifer veya açık pencere karşısına koymayın.

Doğrudan güneş ışığı. Güneş güçlü kızılötesi kaynağıdır. Bulut geçişleri bile tetiklenmeye yol açar.

Evcil hayvanlar. Kedi ve köpekler de kızılötesi yayar. Sensörü yere paralel değil, hafif yukarıdan aşağı bakacak şekilde konumlandırın veya hassasiyeti kısın.

Titreşim. Sensörün kendisi hareket ederse ortam ona göre hareket etmiş olur. Sağlam sabitleyin.

Besleme dalgalanması. Aynı besleme hattındaki röle veya motor, PIR’ı tetikleyebilir. Sensör beslemesine 100 µF elektrolitik + 100 nF seramik kondansatör ekleyin.

Yansıyan yüzeyler. Ayna ve cam yüzeyler ısı yansıtabilir. Ayrıca PIR camın arkasından göremez — normal cam kızılötesini geçirmez. Sensörü pencere arkasına koyarak dışarıyı izleyemezsiniz.

Isınma süresi beklenmemesi. En sık nedendir.

Yazılımsal Filtreleme

Tek bir HIGH sinyaline güvenmek yerine, belirli bir süre içinde birden fazla tetikleme aramak yanlış alarmları azaltır:

const int PIR_PIN = 2; int tetiklemeSayaci = 0; unsigned long ilkTetikleme = 0; const unsigned long PENCERE = 5000; // 5 saniyelik pencere const int GEREKLI_TETIKLEME = 2; void loop() { if (digitalRead(PIR_PIN) == HIGH) { if (tetiklemeSayaci == 0) { ilkTetikleme = millis(); } tetiklemeSayaci++; if (tetiklemeSayaci >= GEREKLI_TETIKLEME) { Serial.println("Dogrulanmis hareket!"); tetiklemeSayaci = 0; } while (digitalRead(PIR_PIN) == HIGH) { delay(10); // sinyalin bitmesini bekle } } if (tetiklemeSayaci > 0 && (millis() - ilkTetikleme > PENCERE)) { tetiklemeSayaci = 0; // pencere doldu, sifirla } }

Alternatif Hareket ve Varlık Sensörleri

SensörTeknolojiÖzellik
HC-SR501PIRUcuz, standart, hareket algılar
AM312PIRÇok küçük, 3,3V, ayarsız
RCWL-0516Mikrodalga (Doppler)Duvar ve cam arkasından algılar
LD2410mmWave radarHareketsiz varlığı da algılar, mesafe verir
HC-SR505PIRMini boyut, sabit ayarlar

Hareketsiz duran birini algılamanız gerekiyorsa PIR yetersizdir; LD2410 gibi mmWave radar sensörü kullanmalısınız. Bu sensörler nefes alma hareketini bile fark edebilir.

Özet

PIR sensör, ortamdaki kızılötesi ışıma değişimini algılayarak hareket tespit eder. Varlık değil, hareket algılar — hareketsiz duran bir insanı göremez.

Bu derste şunları öğrendik:

  • Pasif kızılötesi algılamanın çalışma prensibini
  • Fresnel merceğinin görevini
  • 60 saniyelik ısınma süresinin neden gerektiğini
  • Hassasiyet ve gecikme potansiyometrelerini
  • L ve H tetikleme modu jumperı arasındaki farkı
  • millis() ile bloke etmeyen ışık kontrolünü
  • Yanlış alarmların yedi nedenini ve yazılımsal filtrelemeyi