top of page

Buton Sıçraması (Bouncing) Nedir? Arduino Neden Yanılıyor?

  • 4 Şub
  • 2 dakikada okunur

Basit bir sayaç devresi yaptınız. Butona her bastığınızda sayı 1 artmalı. Kodu yüklediniz, butona "tık" diye bir kez bastınız, ekrana bir baktınız: Sayaç 5 artmış! Hatta bazen 10! Arduino bozuk mu? Kod hatalı mı? Hayır. Sorun fizik kurallarında. Bizim "mükemmel bir temas" sandığımız o buton basma anı, mikroskobik dünyada tam bir kaostur. Buna elektronikte Buton Sıçraması veya literatürdeki adıyla "Bouncing" denir.


Bouncing ve Debouncing
  1. Mekanik Kusur: Metalin Esnekliği

    Mekanik butonların içinde iki metal levha vardır. Siz düğmeye bastığınızda bu metaller birbirine çarpar. Ancak metal sert olduğu kadar da esnek bir malzemedir. Bir basketbol topunu yere bıraktığınızı düşünün. Top yere yapışıp kalmaz; birkaç kez seker, zıplar ve sonunda durur. Butonun içindeki metaller de aynısını yapar. Temas anında (mikrosaniye düzeyinde) defalarca birbirine değer, ayrılır, tekrar değer ve sonunda yapışık kalır. İşte bu "değ-bırak" anlarına sıçrama (bounce) denir.


  2.  Arduino'nun Hız Laneti

    Peki, biz bu sıçramayı neden hissetmiyoruz da Arduino hissediyor?

    Çünkü biz yavaşız, Arduino ise inanılmaz hızlı.

    • Bir sıçrama süresi ortalama 5-10 milisaniye sürer. İnsan beyni bunu algılayamaz.

    • Arduino (örneğin UNO) saniyede 16 Milyon işlem yapar (16 MHz).

    Arduino için 10 milisaniye, bir ömür gibidir. O süre içinde butonu binlerce kez kontrol edebilir. Sizin "tek bir basış" sandığınız o mekanik zıplama sürecinde, Arduino metallerin her ayrılıp birleşmesini "Basıldı - Çekildi - Basıldı - Çekildi" olarak algılar. Sonuç: Tek dokunuşta 10 farklı sinyal!


  3. Çözüm 1: Donanımsal Debouncing (RC Filtre)

    Sorunu kaynağında, yani fiziksel dünyada çözmek isterseniz devreye küçük bir Kapasitör (Kondansatör) eklersiniz. Butonun bacaklarına paralel bağlanan ufak bir kapasitör (örn: 100nF), ani voltaj değişimlerini yutar. Sıçramalar sırasında oluşan o keskin "zikzakları" doldurarak sinyali yumuşatır. Arduino'ya tertemiz, pürüzsüz bir voltaj eğrisi gider.

    • Avantajı: Kod yazmanıza gerek kalmaz.

    • Dezavantajı: Ekstra parça maliyeti ve lehim işi çıkarır.


  4. Çözüm 2: Yazılımsal Debouncing (Bekle ve Gör)

    En popüler ve bedava yöntemdir. Arduino'ya "şüpheci olmayı" öğretirsiniz.

    Mantık şudur: "Eğer butondan bir sinyal gelirse, hemen işlem yapma. 20 milisaniye bekle. Eğer 20ms sonra buton hala basılıysa, o zaman kabul et."

    Bu bekleme süresi, mekanik zıplamaların bitip sinyalin oturması için yeterlidir. Arduino kodlarında sıkça kullanılan delay(20) veya daha profesyonelce olan millis() zamanlayıcıları işte bu işe yarar.



İyi Çalışmalar Dilerim...

İLETİŞİM

© 2026 LymoTech. Tüm hakları saklıdır.

Designed by Aleyna | Powered by Engineering Logic

bottom of page