13
Eyl
2020

Arduino ve L298N ile motor kontrolü

L298N; fırçalı DC motorları sürebilen, 24 Volta kadar voltaj regülatörlü bir motor sürücüdür. Bu modül ile aynı anda iki farklı motor bağımsız olarak kontrol edilebilir. Her motor için 2 ampere kadar çıkış akımı sağlayabilir.

Yukarıdaki şekilde görüldüğü üzere, L298N üzerinde iki adet iki pinli DC motor bağlantı terminali ve bir adet üç pinli güç terminali bulunmaktadır. Üç pinli güç terminalinde 12V besleme girişi, GND bağlantısı ve 5V çıkışı bulunur. 5V çıkışı, Arduino veya başka bileşenlere güç sağlamak için kullanılabilir. Ancak bu çıkışın kullanılabilmesi için terminalin hemen üzerindeki Jumper’ ın takılı olması ve giriş geriliminin 12Volttan büyük olmaması gerekmektedir. Aksi halde L298 sürücü entegresi zarar görebilir. Buradaki GND bağlantısını hem güç kaynağının (-) bağlantısına, hem de Arduino’ sun GND pinlerinden birine bağlamak gerekmektedir.

L298N üzerindeki diğer pinler lojik pinlerdir. ENA (Enable A) ve ENB (Enable B) pinleri, A ve B motorlarının hız kontrolünün kullanılıp kullanılmayacağı ile ilgilidir. Eğer ENA üzerinde Jumper takılı ise A motoru komut verildiğinde tam hızla dönecektir. Jumper çıkarılıp bu pin Arduino üzerinde PWM pinlerinden birine bağlanarak motorun istenen hızda dönmesi sağlanabilir. Aynı durum ENB pini ve B motoru için de geçerlidir. IN1 ve IN2 pinleri A motorunun çalışması için, IN3 ve IN4 pinleri de B motorunun çalışması için lojik sinyalleri Arduino’ dan alır.

Malzemeler

  • 1 adet Arduino
  • 1 adet L298N
  • 2 adet DC motor
  • 1 adet güç kaynağı

Aşağıdaki bağlantı şeması ve kaynak kod, A ve B motorlarının hız kontrolü olmadan kullanımını göstermektedir. Burada ENA ve ENB üzerinde Jumper takılı olması gerekmektedir.

Bağlantı şeması

Kaynak kod

#define in1 10
#define in2 9
#define in3 7
#define in4 6

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
}
void loop() {
  // A motorunu bir yöne döndür.
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  delay(3000); 
  // A motorunu durdur.
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  delay(3000);
  // A motorunu diğer yöne döndür.
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  delay(3000); 
  // A motorunu durdur.
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  delay(3000);
  
  // B motorunu bir yöne döndür.
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(3000); 
  // B motorunu durdur.
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(3000);
  // B motorunu diğer yöne döndür.
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  delay(3000); 
  // B motorunu durdur.
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(3000);
}

Kaynak kodda görüldüğü üzere, A motorunu in1 ve in2 pinleri kontrol etmekte, B motorunu da in3 ve in4 pinleri kontrol etmektedir. Örneğin A motoru için, in1 pini ve in2 pininin birine HIGH diğerine LOW verildiğinde motor bir yöne hareket etmekte, tam tersi uygulandığında da motor aksi yöne hareket etmektedir. Her iki pine LOW verildiğinde de motor durmaktadır.

Aşağıdaki bağlantı şeması ve kaynak kod, A ve B motorlarının hız kontrolü ile kullanımını göstermektedir. Burada ENA ve ENB pinleri Arduino üzerindeki PWM pinlerine bağlanmıştır.

Bağlantı şeması

Kaynak kod

#define enA 11
#define in1 10
#define in2 9
#define enB 5
#define in3 7
#define in4 6

// Motorun hızını tutan değişken. 0 ile 255 arasında değer alabilir.
int hiz = 0; 

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(enA, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(enB, OUTPUT);
}
void loop() {
  // A motorunu bir yöne hızlandır.
  for (hiz = 0; hiz <= 255; hiz++)
  {
     analogWrite(enA, hiz);
     digitalWrite(in1, LOW);
     digitalWrite(in2, HIGH);
     delay(10);
  }

  // A motorunu bir yavaşlatarak durdur.
  for (hiz = 255; hiz >= 0; hiz--)
  {
     analogWrite(enA, hiz);
     digitalWrite(in1, LOW);
     digitalWrite(in2, HIGH);
     delay(10);
  }
}

Kaynak kodda görüldüğü üzere, A motorunun hızını analogWrite(enA, hiz); komut satırı ile enA pinine gönderilen hiz değişkeni belirlemektedir. Bu değişken 0 değerini aldığında iken motor duracak, 255 değerini aldığında da maksimum hızda dönecektir.