28.01.2012

Arduino Project 3 - PWM

Herkese merhaba

Bu çalışmada Arduino ile üreticeğim farklı pwm siyallerini bir lede göndereceğim ve ledin parlak seviyesini yazacağım yazılım ile kontrol etmeye çalışacağım.

Bu çalışamaya göz atmadan önce neler yapıldığını tam olarak anlayabilemek için PWM isimli yazımı okumanız yararlı olur.

İlk olarak gerekli olan parçalar neler bir bakalım;

- 1 Adet 220 Ohm Direnç
- 1 Adet LED
- 1 Adet Arduino Mega 2560 ya da diğer Arduino boardlarından biri
- 1 Adet Breadboard
- Arduino Yazılımı

Arduino'nun PWM çıkışına bir led bağladım. Daha önceki çalışmarda sürekli olarak dijital çıkışları kullanarak led yakıp söndürmüştük. Bu sefer pwm sinyalleri üretiyoruz ve bu sinyalleri ledin ışığını takip ederek gözlemleyeceğiz.

Aşağıdaki grafiğe bakılarak hangi analog çıkışı verdiğimizde nasıl bir PWM üretileceğini inceleyebiliriz. Eğer 8 bitlik bir analog çıkış uyguluyorsak ve %25 sinyal oranına sahip bir pwm üretmek istiyorsak. Burada en yüksek genlik değeri +5V en düşük genlik değeri ise 0V dur.

28 = 256  yani (0-255) aralığında oluyor
(25*256)/100 = 64
yani analog çıkışından 64 değerini göndermemiz gerekir. Burada ortalama gerilim 1.25 V oluyor.


kanımca bu kadar önbilgi yeterli artık kodu incelemeye başlıyalım. Bu kod bir ledi kademe kademe artırarak en yüksek parlaklık seviyesine çıkarıp, ardından kademe kadame düşerek ışık vermeyecek şekilde çalıştırmaya yarıyor. Bu olay bir döngü halinde sürekli olarak tekrarlanıyor. Yani burada kademe kademe  parlayan ve sönen bir led ışığı üretmeye çalışıyoruz.

KOD :

/*
******************
H.Melih ERDOĞAN
******************
Project 3
Name : "PWM Output"
*/

int ledPin = 2;    
// Çıkış olarak kullanacağımız yani led bağlayacağımız pwm bacağını beliriliyoruz.
int ledLevel = 0; //
göndereceğimiz pwm nin siyal oranını atacağımız değişken.

void setup(){
pinMode(ledPin, OUTPUT);
// led bağladığım bacağı çıkış olarak yaralıyorum
}

void loop(){ 
 analogWrite(ledPin, ledLevel);
// daha önceden belirlediğim bacağa (pin 2) analog değerler gönderiyorum
 delay(1000);
// 1 sn beleme yapıyorum.
 ledLevel = ledLevel +51;
// analog olarak göndereceğim değeri arttırıyorum. (led en parlaklığı artıyor)
 // eğer değer 255 i geçmiş ise bu sefer azalarak 0 değerine kadar gidiyorum.
 if(ledLevel >=255){
 ledLevel = 255; 
// değişkeni en yüksek değere çek  (led en parlak surumda)
 for(;;){
 analogWrite(ledPin, ledLevel);
// daha önceden belirlediğim bacağa (pin 2) analog değerler gönderiyorum
 ledLevel = ledLevel -51; // analog olarak göndereceğim değeri azaltıyorum. (led parlaklığı azalıyor)
 delay(1000); // 1 sn bekle
 if(ledLevel <=0){
 ledLevel=0;
 break;
// değer 0 dan küçük ise sonuz döngüden çık ve değişkeni 0 a eşitle.
 }
 }
 }
}


kod anlaşıldı ise artık devre şemasına bakarak gerekli devreyi kurabilirsiniz. Ben bu çalışnmada Arduino üzerinde PWM sinyali üretebileceğim 2 numaralı bacağını kullandım.

Devre şeması


Devrenin kurulmuş ve çalıştırılmış halinin fotoğafları aşağıdadır.

Aşağıdaki fotoğrafta ledin ışığının parlaklığı artıyor.


Aşağıdaki fotoğrafta ledin ışığının parlaklığı azalıyor.


Aşağıdaki fotoğrafta ledin ışığının parlaklığı en yüksek seviyede. Yani lede şuan 5V luk gerilim uyguluyoruz.


Projenin çalıştırılmış halinin videosu aşağıdadır. İyi seyirler, bir sonraki çalışmamda görüşmek dileği ile ....





Diğer Arduino projelerine de bakmak isterseniz technologylaboratory.blogspot.com/search/label/Arduino

Hiç yorum yok:

Yorum Gönder