back to top

Arduino Dersleri #7: Arduino İle LDR Kullanımı – (LDR İle LED Kontrolü)

Merhaba arkadaşlar!

Arduino dersleri serimizde bolca uygulama yapmaya devam ediyoruz. Bu yazımızda kurduğumuz devredeki INPUT değerine göre OUTPUT çıkışının otonom olarak nasıl değiştiğini göreceğiz.

Yani bir sensör-aktüatör algoritması yazacağız.

Daha önceki yazımızda for döngüsünden bahsetmiştik >> For Döngüsü ile Kara Şimşek Uygulaması Yapalım !

Kısaca LDR Modülüne Bakalım

LDR ‘Light Dependent Resistor’ tamlamasının kısaltmasından gelmektedir ve anlamı ışığa bağımlı dirençtir.

LDR ayrıca foto direnç olarak da adlandırılır. Bir direnç çeşidi olmasının yanında aynı zamanda bir pasif sensör olan LDR, ışık şiddetine bağlı olarak yapısında değişiklik gösterir.

Bu Ortamdan aldığı fiziksel değişimden faydalanarak çıkışında da bir değişiklik gösterebildiği için sensör görevi gördüğünü söyleyebiliriz.

LDR

Elektronik devrelerde LDR’yi tekli halde yukarıdaki şekilde görüldüğü gibi kullanabiliriz. Ayrıca LDR ile bir kontrolcünün daha kolay kullanımı için geliştirilen LDR modüllerini de aşağıdaki şekildeki gibi inceleyebiliriz.

LDR hakkında daha detaylı bilgi edinmek istiyorsanız yazımızı inceleyebilirsiniz >> LDR Nedir? Foto Dirençlerin Çalışma Mantığı

Arduino ile LDR Kullanımı

Bu yazımızda karanlıkta çalışan LDR devresi uygulaması yapacağız. Yani aslında LDR ile ışık kontrolü yapmış olacağız. Hemen gerekli malzeme listesini inceleyelim ve uygulamaya başlayalım.

Gerekli malzemeler: ( Not: Arduino ile LDR Kullanımı ve 10. Derse Kadar Olan Dersleri “Arduino Başlangıç Seti” İle Yapabilirsiniz. Malzemeler Bu Sette! >)

Karanlıkta LED Yakan LDR Devresini Kuralım

LDR LED devresi için ihtiyacımız olan malzemeler hazır ise aşağıdaki gibi devremizi kuralım.

Arduino LDR Devresi
Arduino ile Basit LDR Devresi

Devremiz de hazır ise Arduino LDR kodunu aşağıdaki gibi yazabiliriz. Hem kod satırlarında hem de videomuzda kodun detaylı anlatımını inceleyebilirsiniz.

#define led 3 //3.Pinde LED olduğunu tanımlıyoruz
void setup() {
  pinMode(led, OUTPUT); //LED'in çıkış elemanı olduğunu belirtiyoruz
  Serial.begin(9600); //9600 Baundluk bir seri haberleşme başlatıyoruz
}
void loop() {
  int isik = analogRead(A0); //Işık değişkenini A0 pinindeki LDR ile okuyoruz
  Serial.println(isik); //Okunan değeri seri iletişim ekranına yansıtıyoruz
  delay(50);
  if (isik > 900) { //Okunan ışık değeri 900'den büyük ise
    digitalWrite(led, LOW); //LED yanmasın
  }
  if (isik < 850) { //Okunan ışık değeri 850'den küçük ise
    digitalWrite(led, HIGH); //LED yansın
  }
}

Arduino ile Işık Seviyesi Ölçmek

Gerekli malzemeler:

Bu uygulamamızda da 4 adet LED’imiz, LDR’nin algıladığı ışık miktarına göre değişik sayılarda yanarak ışık seviyesi göstergesi gibi çalışacak.

Kartımızın bağlantı şeması şu şekilde:

ders4_bb

Kodumuz ise şu şekilde:

int ledler[] = {
  4,
  5,
  6,
  7
};
int led_sayisi = 4;
int ldr_pin = A0;
int deger = 0;
void setup() {
  for (int i = 0; i < led_sayisi; i++) {
    pinMode(ledler[i], OUTPUT);
  }
}
void loop() {
  deger = analogRead(ldr_pin);
  if (deger > 0 && deger <= 255) {
    digitalWrite(ledler[0], HIGH);
    digitalWrite(ledler[1], LOW);
    digitalWrite(ledler[2], LOW);
    digitalWrite(ledler[3], LOW);
  }
  if (deger > 256 && deger <= 511) {
    digitalWrite(ledler[0], HIGH);
    digitalWrite(ledler[1], HIGH);
    digitalWrite(ledler[2], LOW);
    digitalWrite(ledler[3], LOW);
  }
  if (deger > 512 && deger <= 767) {
    digitalWrite(ledler[0], HIGH);
    digitalWrite(ledler[1], HIGH);
    digitalWrite(ledler[2], HIGH);
    digitalWrite(ledler[3], LOW);
  }
  if (deger > 768 && deger <= 1023) {
    digitalWrite(ledler[0], HIGH);
    digitalWrite(ledler[1], HIGH);
    digitalWrite(ledler[2], HIGH);
    digitalWrite(ledler[3], HIGH);
  }
  delay(100);
}

Bu uygulamamızda, analog giriş kullanarak LDR’nin algıladığı ışık seviyesini sayısal bir değere dönüştürdük. Bu sayısal değer 0 ile 1023 arasında değiştiğinden, her 255 adımda bir fazla LED’in yanmasını sağladık.

Son Çıkan Yazılar

27 YORUMLAR

  1. Merhaba, çalışmalarınızı ilgi ile takip ediyorum. Verdiğiniz emek için teşekkürler. Arduino -Ldr ile 2 ledi kontol etmek istiyorum. Örneğin; Ldr ışık aldığında yeşil led sürekli açık kırmızı led kapalı olacak. Ldr ışık almadığında Yeşil led sönecek kırmızı led yanacak. Bunu arduino ile nasıl yapabilirim?

    • if(deger<=10){
      digitalWrite(kirmizi,HIGH);
      digitalWrite(yesil,LOW);
      }
      else{
      digitalWrite(yesil,HIGH);
      digitalWrite(kirmizi,LOW);

      yeşille kırmızıyı tanımladıktan sonra değere de
      int deger=analogRead(A0);
      yaptığında doğru devre bağlantısıyla yapabilirsin
      hatta kırmızıya delay ve low kodlarını girersen yanıp yanıp sönebilir daha güzel olur.

    • /* “Merhaba, çalışmalarınızı ilgi ile takip ediyorum. Verdiğiniz emek için teşekkürler. Arduino -Ldr ile 2 ledi kontol etmek istiyorum. Örneğin; Ldr ışık aldığında yeşil led sürekli açık kırmızı led kapalı olacak. Ldr ışık almadığında Yeşil led sönecek kırmızı led yanacak. Bunu arduino ile nasıl yapabilirim?” diyen arkadaşa!!!!*/
      #define kirmizi 3 //3.pinde kirmizi led
      #define yesil 4 //4.pinde yesil led

      void setup() {
      pinMode(kirmizi, OUTPUT);
      pinMode(yesil, OUTPUT);
      }

      void loop() {
      int isik = analogRead(A0); //Analog A0 sensor bagli
      delay(50);

      //Bu 900 sayisini duruma gore degistirebilirsiniz
      int seviye = 900;

      if(isik >= seviye ){ //isik siddeti seviyeden buyuk isik alma
      digitalWrite(kirmizi, LOW); //kirmizi yanma
      digitalWrite(yesil, HIGH); //yesil yan
      }

      if(isik < seviye ){ //isik siddeti seviyeden kucuk isik almama
      digitalWrite(kirmizi, HIGH); //kirmizi yan
      digitalWrite(yesil, LOW); //yesil yanma
      }

      }

  2. #define kirmizi 3 //3.pinde kirmizi led
    #define yesil 4 //4.pinde yesil led

    void setup() {
    pinMode(kirmizi, OUTPUT);
    pinMode(yesil, OUTPUT);
    }

    void loop() {
    int isik = analogRead(A0); //Analog A0 sensor bagli
    delay(50);

    //Bu 900 sayisini duruma gore degistirebilirsiniz
    int seviye = 900;

    if(isik >= seviye ){ //isik siddeti seviyeden buyuk isik alma
    digitalWrite(kirmizi, LOW); //kirmizi yanma
    digitalWrite(yesil, HIGH); //yesil yan
    }

    if(isik < seviye ){ //isik siddeti seviyeden kucuk isik almama
    digitalWrite(kirmizi, HIGH); //kirmizi yan
    digitalWrite(yesil, LOW); //yesil yanma
    }

    }

  3. rip murrayımı coh ozledim bana onu getirrr çaabbbbukkkkk.
    dışardan gördüğün gibi değil
    bir kez olsun buradan bakmadın
    üzüldüm zannediyorsan şunu bil
    canım yandı geçti çok yakmadın
    yaz gelir içimi sarar aynı telaşlar
    kim bilir belki de bir aşk başlar
    dalgalanır deniz ne çıkar durur yavaşlar
    kim bilir belki de bir aşk başlar
    ben özledim galiba seni
    bu yüzden bu kadar sitemlerim
    sen üzülme acıdan bu sözlerim
    karşımda görsem dolar gözlerim

  4. LDR ile 2 ledi sırasıyla yakma istiyorum

    LDR değeri 800 değerine eşit ve üstündeyken mavi, 800 değerinin altındayken kırmızı led yanan devrenin kodunu yaza bilen yada bilen var mı? yanyana iki adet led olacak şekilde biri mavi, diğeri kırmızı

  5. Arduino kartına bağlı olan LDR’den alınan değer 750’nin üzerinde ise 2 numaralı pine bağlı LED yanacak, I2C modüllü LCD ekranda KARANLIK yazacak, değilse LED sönecek AYDINLIK yazacaktır. Uygulamanın kodları, devre şeması ve mümkünse simülasyonu (Proteus üzerinde olabilir) istenmektedir. (750 değeri ortama göre değişebilir)
    kodları buna göre ayarlayabilecek bi babayiğit varmı beyler

  6. TAKILDIM KALDIM YENİ BAŞLADIGIM İÇİN.LDR İLE NORMAL OLARAK LEDİ YAKIYORUM FAKAT BEN İSTİYORUM Kİ ENERJİ TASARRUFU İÇİN GECE LAMBAM 30DK YANSIN 30DK BEKLEME MODUNA GECSİN..GÜNDÜZ OLUNCAYA KADAR YANİ AYDINLIK OLUNCAYA KADAR SÜRSÜN GİTSİN..KOŞULU YAPAMADIM.

  7. arkadaşlar ben bu kodu kullandım çalıştı…
    // LDR kapatinca isik yanar
    #define led 3
    void setup() {
    pinMode (led, OUTPUT);
    Serial.begin(9600);
    }
    void loop() {
    int isik=analogRead(A0);
    Serial.println(isik);
    delay(200);
    if (isik>850){ //bu degeri deneme yanilma ile bul
    digitalWrite(led,LOW);
    }
    else{
    digitalWrite(led,HIGH);
    }
    }

  8. merhaba arduıno da lcd ekrana kapı 15 sn ye acık kalırsa kapı acık diye yanmasını kapalı iken kapı kapalı yazdıran kod ve şemayı nereden bulabilirim yapamıyorum.

  9. ortamda ışık şiddeti arttıkça ledin ışık şiddetinin azaldığı, ortamdaki ışık şiddeti azaldıkça ledin ışık şiddetinin arttığı kodu nasıl yazmam gerekiyor yardımcı olur musunuz?

      • Ben analog çıkış vererek ışığın seviyesini ortamdaki ışığa göre ayarlayabilen bi proje için sormuştum yani okunan değerin aynısını led e vermek yerine okunan deger arrtıkça lede verilen değerin azalmasını nasıl sağlarım bunu öğrenmek istiyorum?

        • int led=11;
          int ldr=0;

          void setup() {
          pinMode(led,OUTPUT);
          }
          void loop() {
          ldr=analogRead(A0);
          ldr=map(ldr,0,1023,0,255);
          ldr=255-ldr;
          analogWrite(led,ldr);
          }

  10. A0 da geçici değişikliklerde (örneğin gece araba farı gelmesi) durum değişikliğine sebep olmasın istiyorum. A0 rın ilk değişikliğini (10sn pulse – gibi) arkada bir timer çalıştırıp giriş işareti geçici ise (10 sn eşit veya daha az ise konum değiştirmeyecek. Eğer giriş işareti 10 sn den büyük ise sürekli işaret olarak algılayıp konum değiştirecek.

    Bu konu üzerinde yardımlarınızı bekliyorum .
    Saygılarımla

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz