Arduino PWM ile LED Parlaklığını Ayarlama: analogWrite ve Fade Rehberi

Arduino PWM ile LED Parlaklığını Ayarlama: analogWrite ve Fade Rehberi

Arduino PWM ile LED parlaklığını ayarlama, LED’i yalnızca yakıp söndürmekten bir adım ileriye geçerek ışık şiddetini kademeli biçimde kontrol etmeyi öğretir. Bu uygulamada Arduino’nun dijital bir pininden çıkan sinyal, insan gözüne analog parlaklık değişimi gibi görünür. Aslında Arduino Uno üzerindeki klasik dijital pinler doğrudan gerçek analog voltaj üretmez; bunun yerine PWM, yani darbe genişlik modülasyonu kullanarak LED’in açık kalma süresini çok hızlı biçimde değiştirir.1

Daha önce Arduino ile LED yakma uygulamasını yaptıysanız, bir dijital pinin HIGH ve LOW durumlarını öğrenmiş oldunuz. Arduino buton ile LED kontrolü yazısında ise giriş bilgisini okuyup LED’i bu bilgiye göre kontrol ettik. Bu yazıda LED’i yalnızca açık veya kapalı hâle getirmeyeceğiz; analogWrite() fonksiyonu ile parlaklığı 0 ile 255 arasında kademeli olarak değiştireceğiz.

PWM Nedir?

PWM, İngilizce Pulse Width Modulation ifadesinin kısaltmasıdır. Türkçede darbe genişlik modülasyonu olarak açıklanabilir. Bu yöntemde pin çok kısa aralıklarla açılıp kapanır. Pin bir süre HIGH, bir süre LOW olur. HIGH kalma süresi arttıkça LED daha parlak görünür; HIGH kalma süresi azaldıkça LED daha sönük görünür.

PWM’de LED’in parlaklığını belirleyen şey, pinin ne kadar süre açık kaldığıdır. Bu orana duty cycle denir. Arduino tarafında analogWrite() için 0 değeri kapalı, 255 değeri ise en yüksek PWM seviyesini ifade eder.2

PWM kavramı ilk bakışta analog çıkış gibi görünse de Arduino Uno’da kullanılan yaklaşım farklıdır. analogWrite(9, 128) komutu D9 pininden yaklaşık yarı görev çevrimiyle PWM sinyali üretir. LED çok hızlı yanıp söndüğü için gözümüz bunu orta seviyede parlaklık olarak algılar. Bu mantık LED parlaklığı dışında küçük DC motor hız kontrolü, buzzer ses seviyesi denemeleri ve bazı sürücü devrelerinde de temel olarak karşımıza çıkar.

Bu Projede Ne Öğreneceğiz?

Bu rehber, Arduino ile PWM kullanımını sade bir LED devresi üzerinden anlatır. Amaç yalnızca LED’i yavaşça parlatıp söndürmek değildir; aynı zamanda analogWrite() fonksiyonunun nasıl çalıştığını, PWM destekli pin seçiminin neden önemli olduğunu ve kodda parlaklık geçiş hızının nasıl ayarlandığını anlamaktır.

Öğrenilecek konuBu projedeki karşılığı
PWM mantığıLED’in hızlı açılıp kapanarak farklı parlaklıkta görünmesi
analogWrite()PWM değerini 0-255 aralığında pine göndermek
PWM pin seçimiArduino Uno’da ~ işaretli PWM pinlerinden birini kullanmak
Fade efektiParlaklığı döngü içinde kademeli artırıp azaltmak
Kod optimizasyonuParlaklık adımı ve bekleme süresiyle geçiş hızını değiştirmek

Bu yazıdan sonra bir LED’in parlaklığını potansiyometreyle kontrol etmek, ortam ışığına göre otomatik aydınlatma yapmak veya motor hızını sürücü devre üzerinden değiştirmek çok daha anlaşılır hâle gelir. Çünkü bu projelerin çoğunda temel fikir, bir değeri okuyup PWM çıkışına dönüştürmektir.

Gerekli Malzemeler

PWM ile LED parlaklığı ayarlamak için önceki LED yakma devresine çok benzeyen basit bir bağlantı yeterlidir. Buradaki önemli fark, LED’in Arduino Uno üzerindeki PWM destekli bir pine bağlanmasıdır. Arduino’nun resmi Fade örneğinde LED’in 220 ohm direnç üzerinden dijital pin 9’a bağlandığı gösterilir.1

MalzemeAdetAçıklama
Arduino Uno veya uyumlu kart1PWM sinyalini üretecek geliştirme kartı
LED1Parlaklığı değiştirilecek çıkış elemanı
220 ohm veya 330 ohm direnç1LED akımını sınırlamak için
Breadboard1Devreyi lehimsiz kurmak için
Jumper kablo2-3LED ve GND bağlantıları için
USB kablo1Kodu yüklemek ve Arduino’ya güç vermek için

LED kullanırken seri direnç ihmal edilmemelidir. Direnç, LED üzerinden geçen akımı sınırlar ve hem LED’i hem de Arduino pinini korumaya yardımcı olur. Özellikle yeni başlayanların yaptığı en yaygın hatalardan biri, LED’i doğrudan pine ve GND’ye bağlamaktır.

Devre Bağlantısı Nasıl Yapılır?

Bu projede LED’in uzun bacağı, yani anot tarafı Arduino Uno üzerindeki D9 pinine bağlanacaktır. D9 pini, Uno üzerinde PWM destekli pinlerden biridir ve genellikle pin numarasının yanında ~ işaretiyle gösterilir. LED’in kısa bacağı, yani katot tarafı ise 220 ohm veya 330 ohm direnç üzerinden GND hattına bağlanır.

Arduino bağlantısıDevredeki karşılığı
D9LED’in uzun bacağına bağlanır
LED kısa bacağı220 ohm veya 330 ohm direnç üzerinden GND’ye bağlanır
GNDDevrenin ortak toprak hattıdır
USBArduino’ya güç verir ve kod yüklemeyi sağlar

Bağlantıyı yaparken Arduino’nun USB kablosunu çıkarmak daha güvenli olur. LED’in yönü önemlidir; uzun bacak artı tarafa, kısa bacak direnç üzerinden GND tarafına bağlanmalıdır. LED hiç yanmıyorsa önce LED yönünü, sonra direnç ve GND bağlantısını kontrol etmek gerekir.

Arduino PWM LED Parlaklığı Kodu

Aşağıdaki kod, LED parlaklığını 0’dan 255’e kadar artırır ve sonra 255’ten 0’a kadar azaltır. Böylece LED yavaşça parlar ve yavaşça söner. Arduino’nun resmi analogWrite() referansında değer aralığının 0 ile 255 arasında olduğu belirtilir.2

const int LED_PIN = 9;

void setup() {
  // analogWrite kullanmak için pinMode zorunlu değildir,
  // ancak yeni başlayanlar için pinin görevini açıkça belirtmek faydalıdır.
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  for (int parlaklik = 0; parlaklik <= 255; parlaklik++) {
    analogWrite(LED_PIN, parlaklik);
    delay(10);
  }

  for (int parlaklik = 255; parlaklik >= 0; parlaklik--) {
    analogWrite(LED_PIN, parlaklik);
    delay(10);
  }
}

Bu kodda LED_PIN değişkeni LED’in bağlı olduğu pini temsil eder. setup() içinde pin çıkış olarak ayarlanır. loop() içinde iki ayrı for döngüsü bulunur. İlk döngü parlaklığı artırır, ikinci döngü ise parlaklığı azaltır.

Kod Nasıl Çalışır?

Kodun merkezinde analogWrite(LED_PIN, parlaklik) satırı vardır. Bu satır, LED pinine belirtilen PWM değerini gönderir. parlaklik değeri 0 olduğunda LED sönük görünür. Değer 255 olduğunda LED en parlak hâline ulaşır. 128 gibi orta değerlerde LED yaklaşık orta parlaklıkta görünür.

PWM değeriYaklaşık etkiAçıklama
0KapalıPin pratikte sürekli LOW seviyesindedir
64Düşük parlaklıkLED kısa süre açık, uzun süre kapalı kalır
128Orta parlaklıkAçık ve kapalı süre dengelenir
192Yüksek parlaklıkLED daha uzun süre açık kalır
255Tam parlaklıkPin pratikte sürekli HIGH seviyesindedir

delay(10) satırı parlaklık değişiminin hızını belirler. Bu değeri artırırsanız geçiş daha yavaş olur. Örneğin delay(30) LED’in daha sakin parlayıp sönmesini sağlar. Değeri azaltırsanız geçiş hızlanır. Parlaklık artış adımını parlaklik++ yerine parlaklik += 5 şeklinde değiştirirseniz LED daha büyük adımlarla değişir ve geçiş daha keskin görünür.

PWM Destekli Pin Seçimi Neden Önemlidir?

Arduino Uno üzerinde her dijital pin PWM çıkışı üretemez. Resmi Arduino Uno donanım sayfası, kartta 14 dijital giriş/çıkış pini olduğunu ve bunların 6 tanesinin PWM çıkışı olarak kullanılabildiğini belirtir.3 Uno üzerinde PWM pinleri genellikle 3, 5, 6, 9, 10 ve 11 numaralı pinlerdir. Kart üzerinde bu pinlerin yanında çoğu zaman ~ işareti bulunur.

Eğer LED’i PWM desteklemeyen bir pine bağlayıp analogWrite() kullanırsanız beklediğiniz kademeli parlaklık davranışını alamazsınız. Bu nedenle yeni başlayanlar için D9 pini iyi bir tercihtir; hem resmi Fade örneğinde kullanılır hem de çoğu Arduino Uno kartında açıkça PWM pini olarak işaretlenmiştir.1

Sık Yapılan Hatalar ve Çözümleri

PWM projesi basit görünse de birkaç küçük hata LED’in hiç yanmamasına veya parlaklık değişiminin görünmemesine yol açabilir. En sık karşılaşılan sorun, LED’in PWM desteklemeyen bir pine bağlanmasıdır. İkinci yaygın hata, LED yönünün ters bağlanmasıdır. Üçüncü hata ise seri direnç kullanılmamasıdır.

SorunMuhtemel nedenÇözüm
LED hiç yanmıyorLED ters bağlanmış olabilirUzun bacağı D9 tarafına, kısa bacağı direnç üzerinden GND’ye bağlayın
LED sürekli aynı parlaklıktaPWM desteklemeyen pin kullanılmış olabilirD3, D5, D6, D9, D10 veya D11 pinlerinden birini deneyin
LED çok hızlı yanıp sönüyor gibidelay() çok düşük olabilirBekleme süresini 10 yerine 20 veya 30 yapın
LED veya pin ısınıyorSeri direnç kullanılmamış olabilir220 ohm veya 330 ohm direnç ekleyin
Kod yükleniyor ama tepki yokYanlış pin numarası yazılmış olabilirKodda belirtilen pin ile devredeki pini karşılaştırın

Bu tür hatalarda devreyi tamamen söküp baştan kurmak yerine adım adım kontrol etmek daha verimlidir. Önce LED’i basit digitalWrite() koduyla yakın, ardından PWM koduna geçin. Böylece sorun devrede mi yoksa kodda mı daha kolay anlaşılır.

PWM ile Neler Yapılabilir?

LED parlaklığı ayarlama uygulaması, PWM’in en anlaşılır örneğidir. Ancak PWM mantığı çok daha geniş projelerde kullanılır. Bir robotun far parlaklığını değiştirmek, uyarı ışığına nefes alma efekti vermek veya motor sürücü üzerinden hız kontrolü yapmak aynı temel fikre dayanır.

PWM kullanırken doğrudan Arduino pinine yüksek akım çeken motor, güçlü LED şerit veya röle bağlanmamalıdır. Bu tür elemanlar için transistör, MOSFET, motor sürücü veya uygun bir modül kullanmak gerekir. Arduino pini kontrol sinyali verir; yüksek akım gerektiren yükü doğrudan taşımak için tasarlanmamıştır.

Sonraki Adım Ne Olmalı?

Bu yazıda LED parlaklığını kod içinde otomatik olarak artırıp azalttık. Bir sonraki gelişmiş uygulamada parlaklık değerini bir potansiyometreden okuyarak ayarlayabilirsiniz. Bunun için Arduino sensör okuma yazısındaki analog okuma mantığı kullanılabilir. Ayrıca hangi pinin hangi göreve uygun olduğunu daha iyi anlamak için Arduino Uno pinleri rehberini incelemek faydalı olacaktır.

PWM konusunu iyi anlamak, robotik kodlama projelerinde çıkış kontrolünün temelini güçlendirir. LED’in parlaklığını yazılımla değiştirebiliyorsanız, ileride motor hızı, ekran aydınlatması veya görsel uyarı sistemleri gibi daha işlevsel uygulamaları da daha rahat kurabilirsiniz.

Kaynaklar

Footnotes

  1. Arduino Docs - Fade 2 3

  2. Arduino Reference - analogWrite() 2

  3. Arduino Docs - UNO R3

Benzer Yazılar

Arduino Buton ile LED Kontrolü: digitalRead, Pull-up ve Pull-down Rehberi

Arduino Buton ile LED Kontrolü: digitalRead, Pull-up ve Pull-down Rehberi

Arduino buton ile LED kontrolü, LED yakma uygulamasından sonra yapılabilecek en doğru ikinci başlangıç projesidir. Çünkü bu projede Arduino artık yalnızca bir çıkış elemanını çalıştırmaz; aynı zam

Devamını Oku
Arduino IDE Kurulumu: Windows, macOS ve Linux İçin Adım Adım Rehber

Arduino IDE Kurulumu: Windows, macOS ve Linux İçin Adım Adım Rehber

Arduino IDE kurulumu, Arduino ile proje geliştirmeye başlamadan önce tamamlanması gereken ilk yazılım adımıdır. Arduino kartınıza kod yüklemek, seri porttan veri okumak, örnek projeleri açmak ve t

Devamını Oku
Arduino ile LED Yakma: Devre Şeması, Kod ve Adım Adım Anlatım

Arduino ile LED Yakma: Devre Şeması, Kod ve Adım Adım Anlatım

Arduino ile LED yakma, robotik kodlama ve elektronik öğrenmeye başlayanların yaptığı ilk uygulamalardan biridir. Bu küçük proje, yalnızca bir LED'i açıp kapatmaktan ibaret değildir; aynı zamanda d

Devamını Oku
Arduino Nedir? Ne İçin Kullanılır? Yeni Başlayanlar İçin Kapsamlı Rehber

Arduino Nedir? Ne İçin Kullanılır? Yeni Başlayanlar İçin Kapsamlı Rehber

Arduino, hem donanım hem de yazılım tarafıyla elektronik prototipleme dünyasının en popüler açık kaynak platformudur. Hobi sahiplerinden eğitimcilere, sanatçılardan profesyonel mühendislere kadar

Devamını Oku
Arduino Sensör Okuma: analogRead, A0 ve Seri Monitör ile İlk Sensör Değeri

Arduino Sensör Okuma: analogRead, A0 ve Seri Monitör ile İlk Sensör Değeri

Arduino sensör okuma, robotik kodlama öğrenirken dijital girişlerden analog değerlere geçiş yaptığınız en önemli aşamalardan biridir. [Arduino buton ile LED kontrolü](/blog/arduino-buton-ile-led-k

Devamını Oku
Arduino Uno Pinleri: Dijital, Analog, PWM ve Güç Pinleri Rehberi

Arduino Uno Pinleri: Dijital, Analog, PWM ve Güç Pinleri Rehberi

Arduino Uno pinleri, kartın sensörler, LED'ler, butonlar, motor sürücüler ve haberleşme modülleriyle bağlantı kurmasını sağlayan giriş-çıkış noktalarıdır. Arduino öğrenirken yalnızca kod yazmak ye

Devamını Oku