Arduino Dersi 8: Analog Çıkış Motor Sürücü Buzzer Map Komutu

Merhaba arkadaşlar. Bugün sizlere arduinonun PWM çıkış verebilen bacaklarından nasıl analog çıkış aldığımızı anlatacağım. Bunu da buzzer kullanımı ve motor sürücü kullanımı ile örnekleyeceğim.
Öncelikle PWM in ne olduğunu anlatarak başlayalım. PWM in açılımı pulse width modulation(Sinyal Genişlik Modulasyonu)dur.
Arduino gibi mikrodenetleyiciler ya hep ya hiç mantığıyla çalışır. Yani pin değerleri ya 5 volttur yada 0 volttur. Fakat motor hızı ayarlama gibi 0-5V arasındaki voltaj değerleri olmadan analog veri ile çalışan elemanları kontrol edemezdik. Bu sorun PWM yöntemiyle çözülmüştür. Arduinonun pinlerine giden 5V gerilim çok hızlı şekilde belirli zaman aralıklarında kapatılıp açılarak  voltajın daha düşük ölçülmesini sağlamıştır. Bu hızlı açıp kapama sırasında kapalı kaldığı süre uzatıldıkca 0 volta, kısaltıldıkça 5 volta daha yakın olur. Bu işlem çok hızlı şekilde yüksek frekansla yapıldığı için voltaj kesintisi olduğu fark edilmeden 0-5V arasında ortalama voltajlar elde edilir. Böylelikle digital sinyal ile analog sinyal taklit edilmiş olur. Bu sisteme PWM denilmektedir.

Arduinonun farklı modellerinde farklı bacakları PWM çıkış verebilmektedir. En çok kullandığımız nano, uno ve pro minide D3,D5,D6,D9;D10,D11 pinleri PWM çıkış verebilmektedir.Diğer moddeller için google görsellerde modeli aratıp datasheet(elemanların özelliklerini gösterek klavuz) ini görüntüleyebilrsiniz. PWM veren bacaklar datasheet üzerinde ~ sembolü ile gösterilmektedir. Arduinodan PWM çıkışı almak için analogWrite(pin numarası, analog değeri); kodunu kullanmaktayız. Arduino 8 bit pwm çıkışı vermektedir. Yani kodumuzda analog değeri kısmına 255 yazarsak 5 volt, 0 yazarsak 0 volt, 0-255 arasında bir değer yazarsak 0-5 volt arasında değerle doğru orantılı gerilim alırız.

Projelerimizde sık kullandığımız bir buzzerı analog çıkış ile kullanarak pekiştirelim. Buzzerlar doğru akımla çalışan ve pwm sinyali verdiğinde ses çıkaran proje elemanıdır. İçinde elektrik verince ileri, elektriği kesince geri hareket eden piezo disk bulunmaktadır. Bir batarya gibi sabit elektrik veren bir güç kaynağına bağladığınızda disk sadece bir defa ileri gidip o pozisyonda kalacak ve ses çıkarmayacaktır. Ses çıkarmak için kesikli elektrik gönderen yani PWM çıkış veren bir kaynağa bağlanmalıdır. Buzzerın + bacağını arduinomuzun PWM çıkış verebilen pinlerine eksi bacağını gnd hattına bağlayarak kullanabiliriz.
Örnek olarak arduinonun D3 numaralı pinine bağlayalım. Void setup kımında pinimizi çıkış olarak tanıyalım. Bunun için pinMode(3, OUTPUT); kodunu kullanıyoruz. Daha sonra üç numaralı pine 0-255 arasında bir değerle analog çıkış verelim. Eğer 255 verirsek kesintisiz elektrik vereceği için çalışmayacaktır. Biz örnek olarak 168 verelim. 0-255 arasında herhangi bir değer de verebilirsiniz. Buzzerı çalıştırmak için kodumuz
void setup()
{
pinMode(3, OUTPUT);
// D3 pinini çıkış olarak tanımladık.
}
void loop()
{
analogWrite(3, 168); // D3 pinine analog 168 değeri yazdırdık.
}

şeklinde olacaktır. Şimdide potansiyometreden aldığımız değerlere göre çalıştırmaya ne dersiniz. A0 pinine potansiyometre D3 pinine buzzer bağlayalım. Analog okuma 10 bit yani 0-1023 arası değer verirken, analog yazma 8 bit yani 0-255 arası değer yazabilir. Bu nedenle potansiyometreden gelen veriyi direkt buzzera yazdıramayız. Bu sorunu çözmek için daha önce bahsetmediğimiz map(1,2,3,4,5)komutunu kullanırız. Map komutu beş bileşenden oluşmaktadır. İlk bileşenine değişmesini istediğimiz değişkenin ismini , ikinci ve üçüncü bileşene değişkenin değiştirmek istediğiimiz aralığının maksimum ve minumum değerlerini, dört ve beşinci bileşene de hangi aralıktaki değerlere dönüşmesini istediğimizi yazarız. Yani iki ve üçe analog pottan gelen 0 ve 1023 sınırlarını, dört ve beşe anagolog çıkış alacağımız 0 ve 255 aralığını yazarız. Map komutuyla yazdığımız bu sınır değerler arasındaki tüm değerler hedef sınır aralığındaki değerlere orantılayarak dönüştürülür.Kolaylık olsun diye analog okunan veriyi x değişkenine yazdıralım. Daha sonra bu x değişkeninin sınır değerlerini map komutuyla değiştirip analog olarak yazdıralım. Potansiyometreyle buzzer sesini ayarlamak için kullanacağımız kod
int x; // x değişkeni tanımladık.
void setup()
{
pinMode(3, OUTPUT); // D3 pinini çıkış olarak tanımladık.
pinMode(A0, INPUT); //A0 pinini giriş olarak tanımladık.
}
void loop()
{
x=analogRead(A0); //x değişkeni A0 dan aldığı analog veriye eşit olsun dedik.
x=map(x,0,1023,0,255); //x değişkeninin aralığını değiştirdik.
analogWrite(3, x); //D3 pinine x değişkeninin değerlerini yazdırdık.
}

şeklinde olacaktır. 
Analog çıkış almayı öğrendikten sonra şimdi analog çıkışla motor sürmeyi ve bunun hızını ayarlamayı konuşalım. Motorlar arduinonun  üzerinden geçebilecek maksimum 40 mA den çok daha fazla akım çekmektedir. Bu nedenle led gibi direkt olarak arduino ile motorları besleyemeyiz. Bu sorunu çözmek için motor sürücüler üretilmiştir. Harici bir güç kaynağı bu sürücülere bağlanır ve arduino tarafından motora aktarılacak enerji miktarı belirlenir. Bunu arduinonun elektrik musluğunu açıp kapamasına benzetebiliriz. Piyasada en çok L298N, L293B ve L293D motor sürücü entegreleri kullanılmaktadır. Ben en çok resimde gördüğünüz kullanımı kolaylaştırmak için kart haline getirilmiş L298N entegre modülünü kullanmaktayım. Bir entegre iki motor sürebilmektedir. Biz şimdilik tek motorla örnek yapalım. Harici güc kaynağımızı sürücü kartımızın resimde gösterilen VCC ve GND kısımlarına bağlıyoruz. Entegre enerjisini harici bir güç kaynağından aldığı için 5v ve üzeri kaynak kullanmaya özen gösterin. Ayrıca GND kısmından ikinci bir kablo ile arduinonun GND pinine bağlıyoruz. Unutmayın arduinoya bağladığımız her elemanın GND si arduinonun GND hattına bağlanmak zorundadır. Motorumuzu resimmdeki Motor A veya Motor B kısımlarından birine bağlıyoruz. Motorlarımızı PWM sinyal ile kontrol etmek için de arduinonun PWM çıkışlarını IN1,2,3,4 çıkışlarına bağlıyoruz. IN1 e PWM çıkış verildiğinde Motor A bir yöne, IN2 ye çıkış verildiğinde Motor A tersi yöne dönmektedir. IN3 ve IN4 de aynı şekilde Motor B nin yönü ve hızını ayarlamaktadır. Örnek olarak Motor A kısmına bir motor bağlayalım ve IN1 pinini D3 numaralı pine bağlayalım. Motorumuzu da yarım hızda çalışmak için 127 PWM verelim. Kodumuz
void setup()
{
pinMode(3, OUTPUT);
// D3 pinini çıkış olarak tanımladık.
}
void loop()
{
analogWrite(3, 127); // D3 pinine analog 127 değeri yazdırdık.
}
şeklinde olacaktır.
Motor hızımızı bir analog joystick ile kontrol etmeyi deneyelim. Analog joystickin X ekseni pinini arduinonun A0 pinine bağlayalım. Joystickle kontrol etmek için kodumuz buzzer potansiyometre örneğinde olduğu gibi 
int x; // x değişkeni tanımladık.
void setup()
{
pinMode(3, OUTPUT); // D3 pinini çıkış olarak tanımladık.
pinMode(A0, INPUT); //A0 pinini giriş olarak tanımladık.
}
void loop()
x=analogRead(A0); //x değişkeni A0 dan aldığı analog veriye eşit olsun dedik.
x=map(x,0,1023,0,255); //x değişkeninin aralığını değiştirdik.
analogWrite(3, x); //D3 pinine x değişkeninin değerlerini yazdırdık.
}

şeklinde olacaktır.

Yazılarımı beğendiyseniz ve eleştirmek isterseniz yorumlarınızı bekliyorum. İlerleyen derslerde görüşmek üzere...

COMMENTS

Ad

Başlangıç Seviye,10,Ders,10,Hakkımda,1,İletişim,1,Orta seviye,3,Proje,1,Püf Nokta,2,
ltr
item
Arduino Dersleri: Arduino Dersi 8: Analog Çıkış Motor Sürücü Buzzer Map Komutu
Arduino Dersi 8: Analog Çıkış Motor Sürücü Buzzer Map Komutu
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmJm9_q11rHuKSxVXkZvNAeB6JSyKhaojBRATQD6dQITLJgq4pwYiPte_3v4ZGBEI4WWWdtuDvjrYk5J-xFvrEbNaXpE50rmQ2vzNIY5vfo6Gm352Losg3KZC5tp1iY27nFNzXoXO6H3nJ/s320/DERS8.png
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmJm9_q11rHuKSxVXkZvNAeB6JSyKhaojBRATQD6dQITLJgq4pwYiPte_3v4ZGBEI4WWWdtuDvjrYk5J-xFvrEbNaXpE50rmQ2vzNIY5vfo6Gm352Losg3KZC5tp1iY27nFNzXoXO6H3nJ/s72-c/DERS8.png
Arduino Dersleri
https://arduinodersi.blogspot.com/2017/03/arduino-dersi-8-analog-cks-motor-surucu.html
https://arduinodersi.blogspot.com/
http://arduinodersi.blogspot.com/
http://arduinodersi.blogspot.com/2017/03/arduino-dersi-8-analog-cks-motor-surucu.html
true
3083925267398540913
UTF-8
Tüm Yayınlar Yüklendi Başka Yayın Bulunamadı Tüm Yayınları Görüntüle Daha Fazla Oku Yanıtla Yanıtı İptal Et Sil By Ana Sayfa Sayfada Yayında üm Yayınları Görüntüle Sizin İçin Önerilen Etiket Arşiv Site İçinde Ara Tüm Yayınlar Aramanızla İlgili Yazı Bulunamadı Anasayfaya Dön Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Takipçiler Bizi Takip Edin THIS CONTENT IS PREMIUM Please share to unlock Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy