Arduino ile Işık Sensörü (LDR) Kullanımı

Arduino ile Işık Sensörü (LDR) Kullanımı

Arduino ile Işık Sensörü (LDR) Kullanımı

Günümüzde akıllı sistemlerin çoğu çevresel verileri algılayarak çalışır.
Otomatik aydınlatma, güneş takip sistemleri, enerji tasarruflu lambalar veya robotik uygulamalar gibi projelerde ışık sensörleri (LDR) oldukça önemli bir yer tutar.
Bu yazıda Arduino ile LDR kullanımı, devre bağlantısı, örnek kodlar, analog veri okuma, ışık yoğunluğu ölçümü ve proje fikirlerini adım adım açıklayacağız.

1. LDR (Light Dependent Resistor) Nedir?

LDR (Light Dependent Resistor), yani ışığa duyarlı direnç, üzerine düşen ışık miktarına göre direnci değişen bir elektronik bileşendir.
Karanlıkta yüksek direnç gösterir, aydınlıkta ise direnci düşer.
Bu özellik sayesinde çevredeki ışık şiddetini ölçmek ve buna göre bir işlem yapmak mümkündür.
Kısaca:

  • Aydınlık ortam → düşük direnç (yaklaşık 1KΩ – 10KΩ)
  • Karanlık ortam → yüksek direnç (yaklaşık 100KΩ – 1MΩ)

LDR’ler genellikle CdS (Kadmiyum Sülfid) malzemesinden yapılır ve ucuz, dayanıklı, analog sensörlerdir.

2. LDR Nasıl Çalışır?

Bir LDR, direnç prensibine göre çalışır:
Direnç = ışık şiddetine ters orantılıdır.
Yani:

  • Ortam aydınlandıkça direnç azalır.
  • Ortam karardıkça direnç artar.

Arduino, bu direnç değişimini doğrudan ölçemez.
Bu yüzden LDR genellikle bir gerilim bölücü devresi içinde kullanılır.

3. LDR ve Arduino Devre Şeması

Aşağıdaki bağlantı, en yaygın kullanılan gerilim bölücü devresidir.

[LDR Devresi Bağlantı Şeması]
---------------------------------------
5V  → LDR → Analog Pin (A0)
              |
             Direnç (10KΩ)
              |
             GND
---------------------------------------

Bu yapıda LDR ve 10KΩ direnç seri bağlanır.
Ara noktadan alınan voltaj değeri A0 pinine gider.
Arduino bu voltajı analog sinyal olarak okuyarak ışık şiddetini hesaplar.

4. Gerekli Malzemeler

Arduino ile LDR kullanımı için şu bileşenlere ihtiyacın olacak:

  • 1 adet Arduino UNO / Nano / Mega
  • 1 adet LDR (Işık sensörü)
  • 1 adet 10KΩ direnç
  • Breadboard
  • Jumper kablolar

Bu temel set ile ışık şiddetini ölçebilir, LED, röle veya motor gibi çıkışları kontrol edebilirsin.

5. Arduino Kod Örneği (Basit Okuma)

Aşağıdaki kod, LDR’den gelen analog değeri Seri Monitör’e yazdırır:

int ldrPin = A0;
int ldrDeger = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  ldrDeger = analogRead(ldrPin);
  Serial.print("Işık Şiddeti: ");
  Serial.println(ldrDeger);
  delay(500);
}

Açıklama:

  • analogRead(A0) fonksiyonu 0–1023 arası bir değer üretir.
  • 0 → karanlık, 1023 → çok aydınlık anlamına gelir.
  • Bu değeri kullanarak LED, ekran veya röle kontrolü yapılabilir.

6. LDR Değerlerini LED ile Görselleştirme

Şimdi LDR’den gelen değere göre LED’i kontrol edelim.
Örneğin ortam karanlıksa LED yansın, aydınlıksa sönsün:

int ldrPin = A0;
int ledPin = 9;
int ldrDeger = 0;

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

void loop() {
  ldrDeger = analogRead(ldrPin);
  Serial.println(ldrDeger);

  if (ldrDeger < 400) {  // Ortam karanlık
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }

  delay(500);
}

Bu kod sayesinde LDR, gece lambası gibi davranır.
Ortam kararınca LED otomatik olarak yanar.

7. LDR ile Analog Ölçümden Lüks (lux) Değerine Geçiş

Bazı uygulamalarda yalnızca “karanlık mı aydınlık mı” bilgisi yetmez.
Bunun yerine ışık şiddetinin nicel değeri (lux) hesaplanabilir.
Temel formül:

Vout = (AnalogDeğer / 1023.0) * 5.0
Rldr = (10K * (5.0 - Vout)) / Vout

Bu hesaplamayla LDR’nin anlık direnci bulunur.
Daha sonra kalibrasyon katsayısı eklenerek yaklaşık lux değeri tahmin edilir.

int ldrPin = A0;
float Vout, Rldr, lux;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int analogDeger = analogRead(ldrPin);
  Vout = analogDeger * (5.0 / 1023.0);
  Rldr = (10000.0 * (5.0 - Vout)) / Vout;
  lux = 500 / (Rldr / 1000.0); // yaklaşık dönüşüm

  Serial.print("LDR Direnci: ");
  Serial.print(Rldr);
  Serial.print(" Ohm  |  Işık: ");
  Serial.print(lux);
  Serial.println(" Lux");
  
  delay(1000);
}

Bu yöntemle Arduino, yaklaşık lux cinsinden ışık şiddetini ölçebilir.

8. Otomatik Aydınlatma Projesi (LDR + Röle)

Bir röle modülü kullanarak, LDR’yi doğrudan bir akıllı lamba kontrolü sistemine dönüştürebilirsin.

LDR değeri düşükse (karanlık) → röle aktif → lamba yanar  
LDR değeri yüksekse (gündüz) → röle pasif → lamba kapanır

Örnek kod:

int ldrPin = A0;
int rolePin = 7;
int esik = 400;

void setup() {
  pinMode(rolePin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int ldrDeger = analogRead(ldrPin);
  Serial.println(ldrDeger);
  
  if (ldrDeger < esik) {
    digitalWrite(rolePin, HIGH);
  } else {
    digitalWrite(rolePin, LOW);
  }
  
  delay(500);
}

Bu proje genellikle “otomatik sokak lambası” veya “bahçe ışığı kontrolü” gibi uygulamalarda kullanılır.

9. LDR ile Servo Motor Kullanımı

LDR, yalnızca ışık ölçmek için değil, ışık takip sistemleri (örneğin güneş paneli yönlendirme) için de kullanılabilir.
Basit bir güneş takip sistemi şöyle yapılır:

  • İki adet LDR sensör (sağ ve sol) kullanılır.
  • Güneş hangi tarafa daha çok vuruyorsa servo o yöne döner.

Temel fikir:

Sağ LDR > Sol LDR → servo sağa dön
Sol LDR > Sağ LDR → servo sola dön

Bu sistem, Arduino ile otomatik güneş paneli hizalama projelerinde çok kullanılır.

10. LDR ile Röle ve LED Birlikte Kullanımı

Kimi durumlarda sistemin hem görsel hem işlevsel çalışması istenir.
Aşağıdaki örnekte:

  • Ortam karanlıksa → röle aktif + LED yanar.
  • Ortam aydınlıksa → her ikisi kapanır.
int ldrPin = A0;
int ledPin = 9;
int rolePin = 7;
int esikDeger = 450;

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

void loop() {
  int ldrDeger = analogRead(ldrPin);
  Serial.println(ldrDeger);
  
  if (ldrDeger < esikDeger) {
    digitalWrite(ledPin, HIGH);
    digitalWrite(rolePin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
    digitalWrite(rolePin, LOW);
  }

  delay(300);
}

Bu örnekle Arduino LDR otomatik kontrol sistemi tamamlanmış olur.

11. LDR Kalibrasyonu

Her ortam farklı ışık koşullarına sahiptir.
Bu yüzden projelerde sabit eşik değerleri yerine dinamik kalibrasyon önerilir.
Örneğin:

  • Gün doğumu – gün batımı gibi değişken ortamlar
  • İç mekan vs dış mekan farkı
  • Sensör tipi farklılıkları

Kalibrasyon için basit bir örnek:

int minDeger = 1023;
int maxDeger = 0;

void loop() {
  int okuma = analogRead(A0);
  if (okuma > maxDeger) maxDeger = okuma;
  if (okuma < minDeger) minDeger = okuma;

  Serial.print("Min: ");
  Serial.print(minDeger);
  Serial.print(" | Max: ");
  Serial.println(maxDeger);

  delay(500);
}

Bu yöntemle ortama özel minimum ve maksimum değerleri kaydedebilir, eşiği dinamik hale getirebilirsin.

12. Yaygın Hatalar ve Çözümleri

[LDR Projelerinde Sık Görülen Sorunlar]
---------------------------------------
1. Değer Sürekli 1023 → LDR GND’ye bağlı değil.
2. Değer Sürekli 0    → LDR 5V’a bağlı değil.
3. Aşırı Gürültü      → Kablolar uzun veya direnç çok düşük.
4. LED Hep Yanık      → Eşik değeri yanlış seçilmiş.
5. Okuma Değişmiyor   → Analog pin yanlış tanımlanmış.
---------------------------------------

Kısa kablo kullanmak, breadboard bağlantılarını sıkı yapmak ve doğru direnç seçmek bu sorunları önler.

13. Gerçek Hayat Uygulamaları

LDR sensörleri, Arduino dışında da pek çok alanda kullanılır:

  • Sokak lambaları
  • Akıllı ev sistemleri
  • Robot navigasyonu
  • Güneş paneli takip sistemleri
  • Güvenlik kamerası aktifliği
  • Fotoğraf makinelerinde pozlama kontrolü

Bu nedenle LDR, elektronik dünyasında “başlangıç sensörü” olarak görülse de, profesyonel uygulamalarda da sıkça yer alır.

14. LDR ile Kombine Projeler (Fikirler)

  1. Arduino LDR + Buzzer:
  2. Karanlıkta alarm çalan sistem.
  3. Arduino LDR + LCD Ekran:
  4. Anlık ışık şiddetini ekranda gösteren mini ölçüm istasyonu.
  5. Arduino LDR + Bluetooth (HC-05):
  6. Telefonla ışık değerlerini uzaktan izleme.
  7. Arduino LDR + ESP8266:
  8. Işık sensörü verisini internet üzerinden yayınlama (IoT projesi).
  9. Arduino LDR + Servo:
  10. Güneş paneli veya kamera sisteminde ışık yönüne göre pozisyon ayarlama.

15. Sonuç: LDR ile Akıllı Sistemlere İlk Adım

Arduino ile LDR kullanımı, ışığa duyarlı projelerin temelini oluşturur.
Bu basit ama etkili sensör, çevredeki ışık miktarına tepki vererek birçok akıllı otomasyonun kalbidir.
Kısaca:

  • LDR’yi analog giriş ile okursun.
  • Işık miktarına göre sistem tepki verir.
  • Basit bir eşik değeriyle “gece–gündüz” ayrımı yapılabilir.

İster sokak lambası ister IoT tabanlı güneş takip sistemi olsun, LDR projelerinde Arduino sana sınırsız özgürlük sunar.