Arduino ile Buton Kullanımı (Pull-up vs Pull-down)

Arduino ile Buton Kullanımı (Pull-up vs Pull-down)

Arduino ile Buton Kullanımı (Pull-up vs Pull-down)

Elektronik projelerde, bir butonun durumu (basılı ya da serbest) genellikle en temel girdi elemanıdır.
Arduino ile buton kullanımı, hem yeni başlayanlar hem de ileri düzey kullanıcılar için sıkça karşılaşılan bir konudur.
Ancak buton bağlantısında yapılan en küçük hata, projede beklenmedik sonuçlar doğurabilir.
Bu yazıda pull-up ve pull-down dirençleri, buton bağlantı mantığı, devre örnekleri ve kod uygulamalarıyla bu konuyu en net şekilde açıklayacağız.

1. Arduino'da Buton Nasıl Çalışır?

Butonlar (ya da “push button”), iki metal kontağın birleştirilip ayrılması prensibine dayanır.
Basılmadığında devre açık (OFF), basıldığında devre kapanır (ON) hale gelir.
Arduino, dijital pinlerine gelen sinyali HIGH (1) veya LOW (0) olarak algılar.
Ancak butonun doğrudan Arduino pinine bağlanması genellikle gürültü veya yanlış okuma sorunlarına yol açar.
Bu yüzden pull-up veya pull-down adı verilen dirençlerle sabit bir voltaj referansı oluşturulur.

2. Pull-up ve Pull-down Nedir?

Pull-up ve pull-down dirençleri, dijital pinin kararsız kalmasını (floating state) önler.
Yani Arduino’nun pinine sürekli “yüksek” veya “düşük” bir referans sağlar.
Pull-down bağlantısı:

  • Buton serbestken pin LOW (0) olur.
  • Butona basıldığında pin HIGH (1) olur.

Pull-up bağlantısı:

  • Buton serbestken pin HIGH (1) olur.
  • Butona basıldığında pin LOW (0) olur.

Böylece Arduino her durumda kararlı bir değer okur.

3. Pull-down Devresi Nasıl Kurulur?

Pull-down devresi, butonun bir ucu Arduino pinine, diğer ucu +5V’a bağlanarak yapılır.
Direnç, pini GND’ye çeker.

[PULL-DOWN DEVRESİ BAĞLANTI ŞEMASI]
---------------------------------------
+5V ---- Buton ---- Arduino Dijital Pin
               |
               |
             Direnç (10K)
               |
              GND
---------------------------------------

Bu şekilde:

  • Buton serbestken: Direnç sayesinde pin GND’ye bağlı → LOW (0)
  • Butona basıldığında: Pin doğrudan +5V’a bağlanır → HIGH (1)

4. Pull-up Devresi Nasıl Kurulur?

Pull-up bağlantısı, butonun bir ucunun GND’ye, diğer ucunun Arduino pinine bağlanmasıyla yapılır.
Direnç, pini +5V’a çeker.

[PULL-UP DEVRESİ BAĞLANTI ŞEMASI]
---------------------------------------
GND ---- Buton ---- Arduino Dijital Pin
               |
               |
             Direnç (10K)
               |
              +5V
---------------------------------------

Bu durumda:

  • Buton serbestken: Direnç pini +5V’a çeker → HIGH (1)
  • Butona basıldığında: Pin GND’ye bağlanır → LOW (0)

5. Arduino Kod Örneği (Pull-down)

Aşağıdaki örnekte, butona basıldığında LED’in yanması sağlanır.
Pull-down bağlantısı kullanılmıştır.

int butonPin = 2;
int ledPin = 13;
int butonDurum = 0;

void setup() {
  pinMode(butonPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  butonDurum = digitalRead(butonPin);
  
  if (butonDurum == HIGH) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

Bu kodda:

  • butonPin giriş olarak tanımlanmıştır.
  • Buton basılıyken LED yanar, bırakıldığında söner.

6. Arduino Kod Örneği (Pull-up)

Pull-up bağlantısı daha yaygındır çünkü Arduino’nun içinde dahili pull-up direnci bulunur.
Yani harici 10K direnç eklemeden, yalnızca kodla aktif hale getirebilirsiniz.

int butonPin = 2;
int ledPin = 13;
int butonDurum = 0;

void setup() {
  pinMode(butonPin, INPUT_PULLUP);  // Dahili pull-up aktif
  pinMode(ledPin, OUTPUT);
}

void loop() {
  butonDurum = digitalRead(butonPin);
  
  if (butonDurum == LOW) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

Bu örnekte:

  • INPUT_PULLUP komutu, iç dirençleri aktif hale getirir.
  • Buton serbestken pin HIGH (1), basıldığında LOW (0) olur.

Bu yöntem, en az parça ile en güvenli buton okuma şeklidir.

7. Pull-up ve Pull-down Arasındaki Farklar

[PULL-UP vs PULL-DOWN KARŞILAŞTIRMA]
------------------------------------------
1. Pull-down: Buton serbestken LOW, basıldığında HIGH olur.
2. Pull-up:   Buton serbestken HIGH, basıldığında LOW olur.

3. Pull-down genellikle harici 10K direnç gerektirir.
4. Pull-up, Arduino'nun dahili direncini kullanabilir.

5. Pull-down, gürültüye biraz daha duyarlıdır.
6. Pull-up daha kararlı okuma sağlar.

7. Pull-down'da 5V hattı aktif, Pull-up'ta GND hattı aktif olur.
------------------------------------------

8. Neden Pull-up Daha Çok Tercih Edilir?

Arduino IDE içinde INPUT_PULLUP özelliği sayesinde ekstra direnç gerekmez.
Ayrıca GND hattına bağlandığı için elektriksel gürültüden daha az etkilenir.
Bu nedenle:

  • Basit devrelerde
  • Sensör buton girişlerinde
  • Menü kontrol devrelerinde

Pull-up yöntemi, standart uygulama haline gelmiştir.

9. Butonlarda Yaygın Hatalar

Sorun 1 – Sürekli HIGH Okuma:
Pull-up devresinde buton yanlış bağlanmış olabilir.
GND’ye değil, 5V’a bağlanmışsa pin sürekli HIGH olur.
Sorun 2 – Rastgele Değerler (Titreme):
Buton basılırken elektriksel “debounce” gürültüsü oluşur.
Bu, hızlı açılıp kapanma sinyalleri olarak algılanır.
Çözüm olarak yazılımsal filtre uygulanabilir:

if (butonDurum == LOW) {
  delay(50);  // Gecikme ile titreşim önlenir
  if (digitalRead(butonPin) == LOW) {
    digitalWrite(ledPin, !digitalRead(ledPin));
  }
}

Sorun 3 – LED Hep Yanık:
Direnç değeriniz çok düşükse (örneğin 1K), buton serbestken bile küçük akım geçişi olabilir.
10K – 47K arası dirençler idealdir.

10. Butonla Menü veya Sayaç Uygulaması (Pull-up)

Aşağıdaki örnek, butonla sayaç arttırma uygulamasıdır.
Her basışta sayıyı 1 artırır ve Seri Monitör’e yazar.

int butonPin = 2;
int sayac = 0;
int oncekiDurum = HIGH;

void setup() {
  pinMode(butonPin, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  int mevcutDurum = digitalRead(butonPin);
  
  if (mevcutDurum == LOW && oncekiDurum == HIGH) {
    sayac++;
    Serial.print("Sayac: ");
    Serial.println(sayac);
    delay(200);  // titreşimi önlemek için
  }

  oncekiDurum = mevcutDurum;
}

Bu yapı, menü sistemlerinde, mod seçimlerinde ve sayaç projelerinde sıklıkla kullanılır.

11. Donanımsal Debounce (Ek Bilgi)

Yazılımsal çözüm dışında, donanımsal bir çözüm de mümkündür.
Butonla GND arasında küçük bir 100nF kondansatör ekleyerek, titreşimleri filtreleyebilirsiniz.

[GÜRÜLTÜ FİLTRESİ BAĞLANTISI]
------------------------------------
Arduino Pin --- Buton --- GND
                      |
                  100nF Kondansatör
                      |
                     GND
------------------------------------

Bu, özellikle endüstriyel ortamlarda güvenilirlik sağlar.

12. Sonuç: Pull-up ve Pull-down Seçimi

Pull-up ve pull-down dirençleri, basit bir butonun kararlı şekilde çalışmasını sağlar.
Ancak pratikte çoğu Arduino projesinde pull-up yöntemi kullanılır, çünkü:

  • Harici bileşen gerekmez.
  • Gürültüye karşı dayanıklıdır.
  • Kodda INPUT_PULLUP ile kolayca aktif edilir.

Pull-down, sadece özel durumlarda (örneğin belirli sensör çıkışlarında) tercih edilir.