PWM

analogWrite ve PWM ile LED parlaklığını veya bir çıkışı ayarlamayı öğren.

DERS PUSULASI

Bu sayfayı ne için kullanacaksın?

Ana fikir

PWM (darbe genişlik modülasyonu), bir dijital pini çok hızlı açıp kapatarak ortalama gücü ayarlama yöntemidir; böylece bir LED'i kısabilir veya bir motorun hızını değiştirebiliriz.

Üretilecek kanıt

Şimdi asıl projeye geçelim. Bir potansiyometreyi çevirerek LED'in parlaklığını elimizle ayarlayacağız. Potansiyometre, bir düğme çevirdikçe değişen ayarlanabilir dirençtir. Devre: Potansiyometrenin orta bacağı → A0 (analog giriş) Potansiyometrenin bir yan bacağı → 5V Potansiyometrenin diğer yan bacağı → GND LED: uzun bacak → 220 ohm direnç → 9 numaralı pin,…

Kontrol tuzağı

PWM'siz pin seçmek analogWrite() komutunu 7 gibi ~ işareti olmayan bir pine verirsen parlaklık ayarı çalışmaz. Her zaman 3, 5, 6, 9, 10 veya 11'i seç. map aralıklarını karıştırmak analogRead 0–1023, analogWrite 0–255 verir/ister. map(okunan, 0, 255, 0, 1023) gibi ters yazarsan değerler yanlış çıkar. Sıralamayı…

Sonraki bağlantı

Buton Debounce Mantığı: Bir butona bastığında sinyalin neden birden çok kez algılandığını ve bunu yazılımla nasıl temizleyeceğini öğreneceğiz.

Modül kaynakları: Python Tutorial · Arduino Learn

SeviyeBaşlangıç
Yaş10–16
Süre30–45 dk
Ön koşulSeri Monitör
İçerikStandart ders · 1.476 kelime
Son güncelleme

Bir cümlelik özet

PWM (darbe genişlik modülasyonu), bir dijital pini çok hızlı açıp kapatarak ortalama gücü ayarlama yöntemidir; böylece bir LED'i kısabilir veya bir motorun hızını değiştirebiliriz.

Neden önemli?

Bir Arduino pini normalde yalnız iki şey yapabilir: ya 5 volt verir (HIGH), ya da 0 volt verir (LOW). Yani bir lamba ya tam yanar ya tamamen söner. Peki bir LED'i "yarı parlak" yakmak ya da bir vantilatörü "orta hızda" döndürmek istersek ne yaparız?

İşte PWM tam burada devreye girer. Pini o kadar hızlı açıp kapatırız ki gözümüz tek tek yanıp sönmeleri fark edemez; bunun yerine ortalama bir parlaklık görürüz. Aynı fikir robot tekerleklerinin hızını, bir sirenin sesini ve hatta bir RGB LED'in rengini ayarlamakta kullanılır.

Bu ders, önceki derslerde öğrendiğin dijital çıkışları bir üst seviyeye taşıyor: artık "açık/kapalı" yerine "ne kadar" sorusunu da yanıtlayabileceksin.

PWM nasıl çalışır?

Hızlı açıp kapama fikri

PWM'in tam açılımı Pulse Width Modulation, yani darbe genişlik modülasyonudur. Uzun isme takılma; mantığı çok basit.

Bir ışık düğmesini saniyede yüzlerce kez açıp kapadığını düşün. Düğme zamanın yarısında açık, yarısında kapalı olursa lamba sana "yarı parlak" görünür. Zamanın çoğunda açık kalırsa daha parlak, çoğunda kapalı kalırsa daha sönük görünür.

Bu "açık kalma yüzdesine" görev döngüsü (duty cycle) denir. %0 tamamen kapalı, %100 tamamen açık, %50 ise yarı güç demektir.

analogWrite ve 0–255 ölçeği

Arduino'da PWM üretmek için analogWrite() komutunu kullanırız. Bu komut 0 ile 255 arasında bir sayı ister:

Neden 255? Çünkü Arduino bu değeri 8 bitlik bir sayı olarak tutar ve 8 bit ile en fazla 256 farklı değer (0'dan 255'e) sayabiliriz. İsmi "analog" olsa da pin hâlâ sadece açılıp kapanır; sadece çok hızlı yapar.

Hangi pinler PWM verir?

Her pin PWM veremez. Arduino Uno üzerinde PWM destekleyen pinlerin yanında bir tilde işareti (~) bulunur. Uno'da bunlar: 3, 5, 6, 9, 10 ve 11 numaralı pinlerdir.

Karta baktığında pin numarasının yanında ~3 gibi bir işaret görürsen, o pin PWM üretebilir demektir. İşareti olmayan bir pine analogWrite() verirsen ya hiçbir şey olmaz ya da sadece tam açık/tam kapalı gibi davranır.

Küçük kural: analogWrite için pinMode'u OUTPUT yapmayı unutma ve sadece ~ işaretli pinleri seç.

Günlük hayattan iki örnek

Telefon ekranının parlaklığı

Telefonunun parlaklık ayarını değiştirdiğinde ekranın arka ışığı aslında PWM ile kısılır. Işık o kadar hızlı yanıp söner ki sen sadece daha parlak veya daha sönük bir ekran görürsün. Karanlık odada kısık, güneşte tam parlak; hepsi görev döngüsü değişiminden ibarettir.

Fanlı bilgisayar veya klima

Bilgisayarın içindeki soğutucu fanlar da çoğunlukla PWM ile kontrol edilir. İşlemci ısındığında görev döngüsü artar, fan hızlanır; soğuduğunda döngü azalır, fan yavaşlar. Aynı mantıkla bir robotun tekerlek motorunu yavaşça hızlandırıp yavaşlatabiliriz.

Basit örnek: LED'i yavaşça parlat

Önce sabit bir yarı parlaklık deneyelim. 9 numaralı pine (PWM'li) bir direnç üzerinden LED bağlayalım.

Devre:

int ledPin = 9; // PWM pini (~9)

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  analogWrite(ledPin, 64);  // yaklasik %25 parlaklik
  delay(1000);
  analogWrite(ledPin, 255); // tam parlaklik
  delay(1000);
}

Bu sketch LED'i bir saniye kısık, bir saniye tam parlak yakar. 64 yerine farklı sayılar deneyerek parlaklığın nasıl değiştiğini gözlemle.

Mini uygulama: Potansiyometreyle LED parlaklığı

Şimdi asıl projeye geçelim. Bir potansiyometreyi çevirerek LED'in parlaklığını elimizle ayarlayacağız. Potansiyometre, bir düğme çevirdikçe değişen ayarlanabilir dirençtir.

Devre:

Sorun şu: analogRead() bize 0–1023 arası bir sayı verir, ama analogWrite() 0–255 ister. Bu iki ölçeği eşlemek için map() komutunu kullanırız.

int potPin = A0;  // potansiyometre girisi
int ledPin = 9;   // PWM cikisi (~9)

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

void loop() {
  int okunan = analogRead(potPin);          // 0 - 1023
  int parlaklik = map(okunan, 0, 1023, 0, 255);
  analogWrite(ledPin, parlaklik);           // 0 - 255
  Serial.println(parlaklik);                // degeri izle
  delay(50);
}

Potansiyometreyi çevirdikçe LED kısılıp parlar. Aynı anda Seri Monitör'ü açarsan gönderilen parlaklık değerinin 0 ile 255 arasında değiştiğini görürsün. map() komutu, 0–1023 aralığını orantılı biçimde 0–255 aralığına dönüştürür.

Uygulama laboratuvarı: PWM

PWM konusunu kalıcı hâle getirmenin en iyi yolu, kavramı küçük ve ölçülebilir bir göreve dönüştürmektir. Bu çalışmada PWM nasıl çalışır? ile analogWrite ve 0–255 ölçeği arasındaki ilişkiyi kullanarak bağlantı şeması, derlenebilen Arduino kodu, seri monitör kaydı ve test sonucu hazırlayacaksın. Amaç yalnız sonucun çalışması değil; hangi kararı neden verdiğini, neyi test ettiğini ve hangi durumda tasarımı değiştireceğini açıklayabilmektir.

Görev senaryosu

Şu senaryoyu ele al: mesafeye göre ses aralığı değişen park sensörü. Dersin ana hedefi “analogWrite ve PWM ile LED parlaklığını veya bir çıkışı ayarlamayı öğren” olduğuna göre önce problemi tek cümleyle tanımla. Ardından sistemin alacağı girdiyi, uygulayacağı işlemi ve üreteceği çıktıyı ayrı ayrı yaz. Bilmediğin bir ayrıntı varsa onu varsayım olarak işaretle; varsayımı gerçek bilgi gibi kullanma.

  1. Planla: Başlangıç durumunu, beklenen sonucu ve kullanacağın kavramları yaz.
  2. En küçük sürümü kur: Yalnız temel davranışı çalıştır; süsleme ve ek özellikleri sonraya bırak.
  3. Üç test hazırla: Normal bir durum, sınırda bir durum ve hatalı ya da beklenmeyen bir durum seç.
  4. Sonucu kaydet: Beklenen ile gerçekleşeni yan yana yaz; fark varsa olası nedeni belirt.
  5. Tek değişiklik yap: Aynı anda birçok şeyi değiştirmek yerine bir kararı düzeltip testi yeniden çalıştır.

Başarı ölçütleri

“PWM” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın mesafeye göre ses aralığı değişen park sensörü senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, PWM nasıl çalışır? ve analogWrite ve 0–255 ölçeği ilişkisini daha küçük adımlara bölerek düzelt.

Sık yapılan hatalar

PWM'siz pin seçmek

analogWrite() komutunu 7 gibi ~ işareti olmayan bir pine verirsen parlaklık ayarı çalışmaz. Her zaman 3, 5, 6, 9, 10 veya 11'i seç.

map aralıklarını karıştırmak

analogRead 0–1023, analogWrite 0–255 verir/ister. map(okunan, 0, 255, 0, 1023) gibi ters yazarsan değerler yanlış çıkar. Sıralamayı "kaynaktan → hedefe" olarak düşün: map(deger, 0, 1023, 0, 255).

255'in üstünde değer vermek

analogWrite'a 300 gibi bir sayı verirsen beklenmedik sonuçlar alırsın. Değeri 0–255 aralığında tut.

pinMode'u unutmak

LED pinini OUTPUT yapmayı unutursan çıkış zayıf ve kararsız olabilir. setup() içinde pinMode(ledPin, OUTPUT); satırını yazmayı ihmal etme.

Güvenlik notu

Ders özeti

Kontrol soruları

  1. PWM'in açılımı nedir ve temelde ne yapar?
  2. analogWrite() komutu hangi sayı aralığında değer alır?
  3. Arduino Uno'da PWM destekleyen pinleri nasıl tanırsın ve hangileridir?
  4. analogRead 0–1023 verirken bunu analogWrite için nasıl uygun hâle getiririz?
  5. PWM ile hız kontrolü yaparken motoru neden doğrudan Arduino pininden sürmemeliyiz?

Cevaplar

  1. PWM, Pulse Width Modulation (darbe genişlik modülasyonu) demektir. Bir pini çok hızlı açıp kapatarak ortalama gücü, yani görev döngüsünü ayarlar.
  2. analogWrite() 0 ile 255 arasında bir değer alır: 0 tamamen kapalı, 255 tam açık, 127 yaklaşık yarı güçtür.
  3. PWM pinlerinin yanında tilde (~) işareti vardır. Uno'da bunlar 3, 5, 6, 9, 10 ve 11 numaralı pinlerdir.
  4. map() komutuyla ölçeği dönüştürürüz: map(okunan, 0, 1023, 0, 255) değeri orantılı biçimde 0–255 aralığına çeker.
  5. Çünkü motor, pinin güvenle verebileceğinden çok daha fazla akım çeker; bu kartı bozabilir. Motor için ayrı güç kaynağı ve bir motor sürücü gerekir.

Kaynak ve doğrulama notu

“PWM” dersi için doğrulama odağı PWM nasıl çalışır? ile analogWrite ve 0–255 ölçeği arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Arduino uyumlu kartlarda pin, gerilim ve akım sınırları modele göre değişebilir. Kod derlense bile devre güvenli olmayabileceğinden, motor ve servo gibi yükler uygun sürücü ve harici besleme ile kullanılmalıdır.

Sonraki ders

Buton Debounce Mantığı: Bir butona bastığında sinyalin neden birden çok kez algılandığını ve bunu yazılımla nasıl temizleyeceğini öğreneceğiz.

Quiz’i BaşlatArduino bölümüne dön
SORU HAVUZU

Bu dersi 10 soruyla pekiştir

Bu ders için 20 soruluk bir havuz hazırlandı. Her başlangıçta 10 soru ve seçenekler yeniden karıştırılır.