ESP32 ile RGB LED Renk Kontrolü Projesi

Bu rehber, ESP32 geliştirme kartı kullanarak bir RGB LED üzerinde farklı renkleri görüntüleme işlemini adım adım açıklar. PWM (Pulse Width Modulation) tekniği ile kırmızı, yeşil ve mavi kanalların parlaklık değerlerinin bağımsız olarak kontrol edilmesi prensibine dayanan bu proje, analog çıkış ve renk karışımı konularını öğrenmek için temel bir uygulamadır.

Adım 1 – RGB LED Bileşenini Tanıyın

RGB LED, tek bir paket içinde Kırmızı (Red), Yeşil (Green) ve Mavi (Blue) renkte üç ayrı LED barındırır. İki yaygın yapıda bulunur:

  • Common Cathode (Ortak Katot): Tüm LED’lerin katot (-) bacakları ortaktır ve GND’ye bağlanır. Renk kanallarına HIGH sinyal uygulandığında ilgili LED yanar.
  • Common Anode (Ortak Anot): Tüm LED’lerin anot (+) bacakları ortaktır ve VCC’ye bağlanır. Renk kanallarına LOW sinyal uygulandığında ilgili LED yanar.

Bu projede Common Cathode yapı varsayılmıştır. Farklı tip LED kullanılıyorsa kod mantığı tersine çevrilmelidir.

Adım 2 – GPIO Pin Atamaları

Projede kullanılan pin atamaları:

  • GPIO 23: Kırmızı (Red) kanal kontrol pini
  • GPIO 22: Yeşil (Green) kanal kontrol pini
  • GPIO 21: Mavi (Blue) kanal kontrol pini

Bu pinler PWM çıkışı destekleyen herhangi bir GPIO pini ile değiştirilebilir. ESP32’de çoğu GPIO pini PWM için uygundur.

Aşağıdaki link üzerinden istediğiniz renk için RGB değerini bulabilirsiniz.

Adım 3 – Devre Bağlantısı

Common Cathode RGB LED Bağlantısı:

  1. RGB LED’in ortak katot (-) bacağını ESP32 GND pinine bağlayın.
  2. Kırmızı (R) bacağına bir direnç (220Ω-330Ω) bağlayın, direncin diğer ucunu GPIO 23’e bağlayın.
  3. Yeşil (G) bacağına bir direnç (220Ω-330Ω) bağlayın, direncin diğer ucunu GPIO 22’ye bağlayın.
  4. Mavi (B) bacağına bir direnç (220Ω-330Ω) bağlayın, direncin diğer ucunu GPIO 21’e bağlayın.

Not: Her renk kanalı için seri direnç kullanımı, LED’in aşırı akımdan korunması için gereklidir.

Adım 4 – Arduino IDE Hazırlığı

Arduino IDE’yi açın ve aşağıdaki ayarları kontrol edin:

  • Board: ESP32 geliştirme kartınızın modeli (Örn: DOIT ESP32 DEVKIT V1)
  • Port: ESP32’nin bağlı olduğu COM portu
  • ESP32 Paketi: Board Manager’dan “esp32” paketinin yüklü olduğundan emin olun
  • PWM Çözünürlüğü: ESP32’de analogWrite() varsayılan olarak 8-bit PWM (0-255) kullanır

Adım 5 – Kodu Yükleyin

Aşağıdaki kodu Arduino IDE editörüne yapıştırın ve ESP32 kartınıza yükleyin:

/*
 * ESP32 RGB LED Renk Kontrolü Projesi
 * Common Cathode RGB LED varsayılmıştır
 * Pin atamaları: Red=GPIO23, Green=GPIO22, Blue=GPIO21
 * PWM çözünürlüğü: 8-bit (0-255)
 */

// RGB LED renk kanallarının bağlı olduğu GPIO pinlerini tanımla
#define PIN_RED    23 // Kırmızı kanal için GPIO23 pini
#define PIN_GREEN  22 // Yeşil kanal için GPIO22 pini
#define PIN_BLUE   21 // Mavi kanal için GPIO21 pini

// Kurulum fonksiyonu: reset atıldığında bir kez çalışır
void setup() {
  // Kırmızı kanal pinini çıkış (OUTPUT) olarak ayarla
  pinMode(PIN_RED, OUTPUT);

  // Yeşil kanal pinini çıkış (OUTPUT) olarak ayarla
  pinMode(PIN_GREEN, OUTPUT);

  // Mavi kanal pinini çıkış (OUTPUT) olarak ayarla
  pinMode(PIN_BLUE, OUTPUT);
}

// Ana döngü fonksiyonu: sürekli tekrarlanır
void loop() {
  // Renk kodu #00C9CC (Turkuaz)
  // R = 0, G = 201, B = 204 değerlerini RGB LED'e uygula
  setColor(0, 201, 204);
  delay(1000); // Bu renkte 1 saniye (1000 ms) bekle

  // Renk kodu #F7788A (Pembe-Kırmızı)
  // R = 247, G = 120, B = 138 değerlerini RGB LED'e uygula
  setColor(247, 120, 138);
  delay(1000); // Bu renkte 1 saniye (1000 ms) bekle

  // Renk kodu #34A853 (Yeşil)
  // R = 52, G = 168, B = 83 değerlerini RGB LED'e uygula
  setColor(52, 168, 83);
  delay(1000); // Bu renkte 1 saniye (1000 ms) bekle
}

// RGB renk değerlerini LED'e uygulayan yardımcı fonksiyon
// Parametreler: R (0-255), G (0-255), B (0-255)
void setColor(int R, int G, int B) {
  // Kırmızı kanal PWM değerini GPIO23 pinine yaz
  // analogWrite: 0 (kapalı) ile 255 (tam parlak) arasında değer alır
  analogWrite(PIN_RED, R);

  // Yeşil kanal PWM değerini GPIO22 pinine yaz
  analogWrite(PIN_GREEN, G);

  // Mavi kanal PWM değerini GPIO21 pinine yaz
  analogWrite(PIN_BLUE, B);
}

Kod Nasıl Çalışır

Pin Tanımları

  • #define direktifleri ile renk kanallarının bağlı olduğu GPIO pinleri sabit olarak tanımlanır.
  • Bu yaklaşım, kodun okunabilirliğini artırır ve pin değişikliklerinde tek noktadan güncelleme imkanı sağlar.

Setup Fonksiyonu

  • pinMode(PIN_X, OUTPUT): Her bir renk kanalının bağlı olduğu pin dijital çıkış olarak yapılandırılır.
  • PWM sinyali üretebilmek için pinlerin OUTPUT modunda olması gereklidir.

Loop Fonksiyonu

  • setColor(R, G, B) fonksiyonu çağrılarak istenen renk değeri RGB LED’e uygulanır.
  • Her renk geçişinden sonra delay(1000) ile 1 saniye bekleme sağlanır; bu sayede renkler gözlemlenebilir sürelerde görüntülenir.
  • Döngü sonsuz olarak tekrarlandığından, tanımlı üç renk sırayla ve sürekli olarak gösterilir.

setColor Fonksiyonu

  • Üç parametre alır: R (Kırmızı), G (Yeşil), B (Mavi), her biri 0-255 aralığında.
  • analogWrite(pin, değer): İlgili pinde PWM sinyali üreterek LED parlaklığını ayarlar.
  • 0 değeri LED’i tamamen kapatır, 255 değeri tam parlaklıkta yakar.
  • Üç kanalın farklı oranlarda karıştırılması ile 16.7 milyon farklı renk üretilebilir (256³).

Adım 6 – Test Edin

Kod yüklendikten sonra:

  1. RGB LED’in tanımlı üç rengi (#00C9CC, #F7788A, #34A853) sırayla gösterdiğini gözlemleyin.
  2. Her rengin yaklaşık 1 saniye süreyle görüntülendiğini kontrol edin.
  3. Renkler beklenildiği gibi görünmüyorsa LED tipini (Common Cathode/Anode) ve bağlantı yönlerini doğrulayın.
  4. LED yanmıyorsa direnç değerlerini, pin atamalarını ve GND bağlantısını kontrol edin.

İsteğe Bağlı Geliştirmeler

Temel işlevi tamamladıktan sonra projeyi aşağıdaki şekilde genişletebilirsiniz:

  • Renk Geçişi (Fade): Renkler arasında yumuşak geçiş efekti oluşturmak için kademeli PWM değer değişimi uygulayın.
  • Potansiyometre ile Kontrol: Üç potansiyometre kullanarak RGB değerlerini gerçek zamanlı olarak ayarlayın.
  • Buton ile Renk Seçimi: Butona her basıldığında bir sonraki renge geçiş yapan bir yapı kurun.
  • Hex Renk Dönüştürücü: “#RRGGBB” formatındaki hex değerlerini R, G, B bileşenlerine ayıran bir fonksiyon ekleyin.
  • WiFi Kontrol: ESP32’yi bir web sunucusu olarak yapılandırarak tarayıcı üzerinden renk kontrolü sağlayın.

ESP32 RGB LED Projesi SSS

S: LED beklenen renkleri göstermiyor, neden?
C: Common Anode tipinde bir RGB LED kullanıyor olabilirsiniz. Bu durumda analogWrite(pin, 255-değer) şeklinde ters mantık uygulamanız veya LED tipine uygun bağlantı yapmanız gerekir.

S: analogWrite() fonksiyonu ESP32’de nasıl çalışır?
C: ESP32’de analogWrite() LEDC (LED Control) donanımı üzerinden 8-bit PWM (0-255) üretir. Varsayılan frekans 1000 Hz’dir. Daha hassas kontrol için ledcWrite() fonksiyonu ve özel konfigürasyon kullanılabilir.

S: Renk kodlarını (#00C9CC gibi) nasıl R, G, B değerlerine çevirebilirim?
C: Hex renk kodlarında ilk iki karakter Kırmızı, sonraki iki Yeşil, son iki Mavi değerini temsil eder. Örn: #00C9CC → R=0x00(0), G=0xC9(201), B=0xCC(204).

S: PWM frekansını değiştirmek mümkün mü?
C: Evet, ESP32’de ledcSetup(channel, frequency, resolution) ve ledcAttachPin(pin, channel) fonksiyonları ile PWM frekansı ve çözünürlüğü özelleştirilebilir.

S: LED çok parlak veya çok sönük yanıyor.
C: Seri direnç değerini değiştirerek LED akımını ayarlayabilirsiniz. 220Ω daha parlak, 470Ω-1kΩ daha sönük ışık sağlar. Ayrıca PWM değer aralığını kod içinde ölçeklendirebilirsiniz.

S: Farklı GPIO pinleri kullanabilir miyim?
C: Evet, PWM destekleyen herhangi bir GPIO pini kullanılabilir. Ancak GPIO 34-39 gibi sadece giriş destekleyen pinleri çıkış olarak atamayın. Pin atamalarını #define bölümünden kolayca değiştirebilirsiniz.

Leave a Reply

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir