Site icon Teknikerler

Arduino L298N – DC Motor Sürücü – Motor Hız ve Yön Kontrol Kartı – Ders 51-

arduino ile l298n

arduino ile l298n

Dc motorlar üzerlerine uygulanan gerilimin miktarına ve yönüne göre hareket ederler. Bir dc motoru döndürebilmek için dc artı ve eksi uygulanır bu uçların yönüne göre motor sağa yada sola döner. Bazı uygulamalarda çok anlık olarak motorun hızını yükseltip düşürmek gerekebilir bunun içn gerilimi azaltmak gerekir bu her nekadar kolay olsa da motorun yönünü sağa ve sola anlık olarak değiştirmek zor iştir. Bunun için bağlantıları ters çevirmek gerekir, buda anlık olarak yapılamadığı için bize ek yardımcı donanımlar gerekir.

Dc motorları sürmek için transistör gereklidir. Tek bir transistör motoru sadece bir yöne dönmesi için kafidir. diğer yön için başka bir tarnsistör gerekmektedir. Bu durumu çözmek için H Köprüsü adı verilen transistörlerden oluşan devre kurulabilir.

h köprüsü
H Köprüsü

Bu devre sayesinde bir dc motorun hem hızı hem de yönü anlık olarak değiştirilebilir.

.L298n adı verilen hazır devre kartında üzerindeki entegre sayesinde içerisinde 2 tane H Köprüsü barındıran yapı bulunmaktadır. Bu modül ile arduino gibi bir işlemciden PWM sinyal göndererek motorların hızı ayarlanabilir ve dijital olarak motorların yönü anlık olarak değiştirilebilir. Bu modül aynı anda 2 adet dc motoru kontrol edebilmektedir.

Arduino ile dijital olarak motorların yönünü değiştirmek için aşağıdaki şemayı kurabilirsiniz.

L298n Dijital bağlantı
//Görsel İşitsel Teknoloji Kanalı
//wwww.teknikerler.com
//Kerim Arı Youtube kanalı L2968N  Kodları  - kullanımı örnek Kodları



const int inputA1 = 2;
const int inputA2 = 3;
const int inputA3 = 4;
const int inputA4 = 5;

void setup()
{
  Serial.begin(9600);

pinMode(inputA1, OUTPUT);
pinMode(inputA2, OUTPUT);
pinMode(inputA3, OUTPUT);
pinMode(inputA4, OUTPUT);
}
void loop()
{
  
//---- A Cikis olarak etkinlestir------//
digitalWrite(inputA1, HIGH);
digitalWrite(inputA2, LOW);
delay(3000);
digitalWrite(inputA1, LOW);
digitalWrite(inputA2, LOW);
delay(2000);

//---- A Cikis TERS olarak etkinlestir------//
digitalWrite(inputA1, LOW);
digitalWrite(inputA2, HIGH);
delay(3000);
digitalWrite(inputA1, LOW);
digitalWrite(inputA2, LOW);
delay(2000);


//---- B Cikis olarak etkinlestir------//
digitalWrite(inputA3, HIGH);
digitalWrite(inputA4, LOW);
delay(3000);
digitalWrite(inputA3, LOW);
digitalWrite(inputA4, LOW);

//---- B Cikis TERS olarak etkinlestir------//

digitalWrite(inputA3, LOW);
digitalWrite(inputA4, HIGH);
delay(3000);
digitalWrite(inputA3, LOW);
digitalWrite(inputA4, LOW);
delay(2000);

}

 

Arduino ile hem motorların yönünü, hem motorların hızını ayarlamak için aşağıdaki şemayı kurabiliriz.

L298n Dijital bağlantı
//Görsel İşitsel Teknoloji Kanalı
//wwww.teknikerler.com
//Kerim Arı Youtube kanalı L2968N  Analog Kodları  - kullanımı örnek Kodları



const int IN1 = 2;
const int IN2 = 3;
const int IN3 = 4;
const int IN4 = 5;
const int ENA = 9;
const int ENB = 10;
int pot = A0;
int sag = 11;
int sol = 12;



void setup() {
  Serial.begin(9600);
  pinMode (IN1, OUTPUT);
  pinMode (IN2, OUTPUT);
  pinMode (IN3, OUTPUT);
  pinMode (IN4, OUTPUT);
  pinMode (ENA, OUTPUT);
  pinMode (ENB, OUTPUT);
  pinMode(sag, INPUT);
  pinMode(sol, INPUT);


}

void loop() {

  int sag_durum = digitalRead(sag);
  int sol_durum = digitalRead(sol);
  int pot_deger = analogRead(pot);

  {


    if (sag_durum == 1)
    {
      Serial.print("SAĞA DÖNÜYOR");
      Serial.print("\t");
      Serial.print("Pot Değeri: ");
      Serial.print(pot_deger);
      Serial.print("\t");
      analogWrite(ENA, pot_deger / 4); //256 e düşürdük
      Serial.print("TAM Dönme Hızı: ");
      Serial.print(pot_deger / 4);
      Serial.print("\t");
      analogWrite(ENB, pot_deger / 8); //128 e düşürdük
      Serial.print("Yarım Dönme Hızı: ");
      Serial.println(pot_deger / 8);

      digitalWrite(IN1, HIGH);//Motor_1 sağ
      digitalWrite(IN2, LOW);//Motor_1 sağ
      digitalWrite(IN3, HIGH);//Motor_2 sağ
      digitalWrite(IN4, LOW);//Motor_2 sağ
    }
    else if (sol_durum == 1)
    {
      Serial.print("SOLA DÖNÜYOR");
      Serial.print("\t");
      Serial.print("Pot Değeri: ");
      Serial.print(pot_deger);
      Serial.print("\t");
      analogWrite(ENA, pot_deger / 4); //256 e düşürdük
      Serial.print("TAM Dönme Hızı: ");
      Serial.print(pot_deger / 4);
      Serial.print("\t");
      analogWrite(ENB, pot_deger / 8); //128 e düşürdük
      Serial.print("Yarım Dönme Hızı: ");
      Serial.println(pot_deger / 8);

      digitalWrite(IN1, LOW);//Motor_1 sol
      digitalWrite(IN2, HIGH);//Motor_1 sol
      digitalWrite(IN3, LOW);//Motor_2 sol
      digitalWrite(IN4, HIGH);//Motor_2 sol
    }
    else


      while (1)
      {
        Serial.println("MOTORLAR DURUYOR");
        digitalWrite(IN1, LOW);
        digitalWrite(IN2, LOW);
        digitalWrite(IN3, LOW);
        digitalWrite(IN4, LOW);
        sag_durum = digitalRead(sag);
        sol_durum = digitalRead(sol);
        if (sag_durum || sol_durum == 1)
          break;
      }

  }

}

/*
  for (int k = 0; k <= 256; k++)
  {
    Serial.print("k ");
  Serial.println(k);
  analogWrite(ENA, k);
  analogWrite(ENB, k);

  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);

  delay(50);

  }


  delay(10);

  for (int m = 250; m >= 0; m--)
  {
    Serial.print("m ");
  Serial.println(m);
  analogWrite(ENA, m);
  analogWrite(ENB, m);

   digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);

  delay(100);

  }
  delay(4000);


  }
*/
Videoyu İZLEMEK İÇİN TIKLAYINIZ
Exit mobile version