4 Şubat 2016 Perşembe

Hareket Sensörü - HC-SR501 - PIR

Merhaba
Elimizdeki led devresine hareket sensörü ekledik bu sefer. 
PIR diye geçen bu elemanın kodu HC-SR501.
Baştan söyleyeyim bendeki cihaz hareketi algılıyor, belli bir süre açık kalıyor ve kapanıyor.
Ardından bir sonraki tepkime için 4-5sn bekliyor (beyni yerine geliyor).
İlk başta yaptığım kodlamada hata olduğunu düşünmüştüm ama sonra araştırınca sensör üzerindeki dirençler ile bu tepkime süresinin (trigger time) bağlantılı olduğunu gördüm. Yani bendeki sensör biraz dandikmiş :)
O yüzden haraketi görüyor. Işıklar yanıyor. Işıklar sönüyor. Sonra elini sallasan da 3-5sn tepki vermiyor.
O yüzden Çin den başka bir tane daha sipariş verdim 30 güne gelir artık :)
İşte devre, kodlar ve resimler:


Kodlar: 

const int ledCount = 6; //led sayısı
int ledPins[] = {
  2, 3, 4, 5, 6, 7 //ledlerin bağlı olduğu pinler
};
#define motionPin A0

int pirPos = 9;

int calibrationTime = 5;

void setup() {
  pinMode(motionPin, INPUT);
  pinMode(pirPos, OUTPUT);


  for (int thisPin = 0; thisPin < ledCount; thisPin++) {
    pinMode(ledPins[thisPin], OUTPUT); //led pinlerini output olarak ayarla
  }

  delay(5000);
  digitalWrite(pirPos, HIGH);
  digitalWrite(motionPin, HIGH);
  while (digitalRead(motionPin) == HIGH) {

    for (int thisPin = 0; thisPin < ledCount; thisPin++)
    {
      digitalWrite(ledPins[thisPin], HIGH);
      delay(50);
    }
    for (int thisPin = 0; thisPin < ledCount; thisPin++)
    {
      digitalWrite(ledPins[thisPin], LOW);
      delay(50);
    }
  }
}

void loop() {
  if (digitalRead(motionPin) == HIGH)
  {
    for (int thisPin = 0; thisPin < ledCount; thisPin++)
    {
      digitalWrite(ledPins[thisPin], HIGH);
    }
  } else {
    for (int thisPin = 0; thisPin < ledCount; thisPin++)
    {
      digitalWrite(ledPins[thisPin], LOW);
    }
  }
}


Resim: