Daha önce bir dersimizde PWM sinyalin ne olduğunu basitçe açıklamıştık. Dersimizi buradan ziyaret edebilirsiniz: PWM Sinyal Nedir
Bu dersimizde ise Arduino ile PWM sinyal oluşturmayı ele alacağız. Bildiğiniz üzere çoğu mikrodenetleyiciler analog sinyal üretemez. Bunun yerine PWM gibi dalga tekniklerini kullanırlar. Arduino Uno kartımız üzerinde 6 adet pin PWM çıkışını destekler. Bu pinler 3-5-6-9-10-11 numaralı dijital Giriş/Çıkış pinleridir. Bu pinlerden PWM sinyal çıkışı almak için analogWrite() fonksiyonunu kullanacağız. Bu fonksiyonda parantezler arasına integer cinsinden pin numarası ve yine integer cinsinden maksimum 8 bitlik (0 ile 255 arası) çıkış değeri yazılır. Bu çıkış değerinin büyüklüğüne göre dalga genişliği ayarlanır. İlgili pinin çıkış voltajı 0 – 255 pwm değeri arasında, 0 ile 5 volt arası değişir.
Örnek olarak 9 numaralı pin çıkışından PWM sinyal elde edelim;
1 2 3 4 5 6 7 |
void setup() { pinMode(9,OUTPUT); } void loop() { analogWrite(9, 125); } |
Kodlarımızda görüldüğü üzere önce setup kısmında 9 numaralı pinimizi çıkış olarak ayarladık ve daha sonra loop kısmında pinimizden PWM çıkış aldık.
Bu PWM çıkışını (9 numaralı pin) voltmetre ile ölçtüğümüzde 2,5V civarı gerilim elde ederiz. Eğer çıkışa bir led bağlarsak, led parlaklığının yarıya düştüğünü görüz.
PWM çıkış sinyali almayı öğrendiğimize göre şimdi bir potansiytometre ile DC motor hız kontrolü yapalım.
Öncelikle potansiyometre ve motor çıkışı alacağımız pinlerimizi ayarlayalım:
1 2 3 4 5 6 7 |
int pot = 0; // analog giriş pini 0 olarak ayarlandı ve pot değişkenine aktarıldı. int potDegeri = 0; // analog girişten okuyacağımız değer bu değişkende tutulacak int motor = 9; // PWM çıkış pini 9 numaralı dijital pin olarak ayarlandı ve motor değişkenine atandı. void setup() { pinMode(9,OUTPUT); // PWM sinyali alacağımız 9 numaralı pin çıkış pini olarak ayarlandı } |
Ben normalde giriş/çıkış pinlerini değişkene atamam, çünkü ram bellekte boşuna yer kaplıyor. Ancak daha iyi anlamanız için şimdilik böyle yaptık.
Şimdi ana döngüdeki kodlarımıza gelelim:
1 2 3 4 |
void loop() { potDegeri = analogRead(pot); // pot pinini (A0) oku ve potDegeri değişkenine aktar analogWrite(motor, map(potDegeri, 0, 1023, 0, 255)); // potDegeri değişkeni değerini 0-1023 arası değerden 0-255 arası değere dönüştür ve PWM çıkışına yaz } |
Kodlarımızda görüldüğü üzere önce analog girişten pot değerini okuduk ve potDegeri değişkenine atadık. Daha sonra potDegeri değişkeni içerisindeki 0-1023 arası değeri 0-255 arası değere dönüştürdük ve PWM çıkışına yazdırdık.
Kodumuzu Arduino’ya yükleyip aşağıdaki devreyi kurarak potansiyometre ayarına göre motor hızını değiştirebiliriz.