Led li devremize bu sefer de LDR denilen ışık sensörü taktık. Ortam karanlık iken ledler yansın ışık belli seviyeden yüksek ise ledler sönsün istedik. İşte devre ve kodlar:
Kodlar: const int ledCount = 6; //led sayısı int ledPins[] = { 2, 3, 4, 5, 6, 7 //ledlerin bağlı olduğu pinler }; int sensorPin = A0; int sensorValue = 0; void setup() { } void loop() { sensorValue = analogRead(sensorPin);
if(sensorValue > 20) // 10mm LDR bende max 550-560 oldu 20 değeri loş ışığın biraz altı { for (int thisPin = 0; thisPin < ledCount; thisPin++) { digitalWrite(ledPins[thisPin], LOW); } } else { for (int thisPin = 0; thisPin < ledCount; thisPin++) { digitalWrite(ledPins[thisPin], HIGH); } }
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); } } }