Arduino ile PWM kullanarak LED parlaklığını ayarlamak, dijital bir pinin elektriği çok hızlı aralıklarla açıp kapatmasıyla mümkündür. LED sürekli olarak farklı bir analog voltajla beslenmek yerine, kısa sürelerle yakılıp söndürülür; gözümüz bu hızlı değişimi ortalama bir parlaklık olarak algılar.
Bu mini laboratuvarda önce PWM ve duty cycle mantığını anlayacak, ardından LED’i korumak için gerekli malzemeleri ve direnç seçiminin temelini öğreneceksiniz. Koddan önce “pin ne kadar süre açık kalıyor?” sorusunu sormak, yalnızca bu devreyi değil, birçok elektronik algoritmasını daha kolay kavramanıza yardımcı olur.
PWM Nedir ve LED Parlaklığını Nasıl Değiştirir?
PWM, yani darbe genişlik modülasyonu, dijital bir çıkışın çok hızlı biçimde açılıp kapanmasını kullanır. Dijital pinin iki temel durumu vardır: açık ve kapalı. PWM bu iki durum arasında çok hızlı geçiş yaparak LED’e giden enerjinin zaman içindeki oranını değiştirir.
Bunu bir odanın ışık düğmesini çok hızlı açıp kapattığınızı düşünerek canlandırabilirsiniz. Işık saniyenin çok küçük bir bölümünde açık, daha uzun bölümünde kapalı kalırsa oda daha karanlık görünür. Açık kalma süresi uzadıkça ışık daha parlak algılanır. LED’deki işlem de buna benzer; ancak anahtarlama insan gözünün ayırt edemeyeceği kadar hızlı gerçekleşir.
Duty cycle ne demektir?
Duty cycle, bir PWM döngüsünde sinyalin açık kaldığı sürenin toplam döngü süresine oranıdır. Örneğin sinyal bir döngünün küçük bölümünde açıksa düşük duty cycle, yaklaşık yarısında açıksa orta duty cycle, büyük bölümünde açıksa yüksek duty cycle elde edilir.
- Düşük duty cycle: Pin kısa süre açık kaldığı için LED daha sönük görünür.
- Orta duty cycle: Açık kalma oranı arttığından LED orta parlaklıkta algılanır.
- Yüksek duty cycle: Pin zamanın büyük bölümünde açık olduğundan LED daha parlak görünür.
Burada önemli nokta şudur: PWM çoğu kullanımda doğrudan “farklı bir analog voltaj üretmez.” Dijital sinyalin zaman oranını değiştirir. LED’in ışık üretimi, gözümüzün görsel algısı ve sinyalin hızlı tekrarı birlikte çalıştığı için kademeli parlaklık hissi ortaya çıkar. Arduino’nun kullandığı PWM pinleri kart modeline göre değişebilir; örneğin Arduino Uno R3 üzerinde PWM için desteklenen dijital pinler 3, 5, 6, 9, 10 ve 11’dir. Farklı bir kart kullanıyorsanız pin üzerindeki `~` işaretini ve kartın pinout belgesini kontrol edin. Arduino’nun PWM çıkışı açıklaması kartlara göre pin ve çözünürlük ayrıntılarının değişebileceğini belirtir. ([support.arduino.cc](https://support.arduino.cc/hc/en-us/articles/9350537961500-Use-PWM-output-with-Arduino?utm_source=openai))
Koddan önce kısa düşünme alıştırması
Bir PWM döngüsünü incelemeden önce şu soruyu yanıtlamayı deneyin: “Pin bir saniyelik zaman aralığında ne kadar süre açık kalıyor?” Pin zamanın yaklaşık dörtte biri kadar açıksa LED’in düşük parlaklıkta, yarısı kadar açıksa orta parlaklıkta, neredeyse tamamında açıksa yüksek parlaklıkta görünmesini beklersiniz. Bu tür oran ve sıra ilişkilerini çalışmak için algoritma mantığını ölçen ücretsiz bilgi testi de kullanılabilir.
Gerekli Malzemeler ve LED İçin Direnç Seçimi

Deneye başlamadan önce aşağıdaki malzemeleri hazırlayın. Her parçanın devrede ayrı bir görevi vardır:
- Arduino kartı: PWM sinyalini üretir. Bu anlatımda örnek olarak Arduino Uno R3 düşünülebilir; farklı kartlarda pin adlarını ve elektriksel sınırları ayrıca kontrol etmelisiniz.
- LED: PWM sinyaline göre farklı parlaklıklarda ışık verir.
- Akım sınırlama direnci: LED’den geçen akımı sınırlar ve LED’in yanı sıra kart çıkışının korunmasına yardımcı olur.
- Breadboard: Lehim yapmadan geçici devre kurmanızı sağlar.
- Jumper kablolar: Arduino pinleri, breadboard ve toprak hattı arasında bağlantı kurar.
- USB kablosu: Arduino’yu bilgisayara bağlamak ve programa enerji sağlamak için kullanılır.
Direnç, LED ile seri bağlanmalıdır. Seri bağlantıda aynı akım yolu üzerinde bulunan direnç, devreden geçen akımın kontrolsüz biçimde yükselmesini engellemeye yardımcı olur. Direnç değerini bütün LED’ler ve kartlar için tek bir rakam gibi düşünmeyin. Doğru seçim; kartın çıkış gerilimine, LED’in ileri yön gerilimine, LED veri sayfasındaki önerilere ve hedeflenen akıma bağlıdır.
Başlangıç deneylerinde kullanılacak direnç seçilirken LED’in ve Arduino kartının teknik bilgileri birlikte incelenmelidir. Arduino Uno R3 için kartın dijital mantık referansı 5 V olarak belirtilir; ancak bu bilgi, her Arduino kartının aynı elektriksel özelliklere sahip olduğu anlamına gelmez. LED’in renk ve fiziksel yapısına göre ileri yön gerilimi de değişebilir. Bu nedenle güvenli bir başlangıç devresi kurmadan önce kullandığınız kartın ve LED’in dokümantasyonunu kontrol edin. ([docs.arduino.cc](https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf?hkey=EF798316E3902B6ED9A73243A3159BB0&utm_source=openai))
LED’in uzun bacağı çoğu standart LED’de anot, kısa bacağı ise katot için genel bir yön bulma ipucudur. Yine de LED türüne göre fiziksel işaretler değişebileceğinden, bacaklara güvenmeden önce komponentin veri sayfasını veya üretici işaretlerini kontrol etmek daha güvenlidir.
Devreyi Breadboard Üzerinde Adım Adım Kurma

Arduino’yu USB ile bilgisayara bağlamadan önce devreyi breadboard üzerinde tamamlayın. Bu çalışma için LED’in bir bacağı, direnç üzerinden PWM destekli bir pine; diğer bacağı ise GND hattına bağlanır. Direnç LED’den geçen akımı sınırlar ve LED’in korunmasına yardımcı olur.
- LED’i breadboard’a yerleştirin. LED’in iki bacağını aynı elektrik sırasına takmayın. Bacaklar farklı satırlarda olmalıdır; aksi durumda LED’in iki ucu breadboard üzerinde doğrudan birleşebilir ve devre beklediğiniz gibi çalışmaz. LED’in uzun bacağı genellikle anot, kısa bacağı ise katot olarak kullanılır. Yine de elinizdeki LED’in bacaklarını ve yönünü kontrol edin.
- LED bacaklarından birini direnç üzerinden PWM pinine bağlayın. Direncin bir ucunu LED’in bacaklarından birine, diğer ucunu ise kartınızın PWM destekli dijital pinine götürün. PWM pinleri birçok Arduino pin diyagramında yaklaşık işaretiyle, yani
~sembolüyle gösterilebilir. Ancak pin numaraları ve PWM destekleyen pinler Arduino kartı modeline göre değişebilir. Kendi kartınızın resmi pinout dokümantasyonunu mutlaka kontrol edin; belirli bir pin numarasını tüm kartlar için geçerli kabul etmeyin. Arduino’nun resmi PWM açıklamasında da kart ailelerine göre desteklenen pinlerin değişebildiği belirtilir: Arduino PWM çıkışı dokümantasyonu. - LED’in diğer bacağını GND hattına götürün. LED’in boşta kalan bacağını breadboard’un eksi güç hattına bağlayın. LED’in yönü tersse devre zarar görmeden çalışmayabilir; bu durumda bağlantıyı USB’yi çıkardıktan sonra kontrol ederek yönü düzeltin.
- Arduino GND ile breadboard eksi hattını birleştirin. Bir jumper kablonun bir ucunu Arduino üzerindeki GND pinine, diğer ucunu breadboard’un eksi hattına takın. Böylece Arduino ve LED devresi aynı referans noktası olan ortak GND’yi kullanır. Ortak GND kurulmazsa devre tamamlanmış gibi görünse bile akım yolu oluşmayabilir.
- USB bağlantısından önce görsel kontrol yapın. Kabloların yanlışlıkla 5V veya başka bir pine değmediğinden, LED bacaklarının aynı satırda birleşmediğinden ve direnç bağlantısının gerçekten seri olduğundan emin olun. Kırmızı kabloyu güç, siyah kabloyu GND, farklı bir rengi ise sinyal bağlantısı için kullanmak hata ayıklamayı kolaylaştırır.
Bağlantı mantığını bir su borusu gibi düşünebilirsiniz: Arduino’nun PWM pini akışı kontrol eden bölüm, direnç akışı sınırlayan daraltıcı, LED ise bu akıştan etkilenen ışık kaynağıdır. Bu parçalar aynı yol üzerinde, yani seri bağlanmalıdır.
- LED bacakları aynı breadboard satırında birleşiyor mu?
- Direnç LED ile Arduino pini arasında gerçekten seri mi?
- Seçtiğiniz pin kartınızda PWM destekli mi?
- Arduino GND ile breadboard eksi hattı ortak mı?
analogWrite() ile LED'i 0'dan 255'e Kademeli Yakıp Söndürme
analogWrite() fonksiyonu temel olarak iki bilgi alır: çıkışın kullanılacağı pin ve PWM değerini belirleyen sayı. Yaygın 8 bitlik Arduino kullanımında değerler 0 ile 255 arasındadır. 0 LED’i kapatır; değer yükseldikçe pin daha uzun süre açık kalır ve LED daha parlak algılanır. Bu, musluğu çok kısa aralıklarla açıp kapatarak su akışını ayarlamaya benzer.
Aşağıdaki örnek, LED’i 0’dan 255’e kadar artırır, ardından tekrar azaltır. Kodda örnek olarak 9 numaralı pin kullanılmıştır; kendi kartınızda bu pini, pinout diyagramında PWM olarak gösterilen uygun pinle değiştirin.
const int pwmPin = 9;
void setup() {
Serial.begin(9600);
}
void loop() {
for (int brightness = 0; brightness <= 255; brightness += 5) {
analogWrite(pwmPin, brightness);
Serial.println(brightness);
delay(30);
}
for (int brightness = 255; brightness >= 0; brightness -= 5) {
analogWrite(pwmPin, brightness);
Serial.println(brightness);
delay(30);
}
}
LED’in bir anda açılıp kapanması yerine yumuşakça parlayıp sönüyormuş gibi görünmesi beklenir. Seri Monitör’de parlaklık değerleri sırayla görüntülenir. Kodda Serial.begin(9600) kullanıldığı için Seri Monitör baud hızını da 9600 olarak seçin.
0–255 aralığı yaygın 8 bitlik kullanım içindir; bazı kartlarda PWM çözünürlüğü veya desteklenen pinler farklı olabilir. Arduino’nun resmi açıklamasına göre PWM çözünürlüğü kartın çekirdeğine bağlı olarak değiştirilebilir ve varsayılan 8 bitlik kullanım geriye dönük uyumluluk amacıyla 0–255 aralığını kullanır. Bu nedenle kodu kendi kartınızın resmi dokümantasyonundaki analogWrite() aralığı, PWM pin gereksinimi ve Seri Monitör yönergeleriyle karşılaştırın.
Çalışmayan Devreyi Teşhis Etme ve İleri Adım
LED beklediğiniz gibi yanmıyorsa devreyi hemen söküp yeniden kurmak yerine bağlantıları sırayla kontrol edin. En kolay yöntem, her seferinde yalnızca bir ihtimali incelemektir. Arduino kartlarında PWM pinleri modele göre değişebildiği için kullandığınız kartın pin şemasını ve Arduino Language Reference belgelerini kontrol etmek iyi bir başlangıçtır.
- Belirti: LED hiç yanmıyor veya çok düzensiz davranıyor.
Olası neden: LED devresinde direnç kullanılmamış ya da direnç LED ile seri bağlanmamış olabilir.
Çözüm: Arduino çıkış pini ile LED arasındaki hatta bir direnç bulunduğundan emin olun. Direnç, LED üzerinden geçen akımı sınırlamaya yardımcı olur. Kullanacağınız değer; LED’in özelliklerine, kartın çıkış gerilimine ve hedeflenen akıma göre seçilmelidir. Kesin bir değeri her devre için otomatik olarak doğru kabul etmeyin. - Belirti: Bağlantılar doğru görünmesine rağmen LED ışık vermiyor.
Olası neden: LED ters polaritede bağlanmış olabilir.
Çözüm: LED’in uzun bacağının genellikle anot, kısa bacağının ise katot olduğunu kontrol edin. Katot çoğu LED’de düz kenara veya kısa bacağa karşılık gelir. Emin değilseniz enerjiyi kesin, LED’i çıkarıp yönünü ters çevirerek tekrar deneyin. - Belirti: LED açılıp kapanıyor ancak parlaklık kademeli değişmiyor.
Olası neden: PWM desteklemeyen bir pin seçilmiş olabilir.
Çözüm: Kodda kullanılan pin numarasıyla kart üzerindeki fiziksel PWM işaretini karşılaştırın. Arduino UNO R3 üzerinde PWM destekli pin sayısı sınırlıdır; farklı kartlarda pin numaraları ve PWM özellikleri değişebilir. Kartınızın teknik sayfasındaki pinout bilgisini esas alın. - Belirti: Kod yükleniyor fakat devre hiç tepki vermiyor.
Olası neden: GND bağlantısı eksik olabilir veya kodda yazan pin ile LED’in bağlandığı pin farklı olabilir.
Çözüm: Arduino GND pininden breadboard’un eksi hattına giden kabloyu izleyin. Ardından kodda tanımlanan pin numarasını fiziksel kabloyla karşılaştırın. Örneğin koddaledPin = 9yazıyorsa LED devresi gerçekten 9 numaralı pine gitmelidir.
İleri Adım: Potansiyometre ile Elle Parlaklık Ayarı
Parlaklığı kodun kendi kendine değiştirmesi yerine bir düğmeyle kontrol etmek için potansiyometre kullanabilirsiniz. Potansiyometrenin iki dış bacağından biri kartın uygun besleme hattına, diğeri GND’ye; orta bacağı ise analog giriş pinine bağlanır. Arduino UNO örneğinde orta bacak A0’a bağlanabilir. Dış bacakların yönü değişirse yalnızca düğmeyi çevirince parlaklığın artıp azalması tersine döner.
analogRead() orta bacaktaki gerilimi sayısal bir değere dönüştürür. Arduino UNO gibi 10 bit analog okuma kullanan kartlarda bu değer genellikle 0 ile 1023 arasındadır; ancak kartın analog çözünürlüğü değişebilir. analogWrite() ile kullanılan PWM aralığı ise birçok klasik Arduino örneğinde 0 ile 255 arasındadır. Bu nedenle iki aralık arasında dönüşüm yapılır:
potDegeri = analogRead(A0);
pwmDegeri = map(potDegeri, 0, 1023, 0, 255);
analogWrite(ledPin, pwmDegeri);
Bu akışta düğmeyi çevirdikçe analog değer değişir, dönüştürülen PWM değeri de LED’in parlaklığını etkiler. Deney sırasında potansiyometreyi farklı konumlara getirip LED’in görünümünü ve seri ekrana yazdırdığınız değerleri not edin. Genel kodlama seviyenizi görmek isterseniz ücretsiz yazılım bilgi testi ile kendinizi değerlendirebilirsiniz.
Sık Sorulan Sorular
PWM ile gerçek analog çıkış arasındaki fark nedir?
PWM, gerilimi gerçekten ara bir seviyeye düşürmek yerine çıkışı çok hızlı biçimde açıp kapatır. Gözümüz bu hızlı değişimi ortalama bir parlaklık gibi algılar. Gerçek analog çıkış ise değişken bir gerilim üretir.
LED parlaklığını değiştirmek için neden PWM destekli bir pin kullanmalıyım?
analogWrite() ile parlaklık kontrolü yapılabilmesi için pinin PWM sinyali üretebilmesi gerekir. PWM olmayan bir pin, çoğu durumda LED’i yalnızca açıp kapatır.
LED'i Arduino'ya bağlarken direnç nereye takılır?
Direnç, LED ile seri olacak şekilde Arduino çıkış pini ile LED arasındaki hatta veya LED ile GND arasındaki hatta bağlanabilir. Önemli olan akım yolunda seri bulunmasıdır.
LED yanmıyorsa hangi bağlantıları ve kod satırlarını kontrol etmeliyim?
Önce GND bağlantısını, LED’in yönünü, direncin seri konumunu ve kabloların breadboard sıralarını kontrol edin. Sonra koddaki pin numarasının fiziksel bağlantıyla aynı ve PWM destekli olup olmadığını inceleyin.
Potansiyometre ile LED parlaklığı nasıl kontrol edilir?
Potansiyometrenin orta bacağı analog pine bağlanır. analogRead() ile okunan değer, map() kullanılarak PWM aralığına dönüştürülür ve analogWrite() ile LED’e aktarılır.
Arduino öğrenirken devreyi kurmadan önce bağlantı yolunu, ardından kodun hangi pini kontrol ettiğini adım adım düşünmek, hatayı daha sakin ve hızlı bulmanızı sağlar.