Kod Ara

Ders 98-5: Arduino Kullanarak Bir Düğmeye Basıldığında Işığı Söndürme

Ders 98-5: Arduino Kullanarak Bir Düğmeye Basıldığında Işığı Söndürme

Bu derste, komutla sönümlenen bir ışık yapacaksınız: bir butona basın ve LED tam parlaklıkta başlayıp yumuşak bir şekilde kapanana kadar azalsın. Bu, Arduino'daki en kullanışlı başlangıç kalıplarından biridir çünkü dijital bir girişi (buton) PWM analog çıkışıyla (LED parlaklığı) birleştirir ve size bir şeyi sadece açıp kapatmak yerine bir değişimin hızını ve yumuşaklığını nasıl kontrol edeceğinizi öğretir.

LED with resistor on breadboard connected to Arduino with a push button
LED with resistor on breadboard connected to Arduino with a push button

İsteğe bağlı sönümleme, gerçek ürünlerin her yerinde karşımıza çıkar. Burada öğrendiklerinizi kullanabileceğiniz birkaç pratik yol:

  • Yumuşak kapanma gösterge ışıkları — bir lambanın aniden kapanması yerine, bir butona bastığınızda nazikçe kısılır; bu, cihazlarda ve 3D baskılı muhafazalarda çok daha şık görünür.
  • Uyku / bekleme modu — bir butona basın ve parlak bir durum LED'i gece sizi rahatsız etmemesi için siyaha sönümlenir, devre ise güç almaya devam eder.
  • "Siyaha sönümleme" sahne veya maket aydınlatması — tek bir buton, ani bir kesinti yerine bir LED şeridinin veya panelin yumuşak bir şekilde kısılmasını tetikler.
  • Pil tasarrufu geri bildirimi — kısa bir buton basışı size sönümlenen parlak bir onay flaşı verir, böylece LED yalnızca kısa bir süre tam parlaklıkta yanar.
  • Etkileşimli sanat ve kostümler — dokunmayla tetiklenen bir "nefes verme" efekti; cosplay, diorama veya müze sergileri için idealdir.

Temel fikir basittir: buton Arduino'ya "şimdi sönümlemeye başla" der ve Arduino LED parlaklığını 255'ten (tam) 0'a (kapalı) küçük adımlarla düşürür. Adımlar küçük olduğu ve hızlı gerçekleştiği için gözünüz bir sıçrama yerine yumuşak bir sönümleme görür.

Daha önce hiç LED sönümlemediyseniz, temel parlaklık kontrolü Ders 98-4: Arduino Kullanarak Bir LED Işığını Sönümleme: Parlaklık Kontrolü dersinde ele alınmıştır. Bu ders doğrudan bu temelin üzerine bir butonu tetikleyici olarak ekleyerek inşa eder.

Donanım ve Bileşenler

330_ohm_resistor
330_ohm_resistor

Bu çok düşük maliyetli bir yapımdır — buradaki her şey standart başlangıç kiti malzemesidir:

  • Arduino kartı (Uno, Nano, Mega veya uyumlu herhangi bir kart)
  • Bir LED (5 mm veya 3 mm, herhangi bir renk)
  • Bir buton anahtarı (anlık, 4 pinli dokunsal tip iyi çalışır)
  • LED için bir direnç — 200 Ω ile 1000 Ω arasında herhangi biri (klasik 220 Ω veya 330 Ω mükemmeldir)
  • Breadboard ve DuPont jumper kabloları
  • Programlama için USB kablosu (ve kablosuz çalışmasını istiyorsanız bir pil veya 5 V adaptör)

LED direnci hakkında kısa bir not: bir LED'in üzerinden yaklaşık 2 V ve yaklaşık 10 mA akım geçmesi gerekir. 5 V besleme ile direncin kalan 3 V'u düşürmesi gerekir, bu nedenle Ohm yasası yaklaşık 300 Ω verir. 300 Ω'dan 1000 Ω'a kadar herhangi bir değer işe yarar — daha yüksek değerler LED'i yalnızca daha sönük yapar. Direnç kullanmak isteğe bağlı değildir; o olmadan LED çok fazla akım çeker ve yanar.

Kablolama Kılavuzu

Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch

Kablolama kasıtlı olarak minimaldir. LED'in anodu (daha uzun bacak) direnç üzerinden dijital pin 3'e bağlanır ve katodu (daha kısa bacak, gövdenin düz tarafı) toprağa gider. Buton, dijital pin 2 ile toprak arasına bağlanır — harici bir pull-up direnci gerekmez çünkü kod Arduino'nun dahili pull-up'ını etkinleştirir.

LED polaritesine dikkat edin: plastik gövdenin düz tarafı ve daha kısa bacak katodu (negatif) işaretler. Ters takarsanız LED yanmaz — hasar oluşmaz, sadece çevirin.

Buton için, 4 pinli dokunsal bir anahtar kullanıyorsanız, pinlerin dahili olarak eşleştirildiğini unutmayın: dört pinin ikisi her zaman birbirine bağlıdır. Basıldığında ses veren bir çift bulmak için bir multimetreyi süreklilik modunda kullanın, ardından her iki taraftan birer pin kullanın. Bir taraf pin 2'ye, diğeri toprağa gider.

Kod Açıklaması

Sketch kısadır ve değiştirmek isteyebileceğiniz neredeyse her şey en üstteki birkaç satırda bulunur. Kullanıcı tarafından yapılandırılabilir kısımlar şunlardır:

const int pushButtonPin = 2;//basmalı düğme anahtarının bağlı olduğu pin
const int LEDPin = 3;//LED'in bağlı olduğu pin
const int fadeAmount = 10;    // LED'in kaç puan sönümleneceği
const int fadeSpeed = 5;//milisaniye cinsinden sönümleme süresi. değer ne kadar küçükse, sönümleme o kadar hızlıdır

pushButtonPin ve LEDPin basitçe Arduino'ya kabloları hangi pinlere bağladığınızı söyler. Düğmeyi pin 4'e veya LED'i pin 9'a (PWM destekli bir pin) taşırsanız, kablolamanıza uyacak şekilde bu iki sayıyı değiştirmeniz yeterlidir. LED pininin PWM'i desteklemesi gerektiğini unutmayın — bir Uno'da bu pin 3, 5, 6, 9, 10 veya 11 anlamına gelir — çünkü sönümleme analogWrite() gerektirir.

fadeAmount her parlaklık adımının ne kadar büyük olduğunu kontrol eder. Parlaklık 0 ile 255 arasında çalışır, yani 10'luk bir fadeAmount, LED'in kabaca 25 adımda karardığı anlamına gelir. Daha büyük bir sayı sönümlemeyi daha kaba ve hızlı yapar; daha küçük bir sayı ise daha yumuşak ve yavaş yapar.

fadeSpeed her adım arasındaki milisaniye cinsinden gecikmedir. Bu, efektin nasıl hissettirdiği konusunda tek en önemli ayardır. 5 ms'lik bir değer hızlı, çevik bir sönümleme verir; 30 ms veya daha fazlası yavaş, lüks bir karartma verir. fadeAmount ile birlikte, bu iki değer sönümlemeyi tam istediğiniz karaktere göre ayarlamanıza olanak tanır.

Bilmeniz gereken bir iç değişken de vardır:

int brightness = 255;    // LED'in ne kadar parlak olduğu
int pushButtonStatus = 0; // pin 2'den gelen basma değeri

brightness 255'ten başlar, yani düğmeye her bastığınızda LED tam parlaklıkta başlar. Sönümlemenin daha kısık bir noktadan — diyelim ki yarı parlaklıktan — başlamasını istiyorsanız, bunu 128 olarak değiştirin.

Mantığın kendisi şöyle çalışır: döngü düğmeyi okur. Basılıysa (dahili pull-up nedeniyle LOW), parlaklık sıfırın üzerinde olduğu sürece bir while döngüsü çalışır. Bu döngünün içinde Arduino mevcut parlaklığı LED'e yazar, fadeAmount'u çıkarır, fadeSpeed milisaniye bekler ve tekrarlar. Düğmeye basılmadığında, LED basitçe 0'a yazılır ve kapalı kalır.

Önemli bir ayrıntı: dahili pull-up, pinin düğmeye basılmadığında HIGH ve basıldığında LOW okunması anlamına gelir. Bu yüzden kod bir basmayı algılamak için LOW'u kontrol eder. Eğer bir gün harici bir pull-down direncine geçerseniz, bu karşılaştırmayı HIGH olarak değiştirmeniz gerekir.

Canlı Proje ve Gösterim

Yüklendikten sonra davranış anında ve tatmin edicidir. Düğmeye basın, LED tam parlaklığa fırlar, ardından kontrol ettiğiniz bir süre boyunca gözle görülür şekilde hiçliğe kadar kararır. Düğmeyi bırakın, LED kararır; tekrar basın, sönümleme tam parlaklıktan yeniden başlar.

Videoda sönümleme birkaç ayarda gösterilir, böylece farkı duyabilir ve görebilirsiniz. fadeAmount = 20 ile sönümleme hızlı ve kabadır — birkaç görünür adımda sıfıra ulaşır. fadeAmount = 10'a düşürmek onu önemli ölçüde yumuşatır ve fadeAmount = 3'e gitmek sönümlemeyi belirgin şekilde daha uzun süreli yapar ve neredeyse sürekli görünmesini sağlar. fadeSpeed değerinin de eşit derecede çarpıcı bir etkisi vardır: 1 ms'ye ayarlamak sönümlemeyi neredeyse anlık yapar, daha büyük değerler ise onu uzatır.

Şu deneyi yapmayı deneyin: fadeAmount = 5 ve fadeSpeed = 30 olarak ayarlayın. Uykuya dalan bir ışık gibi görünen yavaş, nazik bir karartma elde edersiniz. Sonra sert, hızlı bir kesme için fadeAmount = 50 ve fadeSpeed = 1 olarak ayarlayın. Hiçbiri "yanlış" değildir — tamamen istediğiniz atmosferle ilgilidir.

Aynı düğmenin aç/kapa davranışı ayrı olarak Ders 98-3: Arduino ile Basmalı Düğme Kullanarak Bir Aç/Kapa LED'i Nasıl Açıp Kapatılır bölümünde ele alınmıştır ve daha basit bas-ve-yan versiyonu Ders 98-2: Arduino ile Basmalı Düğme Kullanarak Bir LED Nasıl Açılıp Kapatılır bölümündedir.

Sönümleme anlık bir temasla tetiklendiğinden, bu aynı devre bir LED yerine bir röle veya MOSFET sürmek için doğal bir uyumdur — 12 V'luk bir lambayı, bir motorun yumuşak başlatmasını veya bir ısıtma elemanının ısınmasını sönümleyebilirsiniz. Düğme sadece tetikleyicidir; neyi sönümleyeceğiniz size bağlıdır.

Bu videodan ilgili projeler

Bölümler

  • [00:00] 10 LED projesine genel bakış
  • [01:00] Arduino adım adım kursuna giriş
  • [02:29] LED temelleri: semboller, polarite ve akım
  • [03:49] Ohm yasası ile LED direncinin hesaplanması
  • [05:53] Proje 1: Bir LED'i açma ve kapatma
  • [12:43] Proje 2: Butonlu LED
  • [17:13] Proje 3: Buton ile LED açma/kapatma
  • [20:12] Proje 4: LED'i kısma
  • [23:20] Proje 5: Buton ile LED'i kısma
  • [27:32] Proje 6: Tahterevalli LED
  • [30:47] Proje 7: Kayan ışık
  • [36:41] Proje 8: Butonlu kayan ışık
  • [42:25] Proje 9: LED voltaj seviye ölçer
  • [49:25] Proje 10: Arduino trafik ışığı

Görseller

Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
butonlu Arduino'ya bağlı breadboard üzerinde dirençli LED
butonlu Arduino'ya bağlı breadboard üzerinde dirençli LED
937-Lessson 98-LED-5: Arduino code to fade the LED when push button is pressed
Dil: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Dosyalar📁

Arduino Kütüphaneleri (zip)

Kullanım Kılavuzu