L298N اردوينو







- استخدام الدارة المتكاملة L298 و هي دارة تستخدم لقيادة محركين كهربائيين بتيار أعظمي 2أمبير لكل محرك , و تتميز بسهولة التحكم و تحملها لفولتيات حتى12 فولت .



- استخدام الدارة المتكاملة بحد ذاته يحتاج مركبات الكترونية جانبية , مثل الدايودات و المقاومات و مبددات الحرارة , لذلك أُفضل الحديث عن القطعة التي تسمى L298 Module و هو لوحة جاهزة تسهل التعامل مع هذه الدارة المتكاملة و تختصر الوقت و الجهد .

مبدأ التحكم :

لهذه القطعة عدة مداخل و هي :

- مداخل المحركات : و عددها 4 مداخل و موزعة بواقع مدخلين في كل جهة , و يربط بهما المحرك الكهربائي .

- تكون هذه المخارج مرقمة ب OUT1-OUT4 , نربط المحرك الأول بالمدخلين OUT1 ,OUT2  و المحرك الثاني بالمدخلين OUT3,OUT4 هكذا نستطيع التحكم بسهولة باتجاه دوران المحرك .



- هناك المداخل ENA,ENB هذان مدخلان التفعيل , إذا تم تطبيق صفر منطقي LOW فإن المحرك لن يدور ابداً و سيتوقف , و اذا كان بوضع التفعيل HIGH فإن التحكم ينتقل عن طريق المداخل IN1-IN4 بصورة عامة و توفيراً للمداخل Pins في الأردوينو , يتم وضع jumper صغير بين هذه المداخل مع ال 5v لتفعيلها دائماً .




- التحكم يكون عن طريق المداخل من IN1-IN4 حيث أن IN1 يتحكم بالمدخل OUT1 و الIN2 يتحكم ب OUT2 و هكذا , فبتطبيق 1 منطقي "5 فولت" على مدخل IN1 مثلاً سيتم تمرير التيار ممن خلال OUT1 و عند تطبيق 0 منطقي سيتم ايقاف مرور التيار عبر OUT1 .

هذا مثال بسيط لكيفية التحكم بمحرك .

- توصيلة المداخل مع الأردوينو سهلة , من المفضل توصيلها مع مداخل تدعم ال PWM مثل 3,5,6,9,10,11  لنستطيع التحكم بسرعة المحرك .




كمثال بسيط , سنقوم بتوصيل المحركين بتوصيلة كالتالي :
و سنقوم بعمل برنامج يقوم بدوران المحرك مع و عكس عقارب الساعة و توقيفه بسهولة .


التوصيل :

البرنامج :
/*
// This code to drive 2 DC Motor using L298 Module
// Connect :

IN1 >>>> D3
IN2 >>>> D5
IN3 >>>> D6
IN4 >>>> D9

code written For 
https://www.facebook.com/arduino.electromaroc/

AIT LASRI YOUNES

*/
const int IN1=3;
const int IN2=5;
const int IN3=6;
const int IN4=9;
void setup() {
  // fIRST , define the Motor's pin as an OUTPUT
pinMode( IN1 ,OUTPUT);
pinMode( IN2 ,OUTPUT);
pinMode( IN3 ,OUTPUT);
pinMode( IN4 ,OUTPUT);

}
void ClockWise(){
  //When we want to let Motor To Rotate clock wise
  // just void this part on the loop section .
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,HIGH);
  digitalWrite(IN3,HIGH);
  digitalWrite(IN4,LOW);
}
void CounterClockWise(){
  //When we want to let Motor To Rotate Counter clock wise
  // just void this part on the loop section .
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,HIGH);
}
void Stop(){
  //When we want to let Motor To Rotate clock wise
  // just void this part on the loop section .
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,LOW);
  digitalWrite(IN3,LOW);
  digitalWrite(IN4,LOW);
}

void loop() {
  // put your main code here, to run repeatedly: 
 ClockWise();delay(2000);
 Stop();delay(500);
 CounterClockWise();delay(2000);
 Stop();delay(500);
}


و هذا البرنامج للتحكم بسرعة المحرك .


/*
// This code to drive 2 DC Motor using L298 Module
// Connect :

IN1 >>>> D3
IN2 >>>> D5
IN3 >>>> D6
IN4 >>>> D9

code written For 
http://www.genotronex.com

Mohannad Rawashdeh

*/
const int IN1=3;
const int IN2=5;
const int IN3=6;
const int IN4=9;
void setup() {
  // fIRST , define the Motor's pin as an OUTPUT
pinMode( IN1 ,OUTPUT);
pinMode( IN2 ,OUTPUT);
pinMode( IN3 ,OUTPUT);
pinMode( IN4 ,OUTPUT);

}
void ClockWise(int Speed){
  //When we want to let Motor To Rotate clock wise
  // just void this part on the loop section .
 
  analogWrite(IN1,0);
  analogWrite(IN2,Speed);
  analogWrite(IN3,Speed);
  analogWrite(IN4,0);
}
void CounterClockWise(int Speed){
  //When we want to let Motor To Rotate Counter clock wise
  // just void this part on the loop section .
  analogWrite(IN1,Speed);
  analogWrite(IN2,0);
  analogWrite(IN3,0);
  analogWrite(IN4,Speed);
}
void Stop(){
  //When we want to let Motor To Rotate clock wise
  // just void this part on the loop section .
  analogWrite(IN1,0);
  analogWrite(IN2,0);
  analogWrite(IN3,0);
  analogWrite(IN4,0);
}

void loop() {
 //Rise Up
  for(int i=0;i<255;i++){
  ClockWise(i);
  delay(10);
  }
   for(int i=255;i>0;i--){
  ClockWise(i);
  delay(10);
  }
 
 for(int i=0;i<255;i++){
 CounterClockWise(i);
 delay(10);
 }
 for(int i=255;i>0;i--){
 CounterClockWise(i);
 delay(10);
 }
}


EmoticonEmoticon