كود 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 للتحكم في السرعة إذا لزم الأمر في المشاريع المستقبلية.
تعليمات الأسلاك


لتوصيل متحكم المحرك 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.
أمثلة على الكود ودليل خطوة بخطوة
يقوم الكود التالي بتهيئة الدبابيس ويضبط تحكم المحرك. المعرفات المستخدمة تشمل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:
عرض توضيحي / ما الذي يمكن توقعه
عندما يكتمل الإعداد ويُحمَّل الكود، يجب أن تلاحظ دوران المحرّك في اتجاه واحد لمدة 3 ثوانٍ، ثم توقُّفه لمدة 2 ثانية، ثم الدوران في الاتجاه المعاكس لمدة 3 ثوانٍ أخرى. سيتم طباعة حالة المحرّك على شاشة المراقبة التسلسلية لتأكيد هذه الإجراءات (في الفيديو عند 12:00).
من الأخطاء الشائعة عدم التأكد من تزويد المحرك بالجهد الصحيح وعدم التحقق من صحة توصيلات المحرك. إذا لم يستجب المحرك، فقم بمراجعة الأسلاك وتوصيلات مصدر الطاقة مرة أخرى.
الطوابع الزمنية للفيديو
- 00:00- مقدمة
- 02:30- شرح الأسلاك
- 05:00- استعراض الكود
- 10:00- عرض توضيحي للتحكم في المحرك
++
/*
* 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
}
/*
* 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
الأشياء التي قد تحتاجها
-
أمازونشراء شريحة محرك L293Damzn.to
-
علي إكسبريساشترِ شريحة محرك L293D من علي إكسبرسs.click.aliexpress.com
الموارد والمراجع
لا توجد موارد حتى الآن.
ملفات📁
لا توجد ملفات متاحة.