Parçalar · 4 dk okuma

LDR Işık Sensörü Nedir? Arduino ile Işık Ölçme ve Otomatik Gece Lambası

LDR (foto direnç) nasıl çalışır? Gerilim bölücü bağlantısı, doğru direnç seçimi, analogRead ile ışık okuma, histerezisli gece lambası, LDR modülü, ESP32 ve Pico kullanımı ve sık yapılan hatalar.

LDR (Light Dependent Resistor), adından da anlaşılacağı gibi direnci ışığa göre değişen bir dirençtir; foto direnç ya da fotosel olarak da bilinir. Karanlıkta direnci çok yüksektir, ışık arttıkça direnci düşer. Akşam olunca kendiliğinden yanan sokak lambaları, otomatik gece lambaları ve ışığa göre çalışan oyuncaklar bu basit parçayla çalışır. Ucuzdur, kutupsuzdur ve Arduino'ya bir dirençle bağlanır; ışıkla ilgili ilk projen için ideal bir başlangıçtır.

LDR foto direnç ışık sensörü
LDR: yüzeyindeki zikzak desen ışığa duyarlı kadmiyum sülfür tabakadır; iki bacağı arasında kutup farkı yoktur.

LDR nasıl çalışır?

LDR'nin yüzeyindeki zikzak desen, ışığa duyarlı kadmiyum sülfür (CdS) bir yarı iletkendir. Üzerine ışık düştüğünde fotonlar malzemedeki elektronları serbest bırakır, malzeme daha iyi iletken olur ve direnç düşer. Bu değişim doğrusal değildir ve görece yavaştır (onlarca milisaniye). Bu yüzden LDR, ışığı lüks cinsinden hassasça ölçmek için değil, "karanlık mı, aydınlık mı" gibi kararlar ve kaba ışık seviyeleri için idealdir.

OrtamYaklaşık LDR direnci (GL5528)
Tam karanlık1 MΩ ve üzeri
Gece lambası ışığı (~1 lux)50–100 kΩ
Loş oda (~10 lux)10–20 kΩ
Aydınlık oda (~100 lux)3–5 kΩ
Masa lambası altı (~1000 lux)Yaklaşık 1 kΩ
Gün ışığıBirkaç yüz Ω

Değerler modele göre değişir. Kitlerde en yaygın olan GL5528'dir; GL5516, GL5537 ve GL5539 gibi kardeşleri aynı ışıkta farklı direnç gösterir. Kendi LDR'nin değerlerini bir multimetreyle karanlıkta ve ışıkta ölçerek kolayca öğrenebilirsin.

Arduino'ya bağlamak: gerilim bölücü

Arduino direnci değil gerilimi ölçer. Bu yüzden LDR, sabit bir dirençle birlikte bir gerilim bölücü oluşturacak şekilde bağlanır: 5V → LDR → A0 → 10 kΩ → GND. Işık arttıkça LDR'nin direnci düşer ve A0'daki gerilim yükselir. A0'daki gerilim V = 5 × Rsabit / (RLDR + Rsabit) formülüyle bulunur; analogRead() bunu 0–1023 arasında bir sayıya çevirir. Farklı direnç değerlerini denemek için Gerilim bölücü hesaplayıcısını kullanabilirsin.

IşıkLDR direnciA0 gerilimianalogRead
Tam karanlık1 MΩ0,05 V~10
Loş oda15 kΩ2,0 V~410
Aydınlık oda4 kΩ3,6 V~730
Masa lambası altı1 kΩ4,5 V~930
Sabit direnç, ilgilendiğin ışık seviyesindeki LDR direncine yakın seçildiğinde en hassas sonucu verir. Gece lambası gibi loş ortam kararları için 10–47 kΩ, güçlü ışıkları birbirinden ayırmak için 1 kΩ civarı daha iyi çalışır. Kitlerdeki 10 kΩ çoğu proje için iyi bir başlangıçtır.

Arduino ile ışık seviyesini okumak

Arduino (C++)
1const int LDR_PIN = A0;
2
3void setup() {
4  Serial.begin(9600);
5}
6
7void loop() {
8  int raw = analogRead(LDR_PIN);            // 0 (karanlık) – 1023 (aydınlık) / dark – bright
9  int percent = map(raw, 0, 1023, 0, 100);  // yüzde / percent
10  Serial.print("Ham / raw: ");
11  Serial.print(raw);
12  Serial.print("  Işık / light: %");
13  Serial.println(percent);
14  delay(500);
15}

Arduino IDE'deki Seri Çizici (Serial Plotter) ile değeri canlı bir grafik olarak izleyebilirsin. Elini LDR'nin üzerine tuttuğunda grafiğin düştüğünü, el fenerini tuttuğunda yükseldiğini görürsün. Projen için doğru eşik değerini en kolay bu şekilde, sensörün gerçekten duracağı yerde bulursun.

Otomatik gece lambası: eşik ve histerezis

En basit gece lambası "değer 300'ün altındaysa LED'i yak" der. Ama ışık tam eşiğin etrafındayken lamba sürekli yanıp söner; lambanın kendi ışığı LDR'ye vuruyorsa durum daha da kötüleşir. Çözüm histerezistir: iki farklı eşik kullanmak. Aşağıdaki kod ışık 300'ün altına düşünce lambayı yakar ama ancak 400'ün üstüne çıkınca söndürür; aradaki boşluk titremeyi tamamen ortadan kaldırır.

Arduino (C++)
1const int LDR_PIN = A0;
2const int LED_PIN = 9;
3const int ON_LEVEL = 300;    // bunun altında yak / turn on below this
4const int OFF_LEVEL = 400;   // bunun üstünde söndür / turn off above this
5
6bool lampOn = false;
7
8void setup() {
9  pinMode(LED_PIN, OUTPUT);
10}
11
12void loop() {
13  int light = analogRead(LDR_PIN);
14  if (!lampOn && light < ON_LEVEL) lampOn = true;
15  if (lampOn && light > OFF_LEVEL) lampOn = false;
16  digitalWrite(LED_PIN, lampOn ? HIGH : LOW);
17  delay(200);
18}
Lambayı LDR'yi aydınlatmayacak şekilde yerleştir; ışık sensöre geri dönerse lamba kendini söndürür. Ayrıca 10 okumanın ortalamasını almak, geçen bir gölgenin ya da floresan lambanın titreşiminin yarattığı anlık sıçramaları yumuşatır.

Karanlıkta daha parlak yanan LED

Açma-kapama yerine ışık azaldıkça LED'in yavaş yavaş parlamasını da sağlayabilirsin. map() fonksiyonu ölçülen ışığı ters orantılı bir PWM değerine çevirir: ortam karardıkça LED parlar, aydınlandıkça söner. LED'i ~ işaretli bir PWM pinine (örneğin 9) bağlamayı unutma.

Arduino (C++)
1void loop() {
2  int light = analogRead(A0);
3  int brightness = map(light, 100, 900, 255, 0);  // karanlık → parlak / dark → bright
4  analogWrite(9, constrain(brightness, 0, 255));
5  delay(50);
6}

LDR modülü: dijital ve analog çıkış

Hazır LDR modüllerinde LDR, bölücü direnci, eşik ayarı için mavi bir trimpot ve LM393 karşılaştırıcı aynı kartta bulunur. AO pini gerilim bölücünün analog çıkışını verir; DO pini ise trimpotla ayarlanan eşiğe göre yalnızca HIGH ya da LOW verir. Çoğu modülde DO, ortam eşikten aydınlıksa LOW, karanlıksa HIGH olur; kendi modülünü küçük bir testle doğrula.

PinGörevi
VCCBesleme (3,3–5 V)
GNDToprak
DODijital çıkış: eşik trimpotla ayarlanır
AOAnalog çıkış: gerilim bölücünün orta noktası

ESP32 ve Raspberry Pi Pico ile LDR

ESP32 ve Pico 3,3 V ile çalıştığı için gerilim bölücüyü 3V3 pininden besle. ESP32'nin ADC'si 12 bittir ve 0–4095 arası değer döndürür. Wi-Fi açıkken ADC2 pinleri çalışmadığından LDR'yi ADC1 pinlerinden birine (GPIO 32–39) bağla. Pico'da analog girişler GP26, GP27 ve GP28'dir; MicroPython read_u16() ile 0–65535 arası değer verir:

MicroPython
1from machine import ADC, Pin
2import time
3
4ldr = ADC(26)                  # GP26 (ADC0); bölücü 3V3'ten / divider fed from 3V3
5led = Pin(15, Pin.OUT)
6
7while True:
8    light = ldr.read_u16()     # 0 (karanlık) – 65535 (aydınlık) / dark – bright
9    led.value(light < 20000)   # karanlıkta yak / on when dark
10    print(light)
11    time.sleep(0.5)
ESP32 ve Pico'da gerilim bölücüyü asla 5V'tan besleme. Aydınlıkta analog pine 3,3 V'un üzerinde gerilim gelir ve pin kalıcı olarak zarar görebilir.

LDR mi, dijital ışık sensörü mü?

ÖzellikLDRBH1750 (dijital)
ÇıkışAnalog (direnç değişimi)Dijital (I2C), doğrudan lüks
DoğrulukKaba; sıcaklık ve modelden etkilenirHassas ve kalibre
Tepki hızıYavaş (onlarca milisaniye)Hızlı
FiyatÇok ucuzBiraz daha pahalı
Uygun kullanımKaranlık/aydınlık kararı, gece lambasıIşık ölçümü, bitki ışığı, ekran parlaklığı

LDR ile proje fikirleri

  • Otomatik gece lambası: Karanlıkta yanan, histerezisle titremeyen bir lamba.
  • Akıllı koridor lambası: Yalnızca karanlıkta ve biri geçtiğinde yanması için LDR'yi PIR Hareket Sensörü ile birleştir.
  • Güneşi takip eden panel: İki LDR'nin farkına göre bir servo motoru çevirip paneli en parlak yöne döndür.
  • Lazerli güvenlik sistemi: Bir lazer ışınını LDR'ye tut; ışın kesilince alarm çalsın.
  • Renkli ortam ışığı: Hava karardıkça RGB LED'in rengini sıcak tonlara kaydır.
  • Gün doğumu alarmı: Sabah ilk ışıkla bir buzzer çalsın.

Sık yapılan hatalar ve çözümleri

  • Değer hep 0 ya da hep 1023: Sabit direnç takılmamış ya da LDR doğrudan 5V ile A0 arasına bağlanmış; gerilim bölücüyü kur.
  • Değerler ters çalışıyor: LDR ile sabit direnç yer değiştirmiş; karanlıkta değer artıyorsa ya yerlerini değiştir ya da koddaki karşılaştırmayı tersine çevir.
  • Lamba yanıp sönüyor: Lambanın ışığı LDR'ye vuruyor ya da tek eşik kullanılıyor; histerezis ekle.
  • Karanlığa geçişte gecikme: LDR aydınlıktan karanlığa, karanlıktan aydınlığa göre daha yavaş döner; birkaç saniyelik gecikme normaldir.
  • Lüks ölçmeye çalışmak: LDR kalibre bir sensör değildir; gerçek lüks değeri için BH1750 kullan.
  • ESP32'de Wi-Fi açılınca okuma bozuluyor: LDR bir ADC2 pinine bağlı; GPIO 32–39 arasındaki ADC1 pinlerinden birine taşı.

LDR, analog okuma ve gerilim bölücü mantığını öğrenmenin en kolay yoludur; burada öğrendiklerin nem, gaz ve sıcaklık gibi birçok analog sensörde de işine yarar. Bölücüdeki dirençlerin nasıl çalıştığını merak ediyorsan Direnç Nedir? yazısına bak; BlueGrays uygulamasında LDR'li gece lambası, ışık şiddeti ölçümü ve lazerli güvenlik projelerini adım adım bulabilirsin.

Sıkça sorulan sorular

LDR'ye kaç ohm direnç bağlanır?

En yaygın seçim 10 kΩ'dur ve çoğu iç mekân projesinde iyi sonuç verir. Loş ortamlarda daha hassas ölçüm için 47 kΩ, çok aydınlık ortamlar için 1 kΩ tercih edilebilir. Kural olarak sabit direnci, ilgilendiğin ışık seviyesindeki LDR direncine yakın seç.

LDR'nin artısı eksisi var mı?

Hayır. LDR normal bir direnç gibi kutupsuzdur; iki bacağı da istediğin yöne takılabilir. Önemli olan, sabit dirençle birlikte doğru bir gerilim bölücü kurmaktır.

LDR ile lüks ölçülebilir mi?

Yaklaşık olarak hesaplanabilir ama doğru sonuç vermez; LDR'nin tepkisi doğrusal değildir ve modelden modele, hatta sıcaklıkla değişir. Gerçek lüks değeri gerekiyorsa BH1750 ya da TSL2561 gibi dijital bir ışık sensörü kullan.

LDR modülündeki DO ve AO pinleri arasındaki fark nedir?

AO, ışık şiddetiyle değişen analog bir gerilim verir ve analogRead() ile okunur. DO ise modülün üzerindeki trimpotla ayarlanan eşiğe göre yalnızca HIGH ya da LOW verir ve digitalRead() ile okunur; açma-kapama işleri için pratiktir.

LDR neden karanlıkta geç tepki veriyor?

CdS malzeme, ışık kesildikten sonra karanlık direncine birkaç saniyede ulaşır; aydınlığa geçiş ise çok daha hızlıdır. Bu, LDR'nin doğal bir özelliğidir. Hızlı tepki gereken işlerde fotodiyot ya da fototransistör kullanılır.

ESP32'de LDR değeri neden hep 4095 ya da hiç değişmiyor?

Bölücü 5V'tan besleniyorsa gerilim ADC'nin sınırını aşar ve değer 4095'te kalır; bölücüyü 3V3'ten besle. Değer hiç değişmiyorsa LDR bir ADC2 pinine bağlı olabilir; Wi-Fi açıkken ADC2 çalışmadığı için GPIO 32–39 arasındaki bir ADC1 pinini kullan.

Tüm projeleri gör
Ldr İle Işık Şiddeti Okuma
#11Başlangıç

Ldr İle Işık Şiddeti Okuma

LDR sensörü ile ortam ışık şiddetini ölçüp Serial Monitor'da gösteren proje. Analog sensör okuma ve seri haberleşme temellerini öğretir.

4.6(78)
119
Ldr İle Gece Lambası
#12Başlangıç

Ldr İle Gece Lambası

Ortam karardığında LED'i otomatik olarak yakan LDR tabanlı gece lambası projesi. Analog eşik değeri karşılaştırması ile otomatik kontrol mantığını öğretir.

4.8(99)
153
Lazerli Uyarı Sistemi
#22Orta
Premium

Lazerli Uyarı Sistemi

Lazer ışını kesildiğinde LDR üzerinden algılayarak buzzer ve LED ile uyarı veren güvenlik projesi. Lazer-LDR çifti ile ışık kesintisi algılama mantığını öğretir.

4.8(64)
82
Lazerli Güvenlik Sistemi
#23İleri
Premium

Lazerli Güvenlik Sistemi

Lazer ışını kesildiğinde alarmı aktifleyen, buton veya IR kumanda ile sıfırlayabilen gelişmiş güvenlik sistemi. Çoklu giriş kaynağı ve durum yönetimini öğretir.

4.8(60)
77
ESP32 LDR ile Gece Lambası
#112Başlangıç
Premium

ESP32 LDR ile Gece Lambası

Karanlıkta LED'in otomatik yandığı, aydınlıkta söndüğü gece lambası. LDR Sensör Modülünün D0 (digital out) pini kullanılır — modülün üzerindeki küçük potansiyometre ile karanlık eşiği ayarlanır, modül kendisi HIGH/LOW çıkış üretir. ESP32 sadece digitalRead() ile bu sinyali okur, kod çok basit.

4.6(17)
30
ESP32 LDR Modülü ile Işık Şiddeti Okuma
#113Başlangıç

ESP32 LDR Modülü ile Işık Şiddeti Okuma

LDR Modülünün ölçtüğü ışık değerini Serial Monitor'da gerçek zamanlı izleme + lux yaklaşık değeri. Modülün kalibrasyon mantığını öğretir. Proje 10'un öncesinde yapılması ideal; çünkü eşik değerini belirlemek için kullanılır.

4.6(36)
55
ESP32 Akıllı Aydınlatma (PIR + LDR + Röle + OLED)
#141İleri
Premium

ESP32 Akıllı Aydınlatma (PIR + LDR + Röle + OLED)

ESP32, PIR hareket sensörü, LDR ışık sensörü ve röle modülü ile evinin koridorunu, tuvaletini veya kilerini akıllı aydınlatmaya dönüştürüyoruz. Klasik "karanlıkta hareket algılanınca ışık yansın" senaryosunu inşa ediyoruz — ortam aydınlıksa hareket olsa bile ışık yanmaz, böylece gündüz gereksiz yere yanmaz ve enerji tasarrufu sağlanır. Işık 30 saniye yanık kalır; hareket devam ederse timer otomatik sıfırlanır ve süre uzar. SSD1306 OLED ekranda büyük fontlarla durum (AÇIK / GÜNDÜZ / BEKLE), geri

4.3(6)
11
ESP32 PIR Hareket Sensörü ile Otomatik Aydınlatma
#121Orta
Premium

ESP32 PIR Hareket Sensörü ile Otomatik Aydınlatma

Bu projede HC-SR501 PIR hareket sensörü ile odaya giren kişiyi algılayıp LED'i otomatik olarak yakacağız. Hareket algılandığında LED belirli bir süre yanacak ve `millis()` fonksiyonu ile sayaç sayesinde `delay()` kullanmadan zamanı yöneteceğiz. Bu sayede ESP32 bloklanmadan, başka işler de yapabilen bir hareket sensörlü aydınlatma sistemi elde edeceğiz. Gerçek hayatta merdiven, koridor, banyo veya dolap içi aydınlatmalarda kullanılabilir.

4.4(24)
38

LDR'nin ışıkla direncini nasıl değiştirdiğini, gerilim bölücüyle Arduino'ya bağlamayı, doğru direnci seçmeyi ve titremeyen bir otomatik gece lambası yapmayı öğren.

LDR Işık Sensörü Nedir? Arduino ile Işık Ölçme ve Otomatik Gece Lambası | BlueGrays