29 Mayıs 2014 Perşembe

Arduino - PWM ile Servo Motor Sürme


PWM ile DC motor sürmüştük. Şimdi ise aynı yöntemle Servo motor süreceğiz.Fakat transistörlü anahtar kullanmayacağız.Çünkü servo motor kendi içerisinde PWM sinyalini algılayabilecek ekipmana sahip.





Servo Motor Nedir ?
Servo motor özellikle robotik uygulamalarda kullanılan bir motor çeşitidir. Servo motorlar da çıkış; mekaniksel konum, hız veya ivme gibi parametrelerin kontrol edildiği bir düzenektir. 
PWM sinyal ile DC motorun hızını kontrol ederek sürmüştük. Servo motor ise DC motor gibi sürekli dönen bir yapıya sahip değildir. 360 veya 180 derece dönebilen motorlardır ve mühim olan bu motorlarda hız değil açı değeridir. PWM ile servo motor kaç derece dönmesi gerektiğini algılar ve sinyalin istediği derece kadar döner. Uygulamamızda bunu daha iyi anlayacağız.


Towerpro SG90 Servo Motoru
Piyasada bulunan en ucuz servo motor Towerpro SG90 markalı motorudur. Motor 180 derece dönebilmekte ve ekipmanları da fena değil. Kablolarının bağlantıları da aşağıdaki resimde.
PWM yazan kabloyu Arduino'muzun 9 nolu pinine takacağız ve potansiyometre ile ölçtüğümüz analog değeri açıya dönüştürüp PWM ile motoru süreceğiz.

!!! Programı yazarken Servo'yu 170 derece döndürebildim. 180 derece döndürmek için map komutunu ya da açı değerini float olarak girmeme rağmen bu sorunu çözemedim.

Arduino Komutlarımız ;

#include  //Arduino'nun kendi Servo Kütüphanesi var

int potPin = 0;  
int servoPin = 9;
Servo servo;  // servo ismiyle servo motorumuzu tanıttık

void setup() 

  servo.attach(servoPin);  // Servo'nun sinyali alacağı Arduino Pinini belirledik


void loop() 

  int okunan = analogRead(potPin);     // 0'dan 1023'e, Pottan okunan değer
  int aci = okunan / 6;              // 0'dan 180 dereceye Açıya dönüştürülüyor.
  servo.write(aci);  



Bu uygulamayı PIC ile de yapmanızı şiddetle tavsiye ediyorum. Çünkü Servo.h kütüphanesi ile tüm uygulamayı basite indirgeyebiliyoruz. İşin arka planını görmek isteyenler mutlaka PIC ile de denemeliler. 

Uygulamamızın resmi ve videosu ;







10 Mayıs 2014 Cumartesi

Kararsız Multivibratör - Flaşör Devresi

Mühendislik eğitimimle beraber elektronik devre tasarımı veya da hazır devreleri gerçekleştirebileceğim bir alan istemiştim. Hobi elektronik devreleri bu konuda imdadıma yetişmişti. Hobi elektronik alanında ilk devrem flaşör devresi olarak adlandırdığımız gerçekte ise Kararsız Multivibratör olan bu Kare Dalga üreticisiydi.


Devrenin mantığı ise basit. Transistörlerin aynı olsa bile birbirlerine nazaran yapısal farklılıklarından dolayı biri diğerinden daha önce iletime geçecektir. Örneğin Q1 iletimde,Q2 kesimde iken 1.Çıkış ==1, 2.Çıkış== 0 olur. Kondansatörlerin 0,7V 'a ulaşıp boşalmaları ile bu sıra sürekli değişir ve bir kare dalga üreteci ortaya çıkmış olur.

R1=R4, R2=R3 ve C1=C2 alınırsa devre simetrik ters dalga üretimi gerçekleştirilmiş olur.

Frekans hesabına gelince ;
T=T1+T2
T1=R1 * C1 * ln2
T2=R2 * C2 * ln2    ve  f= 1 / T ; formüllerinden bulunabilir.


Formüllerde yanlışlık çıkabilir  deneme yapmanızda fayda var :).
Bu devreyi çıkışlarını led üzerinden takip edebileceğimiz bir devre ile tasarlayalım. Aşağıdaki devreyi kurararak çıkışları gözlemleyebiliriz. Değerleri kendiniz de belirleyebilirsiniz tabii ki simetrik olması şartıyla. Devrede ki kapasitör değeri 4,7 mikrofarattır.





7 Mayıs 2014 Çarşamba

Arduino - PWM ile DC Motor Sürme

Darbe genişlik modülasyonu (PWM) ile ilgili uygulama gerçekleştirmiştik. Bu yazımda ise bu konuyu biraz daha aralayacağız ve bu modülasyon ile transistörün anahtarlama özelliğinden faydalanarak DC motor hızını kontrol edeceğiz.

PWM'den bahsetmeden önce gerekli olan malzemelerden bahsetmek istiyorum.
  • 2N2222 Transistör
  • 1N4001 Diyot
  • 5K ya da 10K Pot
  • DC Motor (9V'luk ya da daha küçük)
  • 470 Ώ direnç
PWM NEDİR ?
PWM en basit haliyle bir sinyal modülasyon tekniği olarak tanımlanabilir. Sinyal bilgisinin aktarım için uygun hale çevirilmesi amacının yanı sıra güç kontrolü sağlamak ve elektrik makineleri,güneş pili şarj üniteleri gibi özel devrelere destek olmak amacı da taşır. 


Bu kontrol de tamamen anahtarlama ile sağlanır. Anahtarlama ne kadar hızlı yapılırsa, PWM ile aktarılan sinyalin gücü o kadar da artar. Örneğin bir lambaya gönderilen sinyalde PWM tekniğine ihtiyaç duyuluyorsa, bu teknik 120 Hz frekans değerinde uygulandığında maksimum verim elde edilebilir. 

"Duty Cycle" yani görev döngüsü olarak tanımlanan bir kavram bulunuyor ve PWM tekniğinde de sıkça karşımıza çıkıyor. Görev döngüsü kavramı aslında yapılan işlemin periyodunu belirtiyor. Bu döngü düşük seviyelerde ise aktarılan güç düşük olurken, döngünün yüksek seviyelerinde yüksek güç aktarılıyor. 




Basitçe soldaki Duty Cycle grafikleri ile PWM'i şu şekilde anlatabiliriz. 10 bitlik bir ADC ile analog değerimiz 0-255 arasında değer alır. Bu yeni dijital değer ile anahtar olarak kullanacağımız transistörün bazına bu sayısal değerler ile PWM uygularız. Sayı ne kadar büyük ise "Pulse Width" yani "Darbe Genişliği" o kadar büyük olur.

Bir pervaneyi elimizle çevirdiğimizi düşünelim. Ne kadar çok çevirip az dinlenirsek pervanemiz o kadar çok dönecektir. Çevirim kısmını 1,dinlenme kısmını da 0 olarak düşünürsek 1'ler ne kadar çoksa pervane de o kadar çok hızlı dönecektir. İşte bu 1'ler transistörümüzün bazına uyguladığımız PWM sinyalinin Darbe Genişliği demek oluyor.

DC MOTOR SÜRMEK
Edindiğimiz bilgiler ile DC Motor sürmek artık kolay. İhtiyacımız yüksek akım kapasiteli bir transistör, PWM üretecimiz ki biz bunu Arduino'muz ile yapacağız ve 1 motor ile diyot.


Soldaki devreyi Arduino'muz ile kuracağız.Transistörün 2N2222 veya muadili olmasına dikkat etmekte fayda var hakeza BC547 vs. gibi transistörler ile bu iş mümkün değil.Çünkü motoru döndüren güç akımdır ve yüksek akım geçiremeyen transistörler ile motor süremeyiz.
Direnç olarak 1k Ώ da kullanabilirsiniz fakat ben 470 Ώ kullandım, bu konuda sıkıntı yok.







Çok kısa da olsa kullanacağımız transistörden de bahsetmek istiyorum. Tüm transistörlerin C,B,E bacakları standart değildir. O yüzden devreyi tamamlerken sağdaki resme bir göz atmanızda fayda görüyorum. Ben ilk seferde transistörü ters taktım ne yazık ki :D ve  transistör o kadar çok ısındı ki elimi yaktım. O yüzden dikkat !





ARDUINO ile DEVRE BAĞLANTISI
Arduino ile sadece motoru yavaşlatıp hızlandırmayacağız. Analog girişe taktığımız potansiyometre değerine göre motorumuzu süreceğiz ve bu işi en kısa yoldan yapmamızı sağlayan bir kod da öğrenmiş olacağız, map.
"map" komutu ile istediğimiz bir çıkış değerini, bağlı olan giriş değerine göre anında değiştirebiliriz.Örnek vermek gerekirse ki bu kodu motor sürme devremizde de kullandık;

motordegeri = map(potdegeri, 0, 1023, 0, 255);

Bu yukardaki kod ile "motordegeri" isimli değerimizi, potun durumuna bağlı kıldık ve okunan analog değeri 10 bit ile sayısal değere çevirdik ve bunu da çıkışa 8 bit olarak yansıttık. Bu sayede motorumuzun hızını potansiyometrenin değeri ile kontrol edebiliyoruz.

Devreyi kurarken motoru harici bir pil ya da adaptör ile sürmenizde fayda var yoksa motoru arduino üzerinden süremezsiniz. Kodlarımız ;

int potPin = A0;
int motorPin = 3;
int potDegeri = 0;
int motorDegeri = 0;
void setup() {
 Serial.begin(9600);
}
void loop() {
 potDegeri = analogRead(potPin);  
 motorDegeri = map(potDegeri, 0, 1023, 0, 255);
 analogWrite(motorPin, motorDegeri);  
 Serial.print("Potansiyometre = " );     
 Serial.print(potDegeri);
 Serial.print("\t motor = ");
 Serial.println(motorDegeri);
 delay(2);    

}

Devreyi çalıştıtırken Seri Haberleşme Monitörüne bakmayı da ihmal etmeyin :).
Bu da devremizin son halinin resmi ve videosu.