#113Başlangıç

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

LDR modülünün ham ADC değerini ve karanlık/aydınlık referanslarına göre hesaplanan göreli ışık yüzdesini Serial Monitor'da gerçek zamanlı izleme. Bu yüzde lux ölçümü değildir. 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 tamamlandı
ESP32 LDR Modülü ile Işık Şiddeti Okuma
Odadaki ışığın ne kadar güçlü olduğunu yüzde olarak gösteren basit bir ışık ölçer. Işık sensörü ortamı ölçer, ESP32 bunu karanlık için sıfır, tam aydınlık için yüz olacak şekilde çevirip her yarım saniyede bir bilgisayar ekranına yazar. Gece lambası gibi projelerde ışığın hangi seviyede yanacağına karar vermek için önce bu ölçümü yaparsın.

Video

Devre Şeması

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

Kaynak Kodu

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   ESP32 LDR Modülü ile Işık Şiddeti Okuma
4// ─────────────────────────────────────────
5// LDR modülünün analog çıkışı (AO) 12 bit ADC ile okunur ve kalibrasyon
6// değerlerine göre 0-100 arası ışık yüzdesine çevrilir. Sonuç 0.5 sn'de
7// bir Serial Monitor'e (115200 baud) yazılır.
8//
9// Pinler:
10//   GPIO 34 (klasik ESP32) / GPIO 1 (ESP32-S2/S3) -> LDR modülü AO
11//   LDR modülü VCC -> 3V3, GND -> GND
12
13#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3)
14  const int LDR_PIN = 1;   // ESP32-S2/S3: ADC1_CH0
15#else
16  // Klasik ESP32 DevKit V1: ADC1_CH6, yalnız giriş. GPIO 1 burada Serial TX ile çakışır
17  const int LDR_PIN = 34;
18#endif
19
20// Kalibrasyon: kendi ortamında ölç, buraya yaz. LDR modülünde aydınlık arttıkça AO voltajı (ve raw)
21// DÜŞER.
22const int RAW_DARK  = 4000;  // Karanlık raw
23const int RAW_LIGHT = 100;   // Aydınlık raw
24
25void setup() {
26  Serial.begin(115200);
27  analogReadResolution(12);  // 12 bit ADC sabitle
28  Serial.println("LDR Okuma / LDR Reading");
29  Serial.println("-----------------------------");
30}
31
32void loop() {
33  int raw = analogRead(LDR_PIN);
34  // Değeri kalibrasyon aralığına kırp, karanlık = %0
35  int clipped = constrain(raw, RAW_LIGHT, RAW_DARK);
36  int percent = map(clipped, RAW_DARK, RAW_LIGHT, 0, 100);
37
38  Serial.print("Raw: ");
39  Serial.print(raw);
40  Serial.print(" | Light: %");
41  Serial.println(percent);
42
43  delay(500);
44}
45

Sıkça Sorulanlar

ESP32'nin ADC'si hangi değerleri verir?▾

ESP32'nin ADC'si 12 bittir ve 0–4095 arası değer döndürür. Arduino Uno'daki 0–1023 aralığından farklı olduğu için eşik ve hesapları buna göre ayarlamalısın.

Analog okumalar Wi-Fi açıkken bozuluyor, neden?▾

ESP32'de ADC2 kanalı (GPIO 0, 2, 4, 12–15, 25–27) Wi-Fi açıkken kullanılamaz. Analog sensörleri ADC1 pinlerine (GPIO 32–39) bağlamak bu sorunu önler.

Okunan değer gerçek lux değeri mi?▾

Hayır, bu kod lux hesaplamaz; ham ADC değerini ve seçilen karanlık/aydınlık referanslarına göre göreli ışık yüzdesini gösterir. LDR'nin tepkisi doğrusal değildir ve modelden modele değişir. Hassas lux ölçümü için BH1750 gibi kalibre edilmiş bir sensör kullanılır.

ESP32 ADC'si neden uçlarda hatalı ölçüyor?▾

ESP32 ADC'si 0 V'a ve 3,3 V'a yakın bölgelerde doğrusal değildir. analogReadMilliVolts() kalibrasyonlu değer verir; kritik ölçümlerde 0,1–3,1 V arasında çalışmak en doğru sonucu verir.

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