Arduino ile DC Motor (L293D Yongası)

watch_later 1/17/2016
Arduino da DC motorun ileri veya geri dönmesinin yanında, dönme hızını da Arduino üzerinden kontrol edeceğiz. Arduino pinlerinden verilebilen akım motorları çalıştırmak için yeterli olmamaktadır. Bu yüzden DC motorlar, motor sürücülerle kullanılmalıdır. Motor sürücüsü kullanmadan doğrudan motoru Arduino'ya bağlamak, Arduino'nun pinlerine zarar verebilir.



Motorun bağlantılar üzerinden bağlanan bir diyot bulunmaktadır. Diyot motordan ters akım ile oluşabilecek kısa devreye karşı korur.



DC Motor Çalışma Prensibi


H-Bridge (H-Köprüsü) ve DC Motor
H Köprüsü DC motorların ileri ve geri yönde hareket etmesini sağlayan devredir. Gerilim iki farklı yönde sağlayarak saat yönünde ya da saat yönünün tersine motoru döndürmek mümkündür. Devrede 2 adet NPN ve 2 adet PNP transistör bulunur.
                                    
H Köprüsü Çalışma Simülasyonu

L293D Yongası
Bu yonga ile aslında bağımsız iki motoru da kontrol edebilirsiniz. Biz sadece yarım yongayı kullanacağız yani sol tarafı, yonga sağ taraftaki pimleri ikinci bir motoru kontrol etmek için kullanılır. Öncelikle bu yonganın bağlantılarına bakalım:

INPUT 1, 2, 3 ve 4 (5, 7, 10 ve 12. pinler): INPUT pinleri motorların dönme yönünün kontrolü için Arduino'ya bağlanır. INPUT 1 ve 2 pinleri 1. motorun, INPUT 3 ve 4 pinleri ise 2. motorun kontrolünde kullanılır. İki pinin aynı anda 5 volt olması motoru kilitleyerek fren yapmasını sağlar. İki pininde 0 volt düzeyinde olması ise motorun boşta olmasına neden olup kısa süre sonra motorun durmasını sağlar.
OUTPUT 1, 2, 3 ve 4 (2, 3, 13 ve 14. pinler): Bu pinler motorlara bağlanan pinlerdir. OUTPUT 1 ve 2. pinler 1. Motora, OUTPUT 3 ve 4. pinler ise 2. motora bağlanır.
ENABLE A ve ENABLE B (6. ve 11. pinler): Bu iki pin motorların dönüş hızını ayarlamak için kullanılır. Bu yüzden bu pinleri Arduino'nun PWM ayaklarına bağlamamız gerekir. PWM sinyalinin görev zamanına göre motorun hızı arttırılabilir veya azaltılabilir. ENABLE A pini 1. motorun, ENABLE B pini ise 2. motorun hızını kontrol etmek için kullanılır. Eğer hız kontrolü yapılmayacaksa bu pinler 5 volt hattına bağlanabilir.
VSS (Logic Supply Voltage – 9. pin): Adından da anlaşıldığı gibi bu pinin 5 volta bağlanması gerekmektedir. Devrenin kararsızlığını azaltmak için bu pinle toprak arasına 100nF'lık kondansatör bağlanabilir.
GND (8. pin): Besleme hattının devreyi tamamlayabilmesi için bu pin toprak hattına bağlanması gerekir. Ayrıca entegrenin üzerindeki demir de GND pinine bağlıdır.
VS (4. pin): Entegrenin motorlara vereceği enerjiyi aldığı ana besleme hattıdır. Bu hatta bağlanacak enerji kaynağı motorlara verileceği için, motorlarımızın özelliğine göre besleme gerilimi kullanmalıyız. Genellikle bu hatta 7-12 volt arasında besleme kaynakları bağlanmaktadır.
    
Arduino Sketch:                                                                                   
/*
 * pinler
 */
int hizPin = 11; // Motorun hızı
int ileriPin = 10; //Motoru ileri yönde
int geriPin = 9; // Motoru geri yönde
int potPin = A1; //potansiyometre ile hızı ayarla
boolean cevir;

void setup()
{
  /*
   * outputları veriyoruz.
   */
  pinMode(ileriPin, OUTPUT);
  pinMode(geriPin, OUTPUT);
  pinMode(hizPin, OUTPUT);
  /*
   * pull-up direnci olarak oluşturuldu.
   */
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(5, INPUT_PULLUP);
}

void loop()
{
  int hiz = analogRead(potPin);
  if (digitalRead(3) && digitalRead(4) && !digitalRead(2) && !digitalRead(5)) { 
//saat yönünde cevir
    cevir = digitalRead(3) && digitalRead(4) && !digitalRead(2) 
   && !digitalRead(5);
    setMotor(hiz, cevir);
  }
  else if (digitalRead(2) && digitalRead(5) && !digitalRead(3) && !digitalRead(4)) { 
 //saat yönünün tersine cevir
    cevir = digitalRead(3) && digitalRead(4) && !digitalRead(2) 
  && !digitalRead(5);
    setMotor(hiz, cevir);
  }
  else { //diger durumlarda motoru durdur
    digitalWrite(ileriPin, LOW);
    digitalWrite(geriPin, LOW);
  }

}

void setMotor(int hiz, boolean cevir)
{
  analogWrite(hizPin, hiz); /* motora hız değeri analog 
  olarak 11.pine gönderiliyor. */
  digitalWrite(ileriPin,  cevir); // ileri doğru cevir
  digitalWrite(geriPin, ! cevir); // geriye dogru cevir
}

H Köprüsü Fritzing Şeması


Bir sonraki yazımda görüşmek üzere…



sentiment_satisfied Emoticon