ESP32 ile Buton Kontrollü LED

Bu rehber, ESP32 geliştirme kartı kullanarak bir buton ile LED kontrol etme işlemini adım adım açıklar. Butona basıldığında LED’in yanması, bırakıldığında sönmesi prensibine dayanan bu proje, dijital giriş/çıkış kavramlarını öğrenmek için temel bir uygulamadır.

Adım 1 – Buton ve LED Bileşenlerini Tanıyın

Buton (Push Button): Buton, devrede mekanik bir anahtar görevi görür. Basıldığında iki ucu arasında elektriksel bağlantı sağlar, bırakıldığında bu bağlantı kesilir.

LED ve Direnç: LED, anot (+) ve katot (-) bacaklarına sahip bir ışık kaynağıdır. Aşırı akımdan korunması için seri bir direnç (220Ω veya 330Ω) ile kullanılmalıdır.

Pull-up Direnç: ESP32’nin dahili pull-up direnci (INPUT_PULLUP) kullanıldığında, buton serbestken pin HIGH (3.3V), basıldığında LOW (0V) okunur. Bu yapı, harici direnç ihtiyacını ortadan kaldırır.

Pull-Up ve Pull-Down bağlantı nedir?
Dijital devrelerde ve ESP32 gibi mikrodenetleyicilerde bir giriş pininin boşta kaldığında (herhangi bir yere bağlı değilken) kararsız davranmasını engellemek için kullanılan direnç bağlantı yöntemleridir. Bir dijital pin ya 1 (High) ya da 0 (Low) olmalıdır. Eğer pin hiçbir yere bağlı değilse, havadaki statik elektrikten bile etkilenip rastgele 1 ve 0 arasında gidip gelir. Buna “Floating” (Yüzen) durum denir ve sistemde hatalı tetiklemelere yol açar.

1. Pull-Up Direnci (Yukarı Çekme)
Pini bir direnç üzerinden VCC (+3.3V veya +5V) hattına bağlamaktır. Butona basılmadığında Pin sürekli High (1) seviyesindedir. Buton Basıldığında: Buton pini şaseye (GND) çeker ve pin Low (0) olur. Ters mantık çalışır (Basılmadı = 1, Basıldı = 0).

2. Pull-Down Direnci (Aşağı Çekme)
Pini bir direnç üzerinden GND (Toprak) hattına bağlamaktır. Butona basılmadığında Pin sürekli Low (0) seviyesindedir. Buton Basıldığında: Buton pini VCC’ye bağlar ve pin High (1) olur. Düz mantık çalışır (Basılmadı = 0, Basıldı = 1).

ESP32 ve Yazılımsal Çözüm
ESP32 (ve çoğu modern MCU) içerisinde dahili pull-up ve pull-down dirençleri (10 Kohm) barındırır. Yani dışarıdan fiziksel bir direnç bağlamak yerine bunu kodla aktif hale getirebilirsiniz. Bu durumda;

pinMode(GPIO_PIN, INPUT_PULLUP); // Dahili pull-up aktif pinMode(GPIO_PIN, INPUT_PULLDOWN); // Dahili pull-down aktif

Neden Direnç Kullanıyoruz?
Eğer direnç kullanmadan pini doğrudan VCC’ye bağlayıp sonra butona basıp GND’ye kısa devre yaparsan, işlemciyi yakarsın. Direnç, bu kısa devreyi engelleyerek akımı sınırlar (genelde 10kΩ kullanılır).

Adım 2 – GPIO Pin Atamaları

Projede kullanılan pin atamaları:

  • GPIO 18: Buton bağlantısı için dijital giriş pini
  • GPIO 21: LED bağlantısı için dijital çıkış pini

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

Aşağıdaki bağlantı şemasını takip ederek devreyi kurun:

Buton Bağlantısı (GPIO 18):

  1. Butonun bir bacağını ESP32 GPIO 18 pinine bağlayın.
  2. Butonun diğer bacağını GND (Toprak) pinine bağlayın.

LED Bağlantısı (GPIO 21):

  1. GPIO 21 pinini bir direncin (220Ω/330Ω) bir bacağına bağlayın.
  2. Direncin diğer bacağını LED’in Anot (+) bacağına bağlayın.
  3. LED’in Katot (-) bacağını GND pinine bağlayın.

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
  • Port: ESP32’nin bağlı olduğu COM portu
  • ESP32 Paketi: Board Manager’dan “esp32” paketinin yüklü olduğundan emin olun

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 Buton Kontrollü LED Projesi
 * Buton GPIO18, LED GPIO21 pinine bağlıdır
 */

#define BUTTON_PIN  18 // Butonun bağlı olduğu GPIO pini
#define LED_PIN     21 // LED'in bağlı olduğu GPIO pini

int button_state = 0;   // Buton durumunu tutan değişken

void setup() {
  // LED pinini çıkış olarak ayarla
  pinMode(LED_PIN, OUTPUT);

  // Buton pinini dahili pull-up ile giriş olarak ayarla
  // Buton serbestken: HIGH, basıldığında: LOW
  pinMode(BUTTON_PIN, INPUT_PULLUP);
}

void loop() {
  // Butonun mevcut durumunu oku
  button_state = digitalRead(BUTTON_PIN);

  // Buton durumuna göre LED'i kontrol et
  if (button_state == LOW)       // Butona basıldıysa
    digitalWrite(LED_PIN, HIGH); // LED'i yak
  else                           // Buton serbestse
    digitalWrite(LED_PIN, LOW);  // LED'i söndür
}

Kod Nasıl Çalışır

Setup Fonksiyonu

  • pinMode(LED_PIN, OUTPUT): LED pinini dijital çıkış olarak yapılandırır.
  • pinMode(BUTTON_PIN, INPUT_PULLUP): Buton pinini dahili pull-up direnç ile giriş olarak ayarlar. Bu sayede buton serbestken pin HIGH, basıldığında GND’ye bağlanarak LOW okunur.

Loop Fonksiyonu

  • digitalRead(BUTTON_PIN): Butonun mevcut durumunu okur ve button_state değişkenine atar.
  • if (button_state == LOW): Butona basıldığında (LOW) LED’i yakar (HIGH).
  • else: Buton serbest bırakıldığında LED’i söndürür (LOW).

Adım 6 – Test Edin

Kod yüklendikten sonra:

  1. Butona basıldığında LED’in yandığını gözlemleyin.
  2. Buton bırakıldığında LED’in söndüğünü kontrol edin.
  3. LED tepki vermiyorsa bağlantıları ve pin atamalarını tekrar kontrol edin.

İsteğe Bağlı Geliştirmeler

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

  • Toggle Modu: Butona her basıldığında LED’in durumunu tersine çevirin (açık ise kapat, kapalı ise aç).
  • Debounce Ekleme: Buton titreşimlerini engellemek için delay(50) veya yazılımsal debounce ekleyin.
  • Çoklu Buton: Farklı butonlar ile farklı LED’leri veya efektleri kontrol edin.
  • Parlaklık Kontrolü: Butona basılı tutma süresine göre LED parlaklığını PWM ile ayarlayın.

ESP32 Buton-LED Projesi SSS

S: Butona basılı değilken LED yanık kalıyor, neden?
C: INPUT_PULLUP yerine INPUT modu kullanılmış olabilir. Pull-up modunda buton serbestken pin HIGH, basıldığında LOW olur. Kodun bu mantığa uygun yazıldığından emin olun.

S: LED titriyor gibi davranıyor, ne yapmalıyım?
C: Mekanik butonlar basıldığında milisaniyelik titreşimler (bounce) oluşturabilir. Bu durumu engellemek için okuma sonrası kısa bir delay(50) ekleyebilir veya yazılımsal debounce algoritması kullanabilirsiniz.

S: Farklı GPIO pinleri kullanabilir miyim?
C: Evet, ancak GPIO 6-11 (SPI flash), GPIO 34-39 (sadece giriş) gibi özel işlevli pinlerden kaçının. GPIO 0, 2, 12, 15 gibi boot sırasında etkili olan pinlerde de dikkatli olun.

S: LED çok sönük yanıyor, sorun ne?
C: Direnç değeri çok yüksek olabilir. 220Ω veya 330Ω direnç kullanın. Ayrıca LED’in anot/katot yönünü kontrol edin.

S: Kod yüklenirken “Connecting…” mesajında takılıyor.
C: ESP32 kartınızda kod yüklerken “BOOT” butonuna basılı tutmanız gerekebilir. Ayrıca USB kablosunun veri aktarımını desteklediğinden emin olun.

Leave a Reply

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