Arduino PWM ile LED Parlaklığını Ayarlama: analogWrite ve Fade Rehberi
- Ersin Koşar
- Arduino
- 18 May, 2026
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 konu | Bu 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çimi | Arduino Uno’da ~ işaretli PWM pinlerinden birini kullanmak |
| Fade efekti | Parlaklığı döngü içinde kademeli artırıp azaltmak |
| Kod optimizasyonu | Parlaklı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
| Malzeme | Adet | Açıklama |
|---|---|---|
| Arduino Uno veya uyumlu kart | 1 | PWM sinyalini üretecek geliştirme kartı |
| LED | 1 | Parlaklığı değiştirilecek çıkış elemanı |
| 220 ohm veya 330 ohm direnç | 1 | LED akımını sınırlamak için |
| Breadboard | 1 | Devreyi lehimsiz kurmak için |
| Jumper kablo | 2-3 | LED ve GND bağlantıları için |
| USB kablo | 1 | Kodu 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ığı |
|---|---|
| D9 | LED’in uzun bacağına bağlanır |
| LED kısa bacağı | 220 ohm veya 330 ohm direnç üzerinden GND’ye bağlanır |
| GND | Devrenin ortak toprak hattıdır |
| USB | Arduino’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ğeri | Yaklaşık etki | Açıklama |
|---|---|---|
| 0 | Kapalı | Pin pratikte sürekli LOW seviyesindedir |
| 64 | Düşük parlaklık | LED kısa süre açık, uzun süre kapalı kalır |
| 128 | Orta parlaklık | Açık ve kapalı süre dengelenir |
| 192 | Yüksek parlaklık | LED daha uzun süre açık kalır |
| 255 | Tam parlaklık | Pin 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.
| Sorun | Muhtemel neden | Çözüm |
|---|---|---|
| LED hiç yanmıyor | LED ters bağlanmış olabilir | Uzun bacağı D9 tarafına, kısa bacağı direnç üzerinden GND’ye bağlayın |
| LED sürekli aynı parlaklıkta | PWM desteklemeyen pin kullanılmış olabilir | D3, D5, D6, D9, D10 veya D11 pinlerinden birini deneyin |
| LED çok hızlı yanıp sönüyor gibi | delay() çok düşük olabilir | Bekleme süresini 10 yerine 20 veya 30 yapın |
| LED veya pin ısınıyor | Seri direnç kullanılmamış olabilir | 220 ohm veya 330 ohm direnç ekleyin |
| Kod yükleniyor ama tepki yok | Yanlış pin numarası yazılmış olabilir | Kodda 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.