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 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.
| Ortam | Yaklaşık LDR direnci (GL5528) |
|---|---|
| Tam karanlık | 1 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şık | LDR direnci | A0 gerilimi | analogRead |
|---|---|---|---|
| Tam karanlık | 1 MΩ | 0,05 V | ~10 |
| Loş oda | 15 kΩ | 2,0 V | ~410 |
| Aydınlık oda | 4 kΩ | 3,6 V | ~730 |
| Masa lambası altı | 1 kΩ | 4,5 V | ~930 |
Arduino ile ışık seviyesini okumak
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.
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}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.
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.
| Pin | Görevi |
|---|---|
| VCC | Besleme (3,3–5 V) |
| GND | Toprak |
| DO | Dijital çıkış: eşik trimpotla ayarlanır |
| AO | Analog çı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:
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)LDR mi, dijital ışık sensörü mü?
| Özellik | LDR | BH1750 (dijital) |
|---|---|---|
| Çıkış | Analog (direnç değişimi) | Dijital (I2C), doğrudan lüks |
| Doğruluk | Kaba; sıcaklık ve modelden etkilenir | Hassas ve kalibre |
| Tepki hızı | Yavaş (onlarca milisaniye) | Hızlı |
| Fiyat | Çok ucuz | Biraz daha pahalı |
| Uygun kullanım | Karanlı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.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
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.

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.

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.

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.

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.

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.

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

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.
Diğer yazılar
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.

