İçeriğe geç

PIR Sensör ile Hareket Algılama: Basit Bir Başlangıç

Şimdi bu PIR sensör mevzusu var ya, hani şu hareket edince devreye giren o küçük ama becerikli arkadaşımız… Benim de başıma gelmiştir, hani böyle bir proje yapıyorsunuz, tam gaz devam ederken bir anda aklınıza gelir, ‘Acaba hareket algılasa şöyle bir şey yapsak mı?’ diye. İşte tam o anlarda bu PIR sensörler devreye giriyor. Hakikaten de ufak ama çok işe yarar bir şey bu. Özellikle güvenlik sistemlerinden tutun da otomatik yanan ışıklara kadar pek çok yerde karşımıza çıkıyor. Düşünsenize, siz odada yokken gereksiz yere yanan bir ışık ya da siz eve girerken aniden açılan bir lamba… Hepsi bu küçük sensör sayesinde oluyor.

Aslında bu olayın mantığı da pek karmaşık değil, hani böyle bir şey düşününce ‘Aman tanrım ne kadar zor olmuştur kim bilir!’ dersiniz ya, aslında o kadar da değil. PIR sensörler, adından da anlaşılacağı gibi ‘Pasif Kızılötesi’ prensibiyle çalışıyor. Yani kendisi bir şey yaymıyor, etraftaki kızılötesi ışımayı algılıyor. Her canlı şey, bir sıcaklık yayar değil mi? İşte bu sensörler de o sıcaklık değişimlerini algılıyor. Yani siz hareket ettiğinizde, üzerinizden yayılan sıcaklık, ortamdaki sıcaklık değişimini tetikliyor ve sensör de ‘Aa biri var!’ diyor. Ne güzel değil mi? Sanki evinize bir gözcü dikmişsiniz gibi.

Tabi bu işler böyle teoride güzel güzel anlatılırken, pratikte bazen ufak tefek pürüzler çıkabiliyor. Mesela bazen hassasiyeti çok yüksek oluyor, siz odada mırıldanırken bile harekete geçebiliyor ya da tam tersi, yanından geçiyorsunuz tık yok. Bu durumlar beni biraz sinir edebiliyor açıkçası. Kendi projemde de başıma gelmişti, sanırım bir keresinde hassasiyet ayarını tutturamadım, öyle ki kapı açılıp kapanınca bile devreye giriyordu. Neyse efendim, bu ayarlarla biraz oynamak gerekiyor tabi.

Peki, bunu nasıl yaparız derseniz, aslında çok da karmaşık değil. Arduino gibi popüler platformlarla bu sensörleri kullanmak oldukça kolay. Genellikle üç bacağı olur bu sensörlerin: VCC (güç), GND (toprak) ve OUT (sinyal çıkışı). Bu çıkış pininden gelen dijital sinyali okuyarak hareket olup olmadığını anlayabiliyorsunuz. Çok basit bir mantıkla çalışıyor, sinyal ‘HIGH’ olduğunda hareket var, ‘LOW’ olduğunda ise yok demektir. Sanırım bu kadar basit bir mantıkla pek çok projeyi hayata geçirebiliriz.

Bu arada, bu sensörlerin bazı modellerinde hassasiyet ve zamanlama ayarı için potansiyometreler de bulunuyor. Onları çevirerek sensörün ne kadar hassas olacağını ve hareketi algıladıktan sonra çıkış sinyalini ne kadar süreyle aktif tutacağını ayarlayabiliyorsunuz. İşte bu ayarlar sayesinde, gereksiz tetiklemelerin önüne geçmek mümkün oluyor. Hani bazen bir şey kurarsınız ya, tam istediğiniz gibi olmaz, biraz daha ince ayar ister. İşte bu potansiyometreler tam o ince ayarlar için var.

Şimdi gelelim kod kısmına. Basit bir Arduino koduyla bunu nasıl yaparız ona bakalım. Genelde şöyle bir mantık izlenir: Sensörden gelen sinyali okursun, eğer sinyal yüksekse (yani hareket varsa), bir LED’i yakarsın ya da bir mesaj yazdırırsın. Eğer sinyal düşükse, her şey normal demektir. Bu kadar basit. Tabii bunu daha karmaşık hale getirebiliriz, mesela hareket algılandığında cep telefonumuza bildirim gönderen bir sistem kurabiliriz ya da bir alarm çaldırabiliriz. Ama başlangıç için temel mantık bu.

Şöyle bir örnek kod vereyim size, hem de daha anlaşılır olması açısından bir de yanlış yapılmış haliyle karşılaştıralım:

Öncelikle, bu işin temelini anlamak önemli. PIR sensörün çıkış pinini Arduino’nun dijital pinlerinden birine bağlıyoruz. Sonra da bu pinden gelen sinyali okuyarak bir şeyler yapıyoruz. İşte bu kadar!

Şimdi, ilk başta akla gelen en basit mantık şu olabilir: Sadece sensörden gelen değeri oku ve eğer yüksekse LED’i yak. Bu mantıkta bir sorun yok gibi görünüyor, ama acaba gerçekten yeterli mi? Mesela, hareket bittiğinde LED’in hemen sönmesini istemeyebiliriz, hani bir süre daha yanık kalsın isteriz değil mi? İşte bu noktada basit okuma yeterli olmuyor.

İşte burada devreye bir zamanlama mekanizması giriyor. Yani sensörden sinyal geldiğinde, LED’i yakıyoruz ve sonra bir zamanlayıcı başlatıyoruz. Bu zamanlayıcı bittiğinde LED’i söndürüyoruz. Bu sayede, hareket durduktan sonra bile LED bir süre daha yanık kalıyor. Gerçekten de bu ayar, daha profesyonel bir algı yaratıyor sanki. Hani bazen bir projede ufak bir detay bütün havayı değiştirir ya, işte bu da öyle bir şey.

Şimdi size şöyle bir kod örneği göstereyim. Bu kod, hareket algılandığında LED’i yakacak ve hareket durduktan sonra belli bir süre daha yanık kalmasını sağlayacak. Hem de bu işi şöyle bir 20 satır civarında falan halledeceğiz sanırım. Gerçi kod uzunluğu projeye göre değişir ama bu temel mantık için yeterli olacaktır.

Önce yanlış yapılmış ama mantık olarak işe yarar gibi duran bir kod yazalım:

// YANLIŞ (Basit Okuma – Hareket bitince hemen söner)

const int pirPin = 2; // PIR sensörün çıkış pini const int ledPin = 13; // LED'in bağlı olduğu pin

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

void loop() { int pirState = digitalRead(pirPin); // PIR sensörden gelen değeri oku

if (pirState == HIGH) { // Eğer hareket varsa (sinyal yüksekse) digitalWrite(ledPin, HIGH); // LED'i yak Serial.println("Hareket Algilandi!"); } else { // Eğer hareket yoksa digitalWrite(ledPin, LOW); // LED'i söndür } delay(100); // Kısa bir bekleme }

Bu kodda şöyle bir sıkıntı var: Hareket algılandığında LED yanıyor, ama hareket durduğu anda LED de hemen sönüyor. Yani siz odadan çıksanız bile o ışık anında kapanıyor. Bu da pek kullanışlı değil sanırım. Hani siz bir odaya girersiniz, ışık yanar, siz çıkarsınız ışık hemen söner, sanki arkadan sizi takip ediyormuş gibi 🙂 Neyse, biz bunu daha iyi hale getirelim.

Şimdi gelelim daha doğru ve kullanışlı olan versiyona. Burada bir zamanlayıcı mantığı kullanacağız. Hareket algılandığında LED’i yakacağız ve bir değişkeni güncelleyip, hareket durmuş olsa bile o değişkenin değeri belli bir süre boyunca yüksek kalmasını sağlayacağız. Bu sayede LED istediğimiz süre boyunca yanık kalacak.

// DOĞRU (Zamanlayıcı ile – Hareket bitse de bir süre yanık kalır)

const int pirPin = 2; // PIR sensörün çıkış pini const int ledPin = 13; // LED'in bağlı olduğu pin unsigned long previousMillis = 0; // Hareketin son algılandığı zamanı saklamak için const long interval = 5000; // LED'in yanık kalacağı süre (milisaniye) - 5 saniye

bool ledState = LOW; // LED'in mevcut durumu

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

void loop() { int pirState = digitalRead(pirPin); // PIR sensörden gelen değeri oku

if (pirState == HIGH) { // Eğer hareket varsa ledState = HIGH; // LED'i yak previousMillis = millis(); // Hareketin son algılandığı zamanı kaydet Serial.println("Hareket Algilandi!"); }

// Eğer LED yanıyorsa ve belirli bir süre geçtiyse if (ledState == HIGH && millis() - previousMillis >= interval) { ledState = LOW; // LED'i söndür Serial.println("Sure doldu, LED sonduruldu."); }

digitalWrite(ledPin, ledState); // LED'in durumunu ayarla }

Gördüğünüz gibi, burada `previousMillis` ve `interval` gibi değişkenler kullanarak bir zamanlayıcı kurduk. Hareket algılandığında `previousMillis` güncelleniyor ve LED, `interval` süresi boyunca yanık kalıyor. Bu gerçekten de daha mantıklı bir çözüm sunuyor. Hani bazen bir şeyi yapmak için çok karmaşık çözümler ararız ya, aslında bazen ufak bir zamanlayıcı ile her şey çözülüyor. Bu kodla, hareket durduktan sonra bile ışıklar bir süre daha yanık kalarak hem güvenlik hissini artırıyor hem de gereksiz yere sürekli yanıp sönmesini engelliyor.

Bu arada, bu tür sensörleri internette ara ara indirime girince toplu almak mantıklı olabilir. Mesela Google’da aratınca pek çok farklı model ve fiyat seçeneği çıkıyor karşınıza. Ben genelde böyle temel sensörleri toplu almak taraftarıyım. Hem ileride yapacağınız projeler için elinizin altında bulunmuş olur.

Sonuç olarak, PIR sensörlerle hareket algılama işi, hem eğlenceli hem de oldukça pratik bir konu. Temel mantığını anladıktan sonra, ufak tefek kod ayarlamalarıyla kendi projelerinize rahatlıkla entegre edebilirsiniz. Hani bazen bir proje fikri gelir aklınıza, ‘Acaba bunu yapabilir miyim?’ diye düşünürsünüz ya, işte bu sensörler o ‘acaba’ları gerçeğe dönüştürmek için harika bir başlangıç noktası sunuyor. Denemekten çekinmeyin derim, ne de olsa denemeden bilemeyiz değil mi?

Bu arada, bu tür sensörler genellikle 5V ile çalıştığı için Arduino’nun 5V pininden güç alması yeterli olacaktır. Bazı modellerde 3.3V ile de çalışabilenleri mevcut sanırım, ama en yaygın olanlar 5V ile uyumlu. Yani projeniz için fazladan bir güç kaynağına ihtiyacınız olmayabilir.

Ve tabii ki, eğer bu işi daha da ileri götürmek isterseniz, bu sensörleri bir Wi-Fi modülü veya Ethernet shield ile birleştirip, hareket algılandığında size bildirim gönderen bir akıllı ev sistemi bile kurabilirsiniz. Düşünsenize, uzaktayken evinizde bir hareket olduğunda telefonunuza bir uyarı geliyor. Gerçekten de teknoloji sayesinde hayatımız ne kadar kolaylaşıyor, ne kadar güvenli hale geliyor, değil mi?

Neticede bu sensörler, basit ama etkili çözümler sunuyor. Kendi basit alarm sisteminizi kurmaktan tutun da, yolda yürürken otomatik yanan bir lambaya kadar pek çok farklı amaçla kullanabilirsiniz. Hatta daha yaratıcı projeler de aklınıza gelebilir, kim bilir?

Son olarak, bu sensörlerin bazıları çevresel ışık değişimlerine de hassas olabiliyor, yani gündüz fark etmediğiniz bir hareketi gece lambası yandığında fark edebilir. Bu durumu da göz önünde bulundurmakta fayda var. Yani bazen bir şey çok hassas çalışır, bazen de tam tersi. Hepsi sensörün kalitesine ve ayarlarına bağlı sanırım.

Umarım bu basit anlatım, PIR sensörlerle ilk adımlarınızı atmanız için size bir fikir vermiştir. Her zaman olduğu gibi, en iyi öğrenme yöntemi denemektir. O yüzden hemen bir sensör edinin ve kendiniz test edin derim 🙂

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.