كود البحث

كود Arduino وفيديو: متحكم محرك تيار مستمر L293D (بدون تحكم بالسرعة)

كود Arduino وفيديو: متحكم محرك تيار مستمر L293D (بدون تحكم بالسرعة)

يغطي هذا الدليل كيفية استخدام متحكم المحرك L293D مع لوحة أردوينو للتحكم في محرك تيار مستمر. يتيح L293D تدوير المحرك في كلا الاتجاهين: مع عقارب الساعة وعكس عقارب الساعة. من خلال اتباع هذا الدليل، ستتعلم كيفية توصيل المكونات وبرمجة الأردوينو لتحقيق التحكم المطلوب في المحرك.

في هذا المشروع سنستخدم مشغِّل المحرك L293D للتحكم في محرك تيار مستمر واحد. سيتمكن المحرك من تغيير الاتجاه بناءً على الأوامر المعطاة في كود الأردوينو. لفهم أوضح للإعداد والكود، من المفيد مشاهدة الفيديو المرتبط (في الفيديو عند 00:00).

شرح الأجهزة

L293D هو دائرة متكاملة مصممة لتشغيل المحركات. يمكنها التحكم بمحركي تيار مستمر في الوقت نفسه أو بمحرك خطوة واحد. تستخدم الشريحة تكوين جسر H للسماح بالتحكم في الاتجاه عن طريق تبديل قطبية الجهد المطبق على المحرك. تجعل هذه المرونة منه خيارًا ممتازًا لمشاريع الروبوتات والأتمتة.

بالإضافة إلى L293D، سنستخدم لوحة أردوينو لإرسال إشارات تحكم إلى مشغّل المحرك. ستقوم لوحة الأردوينو بتوليد مستويات المنطق اللازمة لتمكين المحرك وتحديد اتجاه دورانه. كما سيتطلب الإعداد محرك تيار مستمر ومزود طاقة متوافقًا مع متطلبات جهد المحرك.

تفاصيل ورقة البيانات

المصنّع تكساس إنسترومنتس
رقم القطعة L293D
جهد المنطق/الإدخال والإخراج 5 فولت
جهد التغذية 4.5 - 36 فولت
تيار الإخراج (لكل قناة) 600 مللي أمبير
التيار الذروي (لكل قناة) 1.2 A
إرشادات تردد PWM 20 كيلوهرتز
عتبات منطقية للإدخال 2.5 فولت (نموذجي)
هبوط الجهد / Rالمصب-المصدر عند التشغيل/ التشبع 1.5 فولت (حد أقصى)
الحدود الحرارية 150 °C (حد أقصى)
حزمة حزمة DIP بـ16 دبوس
ملاحظات / متغيرات يمكنه التحكم في محركين

  • تأكد من أن جهد التغذية لا يتجاوز 36 فولت.
  • استخدم مشتت حرارة مناسبًا عند التشغيل قرب الحد الأقصى للتيار.
  • قم دائمًا بتوصيل الأرضي (GND) للأردوينو بسائق المحرك.
  • تحقق من الأسلاك لتجنب توصيلات قطبية معكوسة
  • استخدم إشارات PWM للتحكم في السرعة إذا لزم الأمر في المشاريع المستقبلية.

تعليمات الأسلاك

Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver
Arduino wiring for L293D motor driver

لتوصيل متحكم المحرك L293D بالأردوينو، ابدأ بتوصيل مصدر الطاقة والأرضي. قم بتوصيل الدبوسين 4 و5 في L293D بالأرضي. ثم قم بتوصيل الدبوس 1 (Vcc1) بمخرج 5 فولت في الأردوينو. أما Vcc2 (الدبوس 8)، فوصّله بمصدر طاقة خارجي مع التأكد من أنه يطابق مواصفات جهد المحرك.

بعد ذلك، وصل دبوس التمكين (الدبوس 1) إلى الدبوس 8 في لوحة Arduino للتحكم في طاقة المحرك. لأطراف التحكم بالمحرك، وصل الدبوس 2 (1A) من L293D إلى الدبوس 2 في لوحة Arduino والدبوس 7 (2A) إلى الدبوس 7 في لوحة Arduino. أخيراً، وصل أطراف المحرك إلى الدبوس 3 (1Y) والدبوس 6 (2Y) في L293D.

الدبوس رقم 1 في لوحة التجارب L293D
الدبوس 1 لـ L293D على لوحة التجارب
L293D_توصيلات_لوحة_التجارب_bb

أمثلة على الكود ودليل خطوة بخطوة

يقوم الكود التالي بتهيئة الدبابيس ويضبط تحكم المحرك. المعرفات المستخدمة تشملP1Aللدبوس الأول للتحكم بالمحرك وEN12لدبوس التمكين. تقوم دالة الإعداد بتكوين الدبابيس كمخارج.

void setup() {
  Serial.begin(9600); // setup Serial Monitor to display information
  pinMode(P1A, OUTPUT); // define pin as OUTPUT for P1A
  pinMode(P2A, OUTPUT); // define pin as OUTPUT for P2A
  pinMode(EN12, OUTPUT); // define pin as OUTPUT for 1,2EN enable
}

في الدالة loop، يتم إصدار أمر للمحرك بالدوران في كلا الاتجاهين مع فترات تأخير فيما بينها. يتم طباعة حالة المحرك إلى المراقب التسلسلي باستخدامSerial.println.

void loop() {
  Serial.println("Rotating CW");
  digitalWrite(EN12, HIGH); // Enable 1A and 2A 
  digitalWrite(P1A, HIGH); // send HIGH signal to P1A
  digitalWrite(P2A, LOW); // send LOW signal to P2A
  delay(3000); // motor runs for 3 seconds
  digitalWrite(EN12, LOW); // Disable 1A and 2A
}

يعرض هذا المقتطف كيفية التحكم في اتجاه دوران المحرك عن طريق تغيير مستويات المنطق المرسلة إلىP1AوP2Aيعمل المحرك لمدة 3 ثوانٍ قبل أن يتوقف ويعكس اتجاهه.

إليك كيفية استخدام مشغلات نصف الجسر L293D:

L293D كنصف جسر باتجاه عقارب الساعة
L293D كنصف جسر باتجاه عقارب الساعة
L293D كنصف جسر، اتجاه الدوران: عكس اتجاه عقارب الساعة
L293D كنصف جسر للدوران عكس اتجاه عقارب الساعة

عرض توضيحي / ما الذي يمكن توقعه

عندما يكتمل الإعداد ويُحمَّل الكود، يجب أن تلاحظ دوران المحرّك في اتجاه واحد لمدة 3 ثوانٍ، ثم توقُّفه لمدة 2 ثانية، ثم الدوران في الاتجاه المعاكس لمدة 3 ثوانٍ أخرى. سيتم طباعة حالة المحرّك على شاشة المراقبة التسلسلية لتأكيد هذه الإجراءات (في الفيديو عند 12:00).

من الأخطاء الشائعة عدم التأكد من تزويد المحرك بالجهد الصحيح وعدم التحقق من صحة توصيلات المحرك. إذا لم يستجب المحرك، فقم بمراجعة الأسلاك وتوصيلات مصدر الطاقة مرة أخرى.

الطوابع الزمنية للفيديو

  • 00:00- مقدمة
  • 02:30- شرح الأسلاك
  • 05:00- استعراض الكود
  • 10:00- عرض توضيحي للتحكم في المحرك

الصور

L293D breadboard pin 1
L293D breadboard pin 1
L293D_breadboard_wiring_bb
L293D_breadboard_wiring_bb
L293D as halft bridge CCW
L293D as halft bridge CCW
L293D as halft bridge CW
L293D as halft bridge CW
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver with battery
Arduino wiring for L293D motor driver
Arduino wiring for L293D motor driver
79-Arduino code L293 DC motor driver (Advanced).
اللغة: C++
++
/*
 * This is the Arduino code L293 DC motor driver (Advanced).
 Using this code you can control a motor to rotate in both directions: clockwise (CW) 
 and counter-clockwise (CCW).

 *  * 
 // Written by Ahmad S. for Robojax.com on 
// February 25, 2018 at 18:30 in Ajax, Ontario, Canada
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 

 * watch L293 video for details https://youtu.be/jAmDliHcTJ0
 * Code is available at http://robojax.com/learn/arduino

 * 

*/
// DC motor 1 control
#define P1A 2 // define pin 2 as for P1A
#define P2A 7 // define pin 7 as for P2A
#define EN12 8 // define pin 8 as for 1,2EN enable



// DC motor 2 control 
#define P3A 10 // define pin 10 as for P3A
#define P4A 13 // define pin 13 as for P4A
#define EN34 9 // define pin 9 as for EN3 and EN4 enable

/*
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 
 */

void setup() {
  // L293 Motor Control Code by Robojax.com 2018025
  Serial.begin(9600);// setup Serial Monitor to display information
  pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
  pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
  pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
   
  pinMode(P3A, OUTPUT);// define pin as OUTPUT for P3A
  pinMode(P4A, OUTPUT);// define pin as OUTPUT for P4A
  pinMode(EN34, OUTPUT);// define pin as OUTPUT for 3,4EN   
  // L293 Motor Control Code by Robojax.com 2018025   
}

void loop() {
  // L293 Motor Control Code by Robojax.com 2018025


    Serial.println("Rotating CW");
    digitalWrite(EN12 ,HIGH);// Enable 1A and 2A 
    digitalWrite(P1A,HIGH);// send + or HIGH signal to P1A
    digitalWrite(P2A,LOW);// send - or LOW signal to P2A       
    delay(3000);// motor runs for 3 seconds
    digitalWrite(EN12 ,LOW);// Disable 1A and 2A
    delay(2000);// motor stop for 3 seconds 
    Serial.println("Motor Stopped"); 

  // L293 Motor Control Code by Robojax.com 2018025
    // now changing the direction of rotation of motor
    Serial.println("Rotating CCW");
    digitalWrite(EN12 ,HIGH);// Enable 1A and 2A     
    digitalWrite(P1A,LOW);// send + or HIGH signal to P1A
    digitalWrite(P2A,HIGH);// send - or LOW signal to P2A  
    delay(3000);// motor runs for 3 seconds
    digitalWrite(EN12 ,LOW);// Disable 1A and 2A
    delay(2000);// motor stop for 3 seconds    
    Serial.println("Motor Stopped");   
     

  Serial.println("=========== Loop done"); 
  delay(500);
  // L293 Motor Control Code by Robojax.com 2018025 
}
80-Arduino code: L293 DC motor driver (Advanced)
اللغة: C++
/*


 * This is the Arduino code L293 DC motor driver (Advanced).
Using this code you can control a motor to rotate in both directions: clockwise (CW) 
and counter-clockwise (CCW).

 *  * 
 // Written by Ahmad S. for Robojax.com on 
// February 25, 2018 at 18:30 in Ajax, Ontario, Canada
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 

* Watch L293 video for details: https://youtu.be/jAmDliHcTJ0
 * Code is available at: http://robojax.com/learn/arduino

 * 

*/
// DC motor 1 control
#define P1A 2 // define pin 2 as for P1A
#define P2A 7 // define pin 7 as for P2A
#define EN12 8 // define pin 8 as for 1,2EN enable


// DC motor 2 control 
#define P3A 10 // define pin 10 as for P3A
#define P4A 13 // define pin 13 as for P4A
#define EN34 9 // define pin 9 as for EN3 and EN4 enable

/*
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 
 */

void setup() {
  // L293 Motor Contro Code by Robojax.com 2018025
  Serial.begin(9600);// setup Serial Monitor to display information
  pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
  pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
  pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN
   
  pinMode(P3A, OUTPUT);// define pin as OUTPUT for P3A
  pinMode(P4A, OUTPUT);// define pin as OUTPUT for P4A
  pinMode(EN34, OUTPUT);// define pin as OUTPUT for 3,4EN 

  // L293 Motor Contro Code by Robojax.com 2018025   
}

void loop() {

 if(value == 45){
  rotateMA("CW",HIGH); // start motor in CW
 }
  delay(3000); 
  rotateMA("CW",LOW); // stop motor
  delay(2000);

  rotateMA("CCW",HIGH); // start motor in CCW
  delay(3000); 
  rotateMA("CW",LOW); /// stop motor
  delay(2000);  
  
  // L293 Motor Contro Code by Robojax.com 2018025 
}// loop ends


/**
 * function: rotateMA(String di,int action)
 * Sends power to motor A
 * di is a string and can be "CW" or "CCW"
 * to use: 
 * rotateMA("CW",HIGH);// to rotate motor  CW
 * rotateMA("CCW",HIGH);// to rotate motor CCW
 *  to stop the motor:
 * rotateMA("CW",LOW);// to stop motor 
 */
void rotateMA(String di,int endis)
{
    // L293 Motor Contro Code by Robojax.com 2018025
 if(di =="CW"){
    Serial.println(" Rotating CW");
    digitalWrite(EN12 ,endis);// Enable 1A and 2A 
    digitalWrite(P1A,HIGH);// send + or HIGH signal to P1A
    digitalWrite(P2A,LOW);// send - or LOW signal to P2A       
  

 }else{
  // L293 Motor Contro Code by Robojax.com 2018025
    // now changing the direction of rotation of motor
    Serial.println(" Rotating CCW");
    digitalWrite(EN12 ,endis);// Enable 1A and 2A  
    digitalWrite(P1A,LOW);// send + or HIGH signal to P1A
    digitalWrite(P2A,HIGH);// send - or LOW signal to P2A  

 }   
   // L293 Motor Contro Code by Robojax.com 2018025
}//rotateMA ends here

الأشياء التي قد تحتاجها

الموارد والمراجع

لا توجد موارد حتى الآن.

ملفات📁

لا توجد ملفات متاحة.