Merhaba arkadaşlar, bir önceki yazımızda Arduino ile LED yakıp söndürme uygulaması yapmıştık. Bu yazımızda ise Arduino ile LED ‘in parlaklığını ayarlayacağız. Öncelikle bu uygulamayı anlayabilmek için analog, dijital, PWM gibi kavramlara değineceğiz.
Analog ve Dijital
Analog ve dijital günlük hayatta sıklıkla karşılaştığımız kelimelerden fakat çoğumuz bu kelimelerin anlamını tam olarak bilmiyoruz. Analog için sınırsız sayıda değer alabilen değerler diyebiliriz. Günlük hayatta karşılaştığımız çoğu şey analogdur. Görebileceğimiz renklerins sayısı, duyabileceğimiz seslerin tonu sınırsız sayıdadır. Elektronikte ise bu sınırsız sayıda voltaj veya akım değeri alabilen sinyallere tekabül eder. Mesela bir direnç üzerindeki voltaj farkı sınırsız sayıda değer alabilir. Oyun konsollarında bazı düğmelere analog düğme dememizin sebebi ise uyguladığımız kuvvete göre sınırsız sayıda değer alabilmeleridir. Dijital sinyaller ise sınırlı sayıda değer alabilmektedir.
Dijital sinyaller çoğunlukla 2 değer alabilir. Bunlar 1 ve 0 dır. 1 ve 0 değerleri HIGH(yüksek) ve LOW(düşük) olarak adlandırılabilir. Arduino UNO için HIGH 5V, LOW 0V değerlerine tekabül eder. Yani bir output pinini HIGH olarak set ederseniz o pinden 5V alırsınız, LOW olarak set ederseniz 0V alırsınız.
PWM (Pulse Width Modulation)
PWM sinyalleri belirli bir frekansa ve “Duty Cycle” a sahip olan dikdörtgensel sinyallerdir. Dikdörtgensel sinyaller bir periyod süresince belirli bir süre HIGH ardından belirli bi süre LOW değeri alan dijital sinyallerdir. “Duty Cycle” ise sinyalin bir period süresi boyunca HIGH olma süresinin toplam period süresine oranıdır. PWM sinyallerinin önemi ise dijital ve analog sinyaller arasında bir geçiş görevi görmeleridir diyebiliriz. Frekansı yeterince yüksek olan PWM sinyalleri analog sinyaller gibi davranır.
LED Parlaklığı Değiştirme Uygulaması
Uygulamamızı anlamak için gerekli bilgileri öğrendiğimize göre uygulamamıza geçebiliriz. Arduino IDE ‘mizi açalım ve aşağıdaki kodu yazalım.
int led = 9; // LED’I bağladığımız PWM pini int parlaklık = 0; // LED parlaklığı int parlaklık_degisim_degeri = 5; // Parlaklık değerinin her döngü için değişme değeri // Setup fonksyonu kodu Arduino’da her çalıştırdığımızda veya reset tuşuna bastığımızda bir kere çalışır void setup() { // 9 numaralı pin’I çıkış pini olarak tanımladık pinMode(led, OUTPUT); } // Loop fonksyonu Arduino çalıştığı sürece sonsuz döngüde çalışır void loop() { // 9 numaralı pinin parlaklığını ayarla analogWrite(led, parlaklık); // Parlaklık değerini bir sonraki döngü için değiştir parlaklık = parlaklık + parlaklık_degisim_degeri ; if (parlaklık <= 0 || parlaklık >= 255) { parlaklık_degisim_degeri = - parlaklık_degisim_degeri ; } // 30 milisaniye bekle delay(30); }
Kodumuzu inceleyebiliriz.
analogWrite(led, parlaklık);
Bu komut Arduino’muzun belirli bir pininden PWM sinyali göndermemizi sağlıyor. Burada parlaklık değeri 0 ile 255 değerleri arasında herhangi bir değer alabilir. Bu değer gönderdiğimiz PWM sinyalinin “Duty Cycle” ‘I nı belirliyor. Bu değer 255 olunca %100, 0 olunca %0 127 olunca ise %50 “Duty Cycle” ‘lı bir PWM sinyali oluşturmuş oluyoruz. LED’imize %0 duty cycle’lı bir sinyal gönderdiğimizde LED söner. %100 lük bir sinyal gönderdiğimizde LED’imiz tam yanar. Bunların arasında bir sinyal gönderdiğimizde ise duty cycle’ımıza göre LED’imizin parlaklığı değişecek. Sinyalimizin frekansı ise default 500 Hz olarak belirlenmiş.
parlaklık = parlaklık + parlaklık_degisim_degeri ;
Burada parlaklık değerimize parlaklık değişim değerini ekliyoruz. Böylece loop fonksyonu tekrar çağırıldığında analogWrite komutu değiştirilmiş olan parlaklık değeri ile çağırılacak. Böylece LED’imizin parlaklığı sürekli değişecek. Parlaklık değişim değeri negative veya pozitif olabilir. Yani LED’imizin parlaklığı bir önceki durumuna göre artadabilir azaladabilir.
if (parlaklık <= 0 || parlaklık >= 255) { parlaklık_degisim_degeri = - parlaklık_degisim_degeri ; }
Bu kod parçası sayesinde parlaklık değerimizin sınır değerleri aşmamasını kontrol ediyoruz. Eğer parlaklık değerimiz üst limite ulaşmış ise parlaklık değişim değerini negative yapıyoruz. Böylece bir sonraki döngüde parlaklık azalacak. Parlaklık değeri alt limite ulaştığında ise parlaklık değişim değeri tekrar pozitif oluyor ve parlaklık değeri artmaya başlıyor.
delay(30);
Her döngüde belirli bir süre bekliyoruz ki LED’imizin parlaklığının değişmesi gözle görülebilir olsun.
Devre Kurulumu
Bu uygulamamız için bir önceki uygulamamızda kullandığımız devreyi kullanabilirsiniz. Fakat LED’imizi bu sefer 9 numaralı pine bağlamamız gerekiyor. Bunun sebebi ise Arduino’nun sadece belirli pinlerinden PWM sinyali alabilmemiz. Bu pinler Arduino UNO için 3,5,6,9,10 ve 11 numaralı pinlerdir. LED’inizi bu pinlerden herhangi birisine bağlayabilirsiniz fakat kodunuzda LED’I bağladığınız pini OUTPUT pini yapmayı ve led değerini değiştirmeyi unutmayın.
Eğer uygulamayı doğru bir şekilde takip edebildiyseniz LED’inizin önce giderek parlaklığının artması sonra parlaklığının azalarak sönmesi ve bu döngüyü sürekli tekrar etmesi gerekiyor. Yapamadığınız, anlamadığınız yerleri yorumlar kısmından sorabilirsiniz. Gelecek yazılar için önerilerinizi ve istekleriniz de belirtirseniz memnun olurum. Bir sonraki yazımda görüşmek üzere.