Ana sayfa > Arduino Dersleri > Arduino İle Pwm Kullanımı

Arduino İle Pwm Kullanımı

Çarşamba, 18 May 2011 yorum ekle yorumlara git

Merhaba arkadaşlar bu dersimizde Arduino ile pwm kullanımını öğreneceğiz. Elektronikle az çok uğraşan herkez pwm nedir duymuştur ama biz yinede basitçe pwm’in ne olduğunu anlatalım.

Pulse-width modulation (Darbe genişlik modülasyonu), üretilecek olan darbelerin, genişliklerini kontrol ederek, çıkışta üretilmek istenen analog elektriksel değerin veya sinyalin elde edilmesi tekniğidir.

Peki bu pwm tekniği nerelerde kullanılır? Aslında bir çok alanda kullanılır fakat biz sırasıyla bir ledin parlaklığını servo sürmeyi ve dc motor hızını ayarlamakta kullanıcaz geniş bir kullanım alanı vardır, eğer derslerimizi takip ederseniz her birini tek tek uygulamalarla göstermeye çalışacağız. Pwm mantığını anlamak için alttaki grafiği inceleyelim.

Not: Grafikte yeşil çizgiler düzenli bir zaman dilimini temsil eder(2milisaniye) Arduino ile üretilen pwm sinyali yaklaşık 500hz dir.

Arduinoda pwm işleme komutu analogWrite ile işlenir, analogWrite(pin, value) dizilimi şeklinde kullanılır grafikteki ilk uygulama değeri 0(sıfır) verilmiştir, yani pwm sinyali 0(sıfır) olucaktır. İkinci uygulamada 64 değeri yani %25 Duty Cycle anlamına gelir duty cycle da iş süresi yada kullanım oranı olarak adlandırılır, iş süresi ile her palsın genişliği ayarlanarak birbirinden farklı pwm sinyali üretmiş oluruz. Eğer arduinomuzun pwm çıkışlarından herhangi birine led bağlı olsaydı analogWrite değerimiz ne kadar yüksek olursa o kadar çok parlaklık görülecektir. Şimdi uygulamalarımızla konuyu pekiştirelim.

1.Uygulama için gereken malzemeler:

1 Adet Arduino Duemilanove

1 Adet Bread Board

1 Adet Led

1 Adet 220 ohm veya 330 ohm direnç

1.Uygulamaya ait şematik ve çizimler:


1.Uygulamaya ait yazılım:

/*
Led-pwm-1
ArduinoTurkey
 */

 int led = 9; //9numarali pwm cikisina led bagli

void setup()  {

 }

 void loop()  {
 //pwm_degerin icerigini 0 ata +5 arttır
 for (int pwm_deger=0; pwm_deger <= 255; pwm_deger +=5){
 analogWrite(led, pwm_deger); //ledin parlakligi artar
 delay(50);
 }
 //pwm_degerin icerigini 255 ata -5 cikar
 for (int pwm_deger= 255; pwm_deger >= 0; pwm_deger -=5){
 analogWrite(led, pwm_deger); //ledin parlakligi azalir
 delay(50);
 }
 }

Yukarıdaki programda arduinomuzun 9 numaralı pwm çıkışını kullanarak ledin parlaklığını önce arttırıp daha sonrada azalttık. Şimdi programımızı inceleyelim;

void loop()  {
//pwm_degerin icerigini 0 ata +5 arttır
for (int pwm_deger=0; pwm_deger <= 255; pwm_deger +=5){
analogWrite(led, pwm_deger); //ledin parlakligi artar
delay(50);
}

For döngüsü kullanarak pwm_deger olarak  tanımladığımız değişkenin içeriğini ilk önce 0(sıfır) atadık, ardından her bir 50 milisaniyelik sürede +5 arttırarak taki ledin parlaklığı maksimum yani 255 değerine ulaşana dek tekrarladık.

//pwm_degerin icerigini 255 ata -5 cikar
for (int pwm_deger= 255; pwm_deger >= 0; pwm_deger -=5){
analogWrite(led, pwm_deger); //ledin parlakligi azalir
delay(50);
}
}

İlk for döngümüz bittikten sonra 255 değerini yine her 50 milisaniyelik sürede -5 azaltarak parlaklığı düşürdük taki ledimiz sönene kadar. Programımız sonsuz döngü olduğu için sürekli bu işlem tekrarlanılacaktır. Pwm kolay bir olay arkadaşlar şimdi ikinci uygulamamıza geçelim.

2.Uygulama için gereken malzemeler:

1 Adet Arduino Duemilanove

1 Adet Bread Board

1 Adet Led

1 Adet 220 ohm veya 330 ohm direnç

2.Uygulamaya ait şematik ve çizimler:


2.Uygulamaya ait yazılım:

/*
Led-pwm-2
ArduinoTurkey
 */
const int pot = A0;  // A0 analog girisini pot olarak tanimla
const int led = 9; // 9 numarali pwm cikisini led olarak tanimla

int analog_deger = 0;        // analog_deger degiskenini tanimla
int pwm_degeri = 0;        // pwm_deger degistenini tanimla

void setup() {
 // seri portu ac
 Serial.begin(9600);
}

void loop() {
 // potu oku analog_deger değişkenine at
 analog_deger = analogRead(pot);
 // 10Bitlik analog veriyi 255'e böl
 pwm_degeri = map(analog_deger, 0, 1023, 0, 255);
 // led pwm degerini setle
 analogWrite(led, pwm_degeri);

 // Analog ve Pwm Degerlerini seri porta aktar
 Serial.print("Pot = " );
 Serial.print(analog_deger);
 Serial.print("\t Pwm Degeri = ");
 Serial.println(pwm_degeri);
 delay(10);
}

Programımız 9numaralı pine bağlı ledin parlaklığını A0 pinine bağlı potansiyometre yardımı ile ayarlamamızı sağlamaktadır. Gerekli tanımlamalar yapıldıktan sonra seri portu açtık. şimdi programımızın işleyişine göz atalım.

void loop() {
// potu oku analog_deger değişkenine at
analog_deger = analogRead(pot);
// 10Bitlik analog veriyi 255′e böl
pwm_degeri = map(analog_deger, 0, 1023, 0, 255);
// led pwm degerini setle
analogWrite(led, pwm_degeri);

A0 pinine bağlı potansiyometreden okunan değeri analog_deger değişkenine aktardık buraya kadar olan komutları daha önce görmüştük, “pwm_degeri = map(analog_deger, 0, 1023, 0, 255);” burda “map” komutunu görüyoruz bu komut okunan analog değeri istediğimiz şekilde yorumlamamızı sağlamaktadır, yada diğer bir değişle okunan değeri tekrar haritalandırmamıza olanak sağlar. Analog_deger değişkeninin içerisindeki 10bitlik veriyi 8bitlik olarak yorumlanmasını ve bu yorumlanan değeri pwm_degeri değişkeninin içerisine atmasını sağlamış oluyoruz bu sayede başka hiçbir matematiksel işlem yapmadan A0 pinine bağlı potansiyometrede okunan değer “analogWrite(led, pwm_degeri);” komutu ile 9numaralı pwm pinindeki ledin parlaklığını ayarlamış olucaktır.

// Analog ve Pwm Degerlerini seri porta aktar
Serial.print(“Pot = ” );
Serial.print(analog_deger);
Serial.print(“\t Pwm Degeri = “);
Serial.println(pwm_degeri);
delay(10);
}

Programızın bu kısmındada analog ve pwm değerlerini seri port üzerinden arduino programımıza aktarıcaktır bu dersimizinde sonuna geldik arkadaşlar diğer derslerde görüşmek üzere iyi çalışmalar.

1. Uygulamaya ait kısa video:

2. Uygulamaya ait kısa video:


Benzer Yazılar:


  1. şimdilik yorum yok.
  1. şimdilik geri bağlantı yok
Yorum yazarken dikkat etmeniz gereken hususlar;
1.Türkçe imla kurallarına dikkat etmeye özen gösteriniz.
2.Yorumlar onay gerektirdiğinden birden fazla kez aynı yorumu yazmayınız.
3.Yorumlarınızın konu ile alakalı olmasına özen gösteriniz.
4.Yorumlarınızın Reklam içerikli olmamasına özen gösteriniz.
5.Yorum yapmanız, onaylanacağı anlamına gelmemektedir. Buradaki hususlara dikkat etmeniz, onaylanma şansını artıracaktır.
+ -