hareket algılama etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
hareket algılama etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Arduino Hareket Sensörü Kullanımı | PIR Sensör Örnek Kod

 Arduino ile Hareket Sensörü (PIR Sensör) Kullanımı

    HC-Sr501 sensörü kullanacağımız bu uygulamada sensörün Arduino Uno 'ya bağlanmasını ve basit bir kod ile nasıl çalıştırılabildiğine bakıyor olacağız. Sensörün nasıl çalıştığını özelliklerini ya da modifikasyonlarını merak ediyorsanız sensörü detaylıca yazdığım : Hc-SR501  Sensör İncelemesi konusuna bakıp gelebilirsiniz.
    Bu sensörü basitçe bir anahtar (switch) gibi düşünebilirsiniz, tek yaptığı şey bir hareket algıladığında sinyal pini üzerinden 5v vermesidir.

Arduino PIR sensör bağlantısı


    Görselde gördüğünüz bağlantıyı yapmanız yeterli, ben sinyal pinini Arduino 'nun ikinci pinine bağladım, siz dilediğiniz herhangi boş bir pine bağlayabilirsiniz, 1 ve 0 pinlerinden birini tercih etmenizi önermem, seri iletişim için o pinler kullanılıyor zira.


Kod kısmına gelecek olursak o da gayet basitçe şu şekilde olacak

// C++ code
//
#define MOTION 2
void setup()
{
  pinMode(MOTION, INPUT);
  Serial.begin(115200);
}

void loop()
{
  if(digitalRead(MOTION))
  {
    Serial.println("Motion Detected!");
  }
}


    Burada Arduino 'nun yapacağı iş; sensör bir hareket algıladığında seri ekrana seri bir şekilde "Motion Detected!" yazacak. Sanki başka hiç işimiz yokmuş gibi :) Tamam başka işlerimiz de olabilir, örneğin hareket algılandığında alarm çalabiliriz buzzer kullanarak, ya da bir ikaz lambası da yakabiliriz aynı zamanda, ya da yanan sönen lambalar kullanabiliriz, örnekler çoğaltılabilir. Bu yapmayı hayal ettiğimiz herşeyi if bloğunun içine yazarsak işimizi görür, ancak şöyle bir durum var, hareketin algılanması tek bir durumdur, dolayısıyla hareket algılandığında tek bir işler serisi yapmak isteriz. Eğer yukarıdaki kodu kullanacak olursanız, nasıl ki seri ekrana seri şekilde defalarca ( bu aslında sensörün hareket algıladığı andan sonra sinyal pinini ne süreyle HIGH seviyede tuttuğuyla alakalı ) "Motion Detected!" yazıyorsa, oradaki tüm işleri de sinyal kesilene kadar yapacak demektir.


    Peki ne yapalım, kesme kullanabiliriz, kesme tetikleyicisi olarak da RISING seçersek yani yükselen kenarda tetiklensin, bu durumda sadece bir kez istediğimiz tüm fonksiyonları çalıştırabiliriz :

// C++ code
//
#define MOTION 2
void setup()
{
  pinMode(MOTION, INPUT);
  Serial.begin(115200);
  attachInterrupt(digitalPinToInterrupt(MOTION), MotionRoutine, RISING);
}

void loop()
{
 
}
void MotionRoutine()
{
 Serial.println("Motion Detected!");  
 playAlarm();
 FlashLeds();
 doOtherStaff();
}
void playAlarm()
{
  // play Alarm code
}
void FlashLeds()
{
  //Flash Leds code
}
void doOtherStaff()
{
  // do sth 
}

    Yukarıdaki kod ile sadece bir defa MotionRoutine fonksiyonu yürütülür. Diğer fonksiyonları dilediğiniz işler için kullanabilirsiniz. Interrupt konusunda henüz birşeyler yazmadım ancak kısaca bahsedelim; bu noktada artık dilediğiniz pini kullanabilirsiniz lüksüne sahip değilsiniz, arduino uno için yalnızca 2 ve 3 numaralı pinlerin kesme özelliği var, yani ya 2 ya 3 başka şansınız yok.
    
Kesme için diğer seçenekler de :
  • FALLING : hareket bittiğinde yürütülür.
  • HIGH : ilk örnekle aynı şekilde HIGH iken peşpeşe yürütülür.
  • LOW : hareket bittikten sonre bir sonraki harekete kadar peşpeşe yürütülür.
  • CHANGE : lazım olur mu bilmem ama 5 iken 0 olursa, ya da 0 iken 5 olursa bir kez yürütülür.
Eğer olur da sensörünüz düzgün çalışmazsa hareket algılanmadığında da fonksiyonlarını çalışıyorsa mesela; sensörün sinyal pininden arduino GND 'ye 1k 'lık bir direnç bağlarsanız bu sorunu yaşamazsını diye ümid ediyorum, Bir dikkat etmeniz gereken şey de, sensörün düzgün çalışmaya başlaması çalışmaya başladığı andan sonra bie dakikayı buluyor olması, bunu da aklınızda bulundurun derim.

Tinkercad simulasyonu :



Herkese kolay gelsin!


HC-SR501 PIR Sensör İncelemesi ve Modifikasyonlar

 HC-SR501 PIR Sensör

    Arduino ve diğer gömülü sistemler uygulamaları ile hareket algılamak için tasarlanmış olan HC SR501 PIR Motion Sensör 'ün özelliklerine ve çalışma prensibine kısaca bakıyor olacağız.

PIR Ne demek?

PIR: Passive InfraRed, kelimelerinin baş harfleri alınarak oluşturulmuş bir kısaltma olarak karşımıza çıkıyor. Çoğunlukla alarm devrelerinde kullanılan PIR sensörleri, bina girişlerinde, ara katlarda ya da umumi WC lerde başımıza kısa yanma süresiyle bela olan, hareket algıladığında yanan lamba devrelerinde de görmek mümkün. 

hc sr501 PIR sensör

HC-SR501 Hareket Sensörünün Özellikleri

  • Çalışma Voltajı : 5V - 20V (aldığınız ürünün bilgi sayfasını kontrol edin, üzerinde 3.3V 'luk voltaj regülatörü var, bu aralık biraz daha aşılabilir ancak 12V 'u geçmemenizi tavsiye ederim, regülatör için giriş-çıkış arasındaki fark regülatör üzerinde ısıya dönüşür.)
  • Akım sarfiyatı : 65mA maksimum (5v ile kullanınca µA seviyelerinde)
  • TTL çıkışı : 3.3V (5V mikro denetleyiciler için de HIGH olarak kabul edilir)
  • Gecikme Süresi : ayarlanabilir 5 - 300 saniye (ilk bir dakika geçerli değil)
  • Tetikleme Metodu: tekli ya da çoklu olarak seçilebilir.
  • Algılama aralığı 7 metre içerisinde 120° 'den az.
  • Çalışma sıcaklığı  -15 ~ +70 °C
Sensörün düzgün çalışmaya başlaması bir dakikayı buluyor, bu süre içerisinde yapacağınız testlerde çıkış seviyesinin süresi 0-3 saniye aralığında olabilir bozuk olduğunu düşünmeyin bu tamamen normal.

Single Trigger Repeating Trigger Arasındaki Fark

Üzerinde bulunan jumper ile çıkış seviyesini tekrarlanabilir ya da tekli hale getirebiliyorsunuz. Bu ne demek; diyelim ki hareket sensörümüzü 20 saniye açık olacak şekilde ayarladık, hareketi aldığında 20 saniye boyunca açık kalır ve bu süre içerisindeki yeni hareket algılamaları sensörü etkilemez, 20 saniye bittiğinde kapalı konuma geçer ve yeni hareket bekliyor olur. Repeating Trigger Modda ise açık kaldığı 20 saniye içerisinde yeni bir hareket algılarsa, yeni bir 20 saniye başlatır. Ayarlanmasına gelince, ilk görselde bulunan sarı jumper, orta ve dış pine bağlı olduğunda tekrarlama modu iç tarafa ve orta pine bağlıysa tekli moda ayarlanmış oluyor.

hc-sr501 single ve repeating trigger



HC SR501 Devre Şeması

HC-SR501 Sensör Devre Şeması




HC SR501 Sensöre LDR Bağlanması

hc-sr501 ldr termistör bağlama
    Soldaki resim üzerinde pin headerların hemen arkasında bulunan morla kare içerisine aldığım alana (RL) ile referans verilmiş ancak elinizdekinde yazmıyor da olabilir, LDR, kırmızıyla işaretlediğim alana da termistör bağlanabiliyor.

Sensörü aydınlatma amacıyla kullanacaksak, ortam ışığını ölçüp ortam ışık yakmak için aydınlıksa ışığı yakmasını engelleyebiliriz. Bunun için sensörün devresi üzerinde LDR bağlamak için bir alan bırakılmış. Şemada gördüğünüz CDS2 referansıyla yer alan eleman bord üzerinde takılı değil ancak kendimiz bu özelliği kullanmak istiyorsak, bord üzerinde bırakılmış bu alana LDR bağlayarak bu özelliği elde edebiliyoruz. Gördüğünüz gibi eleman bir ucu GND 'ye diğer ucu BISS0001 entegresinin 9 nolu bacağına gidiyor, bu bacak aynı zamanda 1Mohm 'luk bir dirençle (R3) VDD 'ye gidiyor. Burada anladığımız LDR ile 1Mohm 'luk direnç, direnç bölücü olarak kullanılacak. Entegrenin datasheet ine baktığımız zaman 9 nolu bacağın (VC) Trigger disable input pini olduğunu görüyoruz, ve şöyle bir özellik verilmiş: ( VC > 0.2VDD = enable, Vc<0.2Vdd = disabled). Burdan ne anlıyoruz, Vdd 'miz 3,3V, 
3,3 * 0.2 = 0,66v 'dan daha düşük bir voltajı 9 pinde sağlarsak triggerimiz disable olur. Bunu Sağlamak için de en yüksek 250K lık bir direnç değeri elde etmeliyiz, Nasıl hesapladık : Direnç İle Voltaj Bölücü Devreleri ve Hesaplamaları konusunu okuyabilirsiniz. Şimdi bize ışığın yanmasını istemediğimiz aydıklık seviyesinde değeri 250K 'yı geçmeyen, bir LDR lazım, LDR parametrelerini incelediğimiz zaman 10 Lux başına direnç değeri 100 Lux başıne direnç değeri 1 saniyedeki karanlık resistansı ya da 5 saniyedeki karanlık resistansı gibi değerler görürüz. Bu dark resistance değerleri genellikle 1 Mohm a yakın ya da daha yüksek değerlerdedir, devremizde de 1Mohm 'luk ortak direncimiz olduğu için hemen hemen bir çok LDR buraya uyum sağlayabilir. Aslında gün ışığının 30000 lux ile 130000 lux arasında olduğu kabulünden yola çıkarsak tam uygun olabilecek LDR yi hesaplamak da mümkündür, Bunları LDR konusunu detaylıca yazdığımızda anlatıyor oluruz. Ancak burada bu detayda bir hesaplamaya gerek kalmıyor.

    Oldu ki elinizdeki "herhangi bir LDR" devrenize uyum sağlamadı farklı seviyelerde yanıyor sönüyor falan, bu durumda devre üzerindeki R3 ü söküp yerine bir potansiyometre takarak, ışık şiddettini LDR ye bağlı olmaktan çıkartıp pota bağlı hale getirebilir ve oradan ayarlama yapabilirsiniz.

Gökhan Ünal'ın yorumlarda eklediği modifikasyon :
Hc-sr501 ldr



Türksat Saat Kanalı ve IRIG-B Time Code

Türksat Saat Kanalından Saat Bilgisi Nasıl Alınır? Uyduda kanalları dolaşırken, şu Türksat Saat kanalı hep dikkatimi çekmiştir. Özellikle  S...