İçeriğe geç

Menü

Berk Akademi
Yorumlar Google yorumları Birebir ders başvurusu Ücretsiz ön görüşme Ana Sayfa

Arduino analogWrite() ile LED Parlaklığı Nasıl Ayarlanır?

arduino-analogwrite-led-parlakligi-ayarlama
Bu yazıda neler var?
  1. analogWrite() LED parlaklığını nasıl değiştirir? PWM'in sade anlatımı
  2. Devre bağlantısı: pin, direnç, LED yönü ve GND adım adım
  3. PWM pini nasıl seçilir: kart dokümanından kontrol etme
  4. Çalışan kod: parlaklığı artırıp azaltan deney ve beklenen çıktı
  5. Sorun giderme: LED hiç yanmıyor ya da parlaklık değişmiyor
  6. Sık Sorulan Sorular

Arduino'da LED parlaklığını ayarlamak için LED'i PWM destekli bir dijital pine seri dirençle bağlar, pini pinMode() ile OUTPUT yapar ve analogWrite(pin, değer) komutuyla 0 ile 255 arasında bir değer verirsin. Küçük değer LED'i sönük, büyük değer daha parlak gösterir. Bu yüzden değerleri bir anda değil kademeli deneyip LED'in nasıl tepki verdiğini gözlemlemek en sağlıklı yoldur.

analogWrite() LED parlaklığını nasıl değiştirir? PWM'in sade anlatımı

Bir ışık düğmesine saniyede çok kez bas-bırak yaptığını düşün. Işık her bırakışta söner, her basışta yanar; ama bu geçişler o kadar hızlıdır ki gözün titremeyi fark etmez, yalnızca ortalama aydınlığı görür. Düğmeyi basılı tuttuğun süre uzadıkça oda daha parlak görünür. PWM (darbe genişlik modülasyonu) tam olarak budur: pin çok hızlı biçimde HIGH ve LOW arasında geçiş yapar, HIGH'ta kalma oranı arttıkça LED'e giden ortalama enerji ve gözle algılanan parlaklık genellikle artar. Bu orana görev oranı (duty cycle) denir.

analogWrite() fonksiyonuna verdiğin değer bu oranı belirler:

  • 0: pin sürekli LOW kalır, görev oranı %0'dır, LED yanmaz.
  • Yaklaşık 127: pin zamanın yaklaşık yarısında HIGH'tadır, görev oranı yaklaşık %50'dir, LED orta parlaklıkta görünür.
  • 255: pin sürekli HIGH kalır, görev oranı %100'dür, LED en parlak hâlindedir.

Görev oranını kabaca değer / 255 işlemiyle bulabilirsin. Örneğin 64 değeri yaklaşık %25'e denk gelir. İnsan gözü parlaklığı doğrusal algılamadığı için 64 ile 128 arasındaki fark, 192 ile 255 arasındakinden daha belirgin görünebilir. Bu normaldir, devrenin hatası değildir.

Burada bir ayrım önemlidir: analogWrite() gerçek bir analog gerilim üretme açıklamasıyla sınırlı değildir; Arduino kartlarında PWM ile ortalama çıkış davranışı oluşturur. Pinden çıkan sinyal her an ya 0 ya da çalışma gerilimi düzeyindedir; "ara değer" dediğimiz şey bu iki durum arasındaki zaman oranından doğar. Karşılaştırmak gerekirse digitalWrite() yalnızca iki durum sunar: yanık ya da sönük. analogWrite() ise 0'dan 255'e kadar 256 kademeli değer sunar. PWM'in tekrarlanma hızı (frekansı) karta göre değişir; bu bilgiyi kullandığın kartın resmî dokümanından öğrenebilirsin.

Bir pinin PWM üretip üretemeyeceği de karta bağlıdır. Resmî Arduino referansına göre PWM destekli pinler kart üzerinde genellikle ~ işaretiyle gösterilir. Hangi pinleri seçeceğini sonraki bölümlerde ayrıntılı ele alacağız.

Devre bağlantısı: pin, direnç, LED yönü ve GND adım adım

Devre bağlantısı: pin, direnç, LED yönü ve GND adım adım

Bağlantıyı breadboard üzerinde şu sırayla kur:

  1. Arduino'nun USB bağlantısını çıkar; devreyi güç kapalıyken kur.
  2. Kart üzerinde ~ işareti taşıyan bir dijital pini seç ve bir jumper kabloyla breadboard'a getir.
  3. Aynı satıra seri direncin bir ucunu tak. Direnç, pin ile LED arasında yer almalıdır.
  4. Direncin diğer ucunu LED'in uzun bacağına (anot, artı taraf) bağla. Direnç ile LED aynı satırı paylaşmalı.
  5. LED'in kısa bacağını (katot, eksi taraf) bir jumper kabloyla Arduino'nun GND pinine bağla.

Akım yolu şöyle olur: PWM pini, direnç, LED anot, LED katot, GND. Zincirde sıra bozulursa devre tamamlanmaz.

Direnç neden gerekli?

LED, üzerinden geçen akımı kendi başına sınırlamaz. Direnç olmadan akım gereğinden fazla artabilir ve LED'e ya da pine zarar verebilir. Gerekli direnci Ohm kanunuyla bulursun:

R = (Vkaynak - Vled) / I

Örnek hesap: pin 5 V verir, kırmızı LED üzerinde yaklaşık 2 V düşüm olduğunu varsayalım ve 10 mA akım hedefleyelim. R = (5 - 2) / 0,010 = 300 ohm çıkar. Elindeki en yakın standart değer genellikle 330 ohm'dur. Başlangıç için 220-330 ohm aralığı sık kullanılan bir seçimdir; 220 ohm LED'i biraz daha parlak yakar. Kartının çalışma gerilimi 5 V ya da 3,3 V olabileceğinden, kartın gerilimini ve pin başına akım sınırını mutlaka kart dokümanından kontrol et.

LED bir diyottur, yani akımı yalnızca tek yönde geçirir. Uzun ve kısa bacak yer değiştirirse akım geçmez ve LED yanmaz. Bu durumda genellikle bacakları çevirmek yeterli olur.

Bağlantı kontrol listesi

  • Güç kapalıyken bağla: kablo değiştirirken USB çıkık olsun.
  • Yönü kontrol et: uzun bacak dirence, kısa bacak GND'ye gitmeli.
  • Direnci unutma: pin ile LED arasında seri olmalı.
  • Pini eşleştir: koddaki pin numarası, kabloyu taktığın pinle aynı olmalı.

PWM pini nasıl seçilir: kart dokümanından kontrol etme

PWM pini nasıl seçilir: kart dokümanından kontrol etme

Her Arduino kartında aynı pinler PWM desteklemez. Kart modeline göre PWM'li pinlerin sayısı ve numaraları değişir. Bu yüzden bir yazıdaki ya da videodaki pin numarasını kendi kartına kopyalamak yerine kartının kendi kaynağından kontrol etmelisin.

Kendi kartın için 3 adımlı pin doğrulama kontrol listesi

  1. Kartın tam adını belirle. Kartın üzerinde ya da kutusunda yazan model adına bak. Benzer görünen kartların pinleri farklı olabilir.
  2. Resmî Arduino dokümanında pinout'a bak. docs.arduino.cc üzerindeki kartının sayfasında pin diyagramı ve pin açıklamaları yer alır. Aynı sitedeki analogWrite() referans sayfası da bu fonksiyonun çalıştığı pinler için kart ailesine göre notlar verir.
  3. Kart üzerindeki ~ işaretini fiziksel olarak kontrol et. Birçok kartta PWM destekli dijital pinlerin yanında tilde (~) bulunur. Dokümandaki bilgi ile kart üzerindeki işaret uyuşuyorsa seçimin doğrudur.

Bu üç adımı bir kez yaptığında farklı bir karta geçsen bile aynı yöntemi kullanabilirsin.

PWM desteklemeyen pine analogWrite() yazarsan

Kod derlenir ve hata mesajı görmeyebilirsin, ama sonuç beklediğin gibi olmayabilir. Bazı kartlarda PWM'siz bir pinde ara değerler kademeli parlaklık üretmez. LED yalnızca iki durumda, yani sönük ya da tam parlak görünmeye eğilimli olur. Bu davranış karta ve çekirdek yazılımına göre değişebilir. LED'in düzgün kararıp parlaklaşmadığını görürsen önce pin seçiminden şüphelen ve yukarıdaki listeyi baştan uygula.

Çalışan kod: parlaklığı artırıp azaltan deney ve beklenen çıktı

analogWrite(pin, değer) iki bilgi ister: hangi pine yazacağını ve 0 ile 255 arasında bir değeri. 0 çıkışı sürekli kapalı, 255 sürekli açık tutar. Aradaki değerler PWM ile ortalama parlaklığı belirler.

Aşağıdaki sketch değeri 0'dan 255'e artırır, sonra geri düşürür. Hiçbir kütüphane gerekmez. ledPin değerini kendi kartında ~ işaretli bir pinle değiştir; 9 yalnızca örnektir.

const int ledPin = 9;  // kendi kartında PWM destekli pini yaz

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // parlaklık artıyor
  for (int deger = 0; deger <= 255; deger++) {
    analogWrite(ledPin, deger);
    Serial.println(deger);
    delay(20);
  }
  // parlaklık azalıyor
  for (int deger = 254; deger >= 1; deger--) {
    analogWrite(ledPin, deger);
    Serial.println(deger);
    delay(20);
  }
}

Beklenen çıktı ve adım adım gözlem

Seri Port Monitörü'nde hız 9600 baud olmalı. Sayılar şöyle akar:

0
1
2
...
254
255
254
253
...
2
1
0

Deneyi kodla ışığı eşleştirerek yap:

  1. Kodu yükle ve Seri Port Monitörü'nü aç.
  2. Değer 0 iken LED'e bak: genellikle sönük olmalı.
  3. Değer 64 civarına geldiğinde bak: loş bir ışık görebilirsin.
  4. 128 civarında tekrar bak: orta parlaklığa yakın olmalı.
  5. 255'te bak: LED en parlak hâlinde olur, sonra azalış başlar.

Geçişleri rahat izleyemiyorsan delay(20) değerini büyüt.

DeğerBeklenen ışık davranışı
0Genellikle sönük
64Yaklaşık loş ışık
128Yaklaşık orta parlaklık
255Genellikle en parlak hâl

İnsan gözü parlaklığı doğrusal algılamaz, bu yüzden değerler eşit aralıklarla artsa da ışıktaki artış gözünde eşit adımlarla görünmeyebilir.

Sorun giderme: LED hiç yanmıyor ya da parlaklık değişmiyor

Devre kurulduğu hâlde LED beklediğin gibi davranmıyorsa sorun genellikle bağlantıda, pin seçiminde ya da kodda aranır. Aşağıdaki maddeleri yukarıdan aşağıya sırayla kontrol etmek işini kolaylaştırır.

LED hiç yanmıyor

  • LED ters bağlı olabilir → Uzun bacağın (anot) pin tarafında, kısa bacağın (katot) GND tarafında olduğunu kontrol et.
  • GND bağlantısı eksik olabilir → LED'in kısa bacağından Arduino'nun GND pinine giden hattın tamamlandığına bak.
  • Direnç yanlış satırda olabilir → Direncin iki ucunun da LED hattıyla aynı sıradaki deliklere değil, devreyi gerçekten seri bağlayan satırlara girdiğinden emin ol.
  • Pin numarası kodla uyuşmuyor olabilir → Kodda yazdığın numara ile kabloyu taktığın pinin aynı olduğunu karşılaştır.
  • Pin başka bir modda kalmış olabilir → setup() içinde pinMode(pin, OUTPUT) satırının bulunduğuna ve pinin kodun başka bir yerinde INPUT yapılmadığına bak.
  • Breadboard kontağı zayıf olabilir → Bacakları ve kabloları biraz oynatarak yeniden yerleştir; gerekirse LED'i başka bir deliğe taşı.

Parlaklık değişmiyor

  • Pin PWM desteklemiyor olabilir → Kartının resmî Arduino dokümanında seçtiğin pinin PWM çıkışı olarak geçtiğini doğrula. Bu liste karttan karta değişebilir.
  • Adım çok küçük ya da delay() çok kısa olabilir → Değeri 1'er artırıp bekleme süresini çok kısa tutarsan fark gözle seçilmez. Önce 5 ya da 10'luk adımlarla ve biraz daha uzun beklemeyle dene.
  • Koda sabit değer yazılmış olabilir → analogWrite(pin, 128) gibi bir satır her turda aynı değeri gönderir. Değerin bir değişkenden geldiğini kontrol et.
  • Değer gerçekten değişiyor mu? → Serial.println(deger) ekleyip Seri Monitör'de sayının artıp azaldığına bak. Sayı değişiyor ama LED değişmiyorsa sorun büyük olasılıkla devrede ya da pin seçimindedir.

LED çok sönük ya da titriyor gibi görünüyor

  • Direnç çok büyük olabilir → Direnç değerini kontrol et; çok yüksek bir direnç, en yüksek değerde bile ışığı zayıflatabilir.
  • Titreme algısı olabilir → Düşük değerlerde ya da telefon kamerasıyla bakıldığında PWM'in açılıp kapanması titreme gibi görünebilir. Bu genellikle devrenin bozuk olduğunu göstermez; değeri biraz yükseltip gözle tekrar bak.

Sorunu çözdükten sonra deneyi küçük değişikliklerle sürdürebilirsin: adım büyüklüğünü ve delay() süresini değiştirip sönüp yanma hızının nasıl etkilendiğini izle, sonra ikinci bir LED ve ikinci bir PWM pini ekleyip iki ışığı farklı hızlarda değiştirmeyi dene.

Sık Sorulan Sorular

analogWrite() kullanmadan önce pinMode() ile pini OUTPUT yapmak gerekir mi?

Arduino'nun resmî referansına göre analogWrite() için pinMode() çağrısı şart değildir. Yine de setup() içinde pini OUTPUT yapmak kodu okunur kılar ve pinin başka bir modda kalma ihtimalini ortadan kaldırır. Aynı pini digitalWrite() ile de kullanacaksan bu satırı yazman gerekir.

analogWrite() gerçekten analog gerilim üretir mi?

Genellikle hayır. Çoğu Arduino kartında PWM pini, çıkışı çok hızlı biçimde açıp kapatır ve LED bu hızlı değişimin ortalamasını parlaklık olarak algılar. Bu yüzden değer arttıkça pin daha uzun süre açık kalır ve ışık daha güçlü görünür. Bazı kartlarda gerçek analog çıkış sağlayan ayrı donanımlar bulunabilir; bunu kartının dokümanından öğrenebilirsin.

Arduino'da hangi pinler analogWrite() ile LED parlaklığı ayarlayabilir?

Bu, kartına göre değişir. Birçok kartta PWM destekli pinlerin yanında ~ işareti bulunur, ancak kesin bilgi için kartının resmî Arduino dokümanındaki pin açıklamasına bakmalısın. Başka bir karttan alınan pin listesini kendi kartına uygulamak parlaklığın değişmemesine yol açabilir.

analogWrite() değerini 0-255 dışında verirsem ne olur?

Varsayılan kullanımda belgelenen aralık 0 (her zaman kapalı) ile 255 (her zaman açık) arasındadır. Bu aralığın dışındaki değerlerde davranış karta ve çekirdeğe göre değişebilir ve beklenmedik parlaklık sonuçları görülebilir. Değerin sınırlarda kalması için constrain(deger, 0, 255) kullanabilirsin. Bazı kartlarda çözünürlük ayarlanabildiği için bu aralık değişebilir; kartının dokümanına bakmak iyi olur.

Parlaklık denemelerinde en güvenli yol, devreyi önce basit bir sabit değerle çalıştırıp ardından kodu adım adım değiştirmektir; her değişiklikten sonra LED'in tepkisini gözlemlemek hem hatayı bulmayı hem de PWM mantığını oturtmayı kolaylaştırır.

Bu içerik aradığın cevabı verdi mi?
Yanıtın, hangi yazıları geliştirmemiz gerektiğini anlamamıza yardımcı olur.
Bu içeriğin üretilmesinde yapay zeka araçlarından destek alınmıştır.

Bu konudan sonra ne okuyabilirsin?

Tüm yazılar

İlgili Eğitimler

Berk Keskin, yazılım geliştirici ve eğitmen
Yazar

Berk Keskin Kimdir?

Yazılıma 12 yaşında başladı; İzmir Ekonomi Üniversitesi'ni bölüm birincisi ve yüksek şeref öğrencisi olarak tamamladı. Bugün yalnızca eğitim vermekle kalmıyor, sektörde aktif olarak yazılım projeleri geliştiriyor ve gerçek dünya deneyimini birebir derslerine taşıyor. Ezberden uzak, mühendislik zihniyetini merkeze alan sürdürülebilir öğrenme sistemleri tasarlayarak sorgulayan, üreten ve problem çözebilen yeni nesil yazılımcılar yetiştiriyor.

Sektörel Deneyim & Projeler

  • Ticarify Entegrasyon Yazılım logosu CEO Ticarify Entegrasyon YazılımPazaryerleri ve e-ticaret sitelerine otomatik e-fatura kesimi, sipariş ve kargo takibi hizmetleri sunan e-Dönüşüm platformunun API mimarisini ve yazılım ekibini yönetmektedir.
  • Benim Düğünüm logosu CEO Benim DüğünümDijital etkinlik ve anı paylaşım platformu.
  • Siberdizayn logosu Yazılım Ekibi Lideri SiberdizaynYüksek anlık oyuncu trafiğine sahip oyun kontrol panelleri ve sunucu altyapıları geliştiren yazılım ekibine liderlik etmektedir.
  • MEDYOGRAFYA 360° Dijital Çözümler logosu Dijital Strateji Lideri MEDYOGRAFYA 360° Dijital ÇözümlerŞirketlerin dijital çözümlerde uzun vadede nasıl ilerlemesi gerektiği ve dijital dönüşüm süreçlerinin yönetilmesine destek olmaktadır.
  • İzmir Ekonomi Üniversitesi logosu Danışma Kurulu Üyesi İzmir Ekonomi ÜniversitesiMezun olduğu üniversitesinde, Bilgisayar Programcılığı bölümünün akademik müfredatını güncel sektör ihtiyaçlarına göre şekillendirmek adına Danışma Kurulu'nda görev almaktadır.
WhatsApp Hemen Ara