بناء سيارة روبوت لتجنب العوائق باستخدام اردوينو ودرع محرك L293D ومحرك مؤازر ومستشعر بالموجات فوق الصوتية

لذلك، كنت ترغب في بناء سيارة روبوت تفادي العقبات التي تقود نفسها وتهرب من الجدران من تلقاء نفسها؟ يرشدك هذا البرنامج التعليمي خطوة بخطوة خلال عملية البناء بأكملها، بدءًا من تجميع الهيكل وحتى تحميل مخطط Arduino النهائي. سوف تستخدم أردوينو اونو، ان درع المحرك L293Dو محرك سيرفو SG90و مستشعر الموجات فوق الصوتية HC-SR04. ونتيجة لذلك، يقوم الروبوت بمسح محيطه باستخدام جهاز استشعار بالموجات فوق الصوتية المثبت على جهاز مؤازر، ويكتشف العوائق في طريقه، ويتحرك حولها تلقائيًا.

بالإضافة إلى ذلك، يعد تجنب مشروع سيارة الروبوت هذا طريقة عملية لتعلم التحكم في المحركات وتحديد المواقع المؤازرة وتكامل أجهزة الاستشعار والملاحة المستقلة الأساسية. كما أنه يربط أيضًا مفاهيم من دروس OmArTronics السابقة أساسيات برمجة الأردوينو, التحكم في المحرك المؤازر, استشعار المسافة بالموجات فوق الصوتيةو التحكم في محرك التيار المستمر مع برامج تشغيل المحرك. في النهاية، سيكون لديك روبوت يعمل على تجنب العقبات من الصفر.

📋 ملخص سريع

قم ببناء عائق مستقل لتجنب سيارة الروبوت باستخدام Arduino Uno، ودرع المحرك L293D، ومستشعر الموجات فوق الصوتية HC-SR04، ومحرك سيرفو SG90 للمسح الضوئي. يكتشف الروبوت العوائق، ويمسح يسارًا ويمينًا للعثور على أوضح مسار، ويتنقل من تلقاء نفسه. يتضمن الأسلاك الكاملة والرمز واستكشاف الأخطاء وإصلاحها.

ما ستتعلمه

  • كيف يكتشف المستشعر بالموجات فوق الصوتية HC-SR04 العوائق عن طريق قياس المسافة
  • كيف يقوم محرك مؤازر بمسح مستشعر الموجات فوق الصوتية لمسح البيئة يميناً ويساراً
  • كيف يقوم درع المحرك L293D بتشغيل محركي تيار مستمر للحركة الأمامية والخلفية والدوران
  • كيف يقرر كود Arduino متى يتوقف ويعكس ويختار اتجاهًا جديدًا
  • كيفية تجميع هيكل الروبوت الكامل مع طاقة البطارية والأسلاك والحوامل المطبوعة ثلاثية الأبعاد
  • كيفية تحميل الكود البرمجي لتجنب العوائق واختباره وضبطه

كيف تعمل سيارة الروبوت التي تتجنب العقبات

قبل أن نبدأ في البناء، من المفيد أن نفهم كيفية عمل جميع الأجزاء معًا. تستخدم العقبة التي تتجنب السيارة الآلية حلقة التفكير والفعل للتنقل حول الأشياء الموجودة في طريقها.

مستشعر الموجات فوق الصوتية (HC-SR04) - عيون الروبوت&8217;- عيون الروبوت

إن مستشعر الموجات فوق الصوتية HC-SR04 يرسل أولاً نبضة فوق صوتية قصيرة ثم يستمع إلى الصدى الذي يرتد من الأجسام. يقيس Arduino الوقت بين الإرسال والاستقبال، ثم يحسب المسافة إلى أقرب عائق. يحدث هذا القياس عدة مرات في الثانية أثناء قيادة الروبوت.

محرك سيرفو (SG90) - الماسح الضوئي

يتم تركيب المستشعر فوق الصوتي على جهاز استشعار بالموجات فوق الصوتية على محرك سيرفو SG90. أثناء القيادة للأمام، يقوم المؤازر بمسح المستشعر يسارًا ويمينًا بين 30 درجة و150 درجة، بحيث يحصل الروبوت على رؤية واسعة للمسار أمامه. عندما تظهر عقبة في مكان قريب، يقوم المؤازرة بإدارة المستشعر بالكامل إلى اليسار (175 درجة) وإلى اليمين بالكامل (5 درجات) لقياس المسافة على كل جانب ومعرفة الاتجاه الذي يحتوي على مساحة أكبر.

الدرع المحرك L293D - العضلات

إن درع المحرك L293D يقع أعلى Arduino ويتحكم في محركين يعملان بالتيار المستمر. يتعامل مع الاتجاه (للأمام أو للخلف) والسرعة (عبر PWM) لكل محرك بشكل مستقل. إذا قمت بتشغيل المحركين الأيسر والأيمن في اتجاهين متعاكسين، فإن الروبوت يدور في مكانه.

منطق القرار - الدماغ

يقوم Arduino بتشغيل حلقة مستمرة: قياس المسافة واتخاذ القرار والتصرف. إذا كان المسار أمامك خاليًا (أكثر من 40 سم)، يتحرك الروبوت للأمام بسرعة ثابتة أثناء المسح. عندما يقترب العائق (بين 15 سم و40 سم)، يبطئ الروبوت تدريجياً. عندما تنخفض المسافة إلى أقل من 15 سم، يتوقف الروبوت وينظر يميناً ويساراً ويستدير نحو أي جانب به مساحة مفتوحة أكثر. إذا كان كلا الجانبين مسدوداً (طريق مسدود)، فإن الروبوت يعكس اتجاهه أولاً، ثم يقوم بالمسح مرة أخرى ويختار اتجاهاً جديداً.

عقبة تجنب مكونات السيارة الروبوتية (فاتورة المواد)

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

قائمة الأجزاء الكاملة

المكوّنالكميةمطلوب / اختياريالغرضالملاحظات
أردوينو أونو1مطلوبMain microcontroller — runs the obstacle avoidance codeتعمل أي لوحة متوافقة مع Arduino Uno
درع المحرك L293D1مطلوبيقود ويتحكم في محركي التيار المستمرلأنه يتم توصيله مباشرة أعلى Arduino Uno
محركات التيار المستمر (3-6 فولت)2مطلوبعجلات القيادة اليمنى واليسرىمحركات التيار المستمر القياسية الموجهة للهوايات
محرك مؤازر (SG90)1مطلوبيمسح المستشعر فوق الصوتي يميناً ويساراً للبحث عن العوائقأي جهاز مؤازر صغير 9g يعمل
مستشعر الموجات فوق الصوتية (HC-SR04)1مطلوبقياس المسافة إلى العوائق باستخدام النبضات فوق الصوتيةوحدة ذات 4 سنون: VCC، تريج، صدى الصوت، GND
أسلاك التوصيلالعديد منمطلوبجميع التوصيلات الكهربائية بين المكوناتأنواع M-M و M-F
بطاريات AA قابلة لإعادة الشحن (1.5 فولت)8مطلوبمزود الطاقة للمحركات و Arduino8 × 1.5 فولت = إجمالي 12 فولت. يقبل درع المحرك 5-12 فولت ويشغل Arduino مباشرةً.
حوامل البطاريات (4×AA)2مطلوبعقد البطاريات وتوصيلها على التواليموصولة على التوالي لإنتاج 12 فولت
مفتاح التبديل1مطلوبمفتاح التشغيل/إيقاف التشغيل الرئيسيمضمن بسلك البطارية الموجب
هيكل الروبوت1مطلوبإطار لتركيب جميع المكوناتمنصة مصنوعة من الأكريليك أو مطبوعة ثلاثية الأبعاد
العجلات2مطلوبالتوصيل بمحركات التيار المستمر للحركةطابق حجم عمود المحرك
عجلة الدعم (العجلة)1مطلوبنقطة الاتصال الثالثة للاستقرارعجلة كروية أو عجلة دوارة
البراغي والصواميل والمثبتات والفواصلمتنوعمطلوبالتجميع الميكانيكيمسامير M3 شائعة في Arduino والهيكل
حوامل مطبوعة ثلاثية الأبعادمجموعةاختياريحوامل مخصصة للمحرك المؤازر والمستشعر فوق الصوتي وArduinoيمكن استبداله بالغراء الساخن أو الأربطة السحابية أو الأقواس

عقبة خطوة بخطوة لتجنب تجميع سيارة الروبوت

اتبع هذه الخطوات لتجميع سيارة الروبوت الفعلية قبل توصيل الأسلاك والبرمجة. خذ وقتك مع البناء الميكانيكي. الهيكل الصلب يجعل كل شيء آخر أسهل.

الخطوة 1: تركيب حاملات البطارية

قم بتثبيت حاملي البطاريات 4 × AA على الجانب السفلي أو الخلفي من هيكل الروبوت باستخدام البراغي والصواميل. قم بلحام أسلاك الإخراج الخاصة بالحاملين على التوالي (موجب لحامل واحد وسالب للآخر) بحيث يتم توصيل جميع البطاريات الثمانية في سلسلة بإجمالي 12 فولت تقريبًا.

الخطوة 2: تثبيت مفتاح الطاقة

قم بلحام مفتاح التبديل المتوافق مع السلك الموجب القادم من سلسلة البطارية. قم بتثبيت المفتاح في مكان يسهل الوصول إليه على الهيكل حتى تتمكن من تشغيل الروبوت وإيقاف تشغيله بسرعة.

الخطوة 3: توصيل محركات التيار المستمر

قم بلحام الأسلاك بكلا طرفي كل محرك تيار مستمر. قم بتركيب محرك واحد على الجانب الأيسر والآخر على الجانب الأيمن من الهيكل باستخدام البراغي أو الصواميل أو أقواس المحرك.

الخطوة 4: إعداد حامل الأردوينو

إذا كنت تستخدم حامل Arduino المطبوع ثلاثي الأبعاد، فقم بتسخين الإدخالات النحاسية الملولبة باستخدام مكواة لحام واضغط عليها في فتحات التثبيت. يمنحك هذا خيوطًا لولبية قوية وقابلة لإعادة الاستخدام لتأمين Arduino.

الخطوة 5: تركيب الأردوينو ودرع المحرك

ثبِّت الحامل المطبوع ثلاثي الأبعاد (أو الحوامل) على الهيكل. بعد ذلك، ضع Arduino Uno على الحامل واربطه بمسامير. ثم قم بتوصيل درع المحرك L293D بعناية بدرع المحرك L293D على Arduino، مع التأكد من محاذاة جميع دبابيس الرأس بشكل صحيح.

الخطوة 6: تركيب المحرك المؤازر

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

الخطوة 7: تركيب جهاز الاستشعار بالموجات فوق الصوتية

والآن، أدخل مستشعر الموجات فوق الصوتية HC-SR04 في قوسه المطبوع ثلاثي الأبعاد (أو قم بتثبيته بالغراء الساخن). ثبِّت الكتيفة على قرن المؤازرة باستخدام برغي صغير بحيث يدور المستشعر مع المؤازرة.

الخطوة 8: توصيل عجلة الدعم

من أجل الثبات، قم بتركيب عجلة العجلات الكروية أو عجلة الدعم الدوارة على مقدمة أو مؤخرة الهيكل (مقابل محركات التيار المستمر) لأن ذلك يمنح الروبوت تلامسًا ثابتًا ثلاثي النقاط مع الأرض.

الخطوة 9: توصيل عجلات القيادة

اضغط على العجلات على أعمدة محرك التيار المستمر على كلا الجانبين. تأكد من تثبيتها بإحكام وأنها تدور بحرية دون الاحتكاك بالهيكل.

توصيل الأسلاك بالعائق لتجنب سيارة الروبوت

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

Wiring diagram for Arduino obstacle avoiding robot car showing connections between Arduino motor shield, HC-SR04 ultrasonic sensor, SG90 servo motor, two DC motors, and battery pack
مخطط الأسلاك الكامل - Arduino مع درع المحرك L293D، ومستشعر الموجات فوق الصوتية HC-SR04، ومحرك سيرفو SG90، ومحركات التيار المستمر، ومزود البطارية

توصيلات محرك التيار المستمر

المحركطرف توصيل درع المحرك
سلك محرك التيار المستمر الأيسر 1A−
سلك محرك التيار المستمر الأيسر 2A+
سلك محرك التيار المستمر الأيمن 1B−
سلك محرك التيار المستمر الأيمن 2B+

توصيلات المحرك المؤازر

سلك مؤازريتصل بـ
إشارة (برتقالي/أصفر)دبوس اردوينو الرقمي 5 (على رأس درع المحرك)
VCC (أحمر)دبوس 5 فولت على درع المحرك
GND (بني/أسود)دبوس GND على درع المحرك

مهم: قم بتوصيل سلك الطاقة الخاص بالمؤازرة&8217 بسلك الطاقة إلى 5 V دبوس على درع المحرك, لا دبوس 3.3 فولت. يتطلب سيرفو SG90 5 فولت ليعمل بشكل موثوق. سيؤدي استخدام 3.3 فولت إلى حدوث ارتعاش وحركة ضعيفة.

توصيلات جهاز الاستشعار بالموجات فوق الصوتية (HC-SR04)

دبوس HC-SR04يتصل بـ
VCC5 فولت على درع المحرك
المثلثاتدبوس اردوينو الرقمي 7
الصدىدبوس اردوينو الرقمي 6
GNDGND على درع المحرك

توصيلات إمداد الطاقة

سلك البطارية/سلك التبديليتصل بـ
موجب (من خرج المفتاح)واقي المحرك Vin / طرف توصيل الطاقة (+)
سالب (أرضي البطارية)درع المحرك GND/طرف توصيل الطاقة (-)

ينظم درع المحرك L293D طاقة Arduino من خلال دبوس Vin، لذلك لا تحتاج إلى كابل USB منفصل بمجرد توصيل البطاريات. ما عليك سوى التحقق مرة أخرى من جميع التوصيلات قبل إدخال البطاريات، لأن القطبية المعكوسة يمكن أن تلحق الضرر بالمكونات.

أدخل البطاريات

ضع جميع البطاريات القابلة لإعادة الشحن مقاس AA وعددها 8 في الحوامل. لا تقم بتشغيل المفتاح بعد. سنقوم بتحميل الكود أولا.

كود أردوينو لسيارة الروبوت التي تتجنب العوائق

هنا هو رسم Arduino الكامل لعائق تجنب سيارة الروبوت. قم بتحميل هذا الرمز إلى Arduino Uno الخاص بك باستخدام Arduino IDE. تأكد من Servo تم تثبيت المكتبة (وهي تأتي مثبتة مسبقًا مع Arduino IDE).

عقبة كاملة لتجنب رسم سيارة الروبوت اردوينو

/**
 * Author: Omar Draidrya
 * Date: 2024-06-18
 * This code controls a robot with ultrasonic sensors and servo motors to avoid obstacles.
 */
#include <Servo.h>
// Create a Servo object to control the servo motor
Servo myservo;
int pos = 0;  // Variable to store the servo position
// Define motor pins
int directionA = 12;  // Pin for direction of Motor A
int speedA = 3;  // Pin for speed of Motor A
int brakeA = 9;  // Pin for brake of Motor A
int directionB = 13;  // Pin for direction of Motor B
int speedB = 11;  // Pin for speed of Motor B
int brakeB = 8;  // Pin for brake of Motor B
// Define ultrasonic sensor pins
int trigger = 7;  // Trigger pin
int echo = 6;  // Echo pin
long duration = 0;  // Variable to store the duration of the echo
long distance = 0;  // Variable to store the distance from the obstacle
int currentAngle = 90;  // Start with the sensor facing forward
int scanDirection = 1;  // 1 for right, -1 for left
void setup() {
    // Attach the servo on pin 5 to the servo object
    myservo.attach(5);
    // Set the trigger pin as OUTPUT and the echo pin as INPUT
    pinMode(trigger, OUTPUT);
    pinMode(echo, INPUT);
    // Initialize Motor A pins
    pinMode(directionA, OUTPUT);
    pinMode(directionB, OUTPUT);
    pinMode(brakeA, OUTPUT);
    pinMode(brakeB, OUTPUT);
    // Apply brakes (stop the motors)
    digitalWrite(brakeA, HIGH);
    digitalWrite(brakeB, HIGH);
    // Set the servo to the center position initially
    myservo.write(90);
    delay(500);
}

الحلقة الرئيسية والوظائف المساعدة

void loop() {
// قياس المسافة إلى أقرب عائق
المسافة = قياس المسافة ()؛
if (distance < 40) {
// قلل السرعة تدريجيًا مع اقتراب العائق
سرعة كثافة العمليات = الخريطة (المسافة، 20، 40، 75، 128)؛
motorTurn(directionA, speedA, HIGH, speed);
motorTurn(directionB, speedB, HIGH, speed);
if (distance < 15) {
// أوقف المحركات
الكتابة الرقمية (الفراملA، عالية)؛
الكتابة الرقمية (الفراملB، عالية)؛
تأخير (500)؛
// التحقق من المناطق المحيطة
int leftDistance = checkDirection(175);
int rightDistance = checkDirection(5);
// تحديد ما إذا كان الروبوت في طريق مسدود
if (leftDistance < 15 && rightDistance < 15) {
// التحرك للخلف
motorTurn(directionA, speedA, LOW, 128);
motorTurn(directionB, speedB, LOW, 128);
تأخير (500)؛
// استخدم الفرامل
الكتابة الرقمية (الفراملA، عالية)؛
الكتابة الرقمية (الفراملB، عالية)؛
تأخير (500)؛
// المسح مرة أخرى بعد العودة
leftDistance = checkDirection(30);
rightDistance = checkDirection(150);
}
// تحديد أفضل اتجاه للدوران
if (leftDistance > rightDistance) {
// انعطف لليسار
motorTurn(directionA, speedA, LOW, 128);
motorTurn(directionB, speedB, HIGH, 128);
} else {
// انعطف يمينا
motorTurn(directionA, speedA, HIGH, 128);
motorTurn(directionB, speedB, LOW, 128);
}
تأخير (500)؛
// استخدم الفرامل
الكتابة الرقمية (الفراملA، عالية)؛
الكتابة الرقمية (الفراملB، عالية)؛
تأخير (500)؛
// اضبط المؤازرة مرة أخرى على الموضع المركزي
myservo.write(90);
تأخير (500)؛
}
} else {
// المضي قدمًا بسرعة منخفضة
motorTurn(directionA, speedA, HIGH, 100);
motorTurn(directionB, speedB, HIGH, 100);
// المسح المستمر لليسار واليمين
currentAngle += scanDirection * 10;
if (currentAngle >= 150 || currentAngle <= 30) {
scanDirection = -scanDirection;
}
myservo.write(currentAngle);
تأخير (40)؛ // تأخير معدل لحركة مؤازرة أكثر واقعية
}
}

وظائف المساعدة

// وظيفة تحديد اتجاه وسرعة المحركات
void motorTurn(int directionPin, int speedPin, int direction, int speed) {
الكتابة الرقمية(directionPin,direction);
AnalogWrite(speedPin, speed);
if (directionPin == directionA) {
الكتابة الرقمية (الفراملA، LOW)؛
} else {
الكتابة الرقمية (الفراملB، LOW)؛
}
}
// وظيفة لقياس المسافة باستخدام جهاز الاستشعار بالموجات فوق الصوتية
int measureDistance() {
الكتابة الرقمية (الزناد، LOW)؛
delayMicroseconds(2);
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
الكتابة الرقمية (الزناد، LOW)؛
المدة = نبضة الإدخال (صدى، عالي)؛;
المسافة = (المدة / 2) / 29.1؛;
مسافة العودة؛;
}
// دالة للتحقق من المسافة في اتجاه محدد
كثافة العمليات checkDirection (زاوية كثافة العمليات) {
myservo.write(angle);
تأخير(500)؛ // إعطاء المحرك المؤازر وقتًا للتحرك
int measuredDistance = measureDistance();
أعد المسافة المقاسة؛;
}

عقبة تجنب شرح رمز سيارة الروبوت

إليك شرح تفصيلي لكل قسم من أقسام الكود، حتى تعرف ما يفعله كل جزء ويمكنك تعديله لاحقًا.

تخصيصات الدبابيس

في أعلى الرسم التخطيطي، نحدد منافذ أردوينو المتصلة بكل مكون. يستخدم المحرك A (يسار) المنافذ 12 (الاتجاه)، و3 (السرعة/PWM)، و9 (الفرامل). بينما يستخدم المحرك B (يمين) المنافذ 13، و11، و8. يتم توصيل إشارة تشغيل مستشعر الموجات فوق الصوتية بالمنفذ 7، وإشارة الصدى بالمنفذ 6، وإشارة المؤازرة بالمنفذ 5. يتم تحديد أرقام هذه المنافذ بواسطة لوحة درع المحرك L293D، لذا فهي ليست عشوائية.

قياس المسافة

إن قياس المسافة() ترسل الدالة نبضة مدتها 10 ميكروثانية على دبوس التشغيل، ثم تنتظر الصدى. وتحسب المسافة بالسنتيمترات باستخدام الصيغة التالية: المسافة = (المدة / 2) / 29.1. القسمة على 2 تأخذ في الاعتبار الرحلة ذهابًا وإيابًا للموجة الصوتية، و29.1 هو العدد التقريبي للميكروثانية لكل سنتيمتر للصوت في الهواء.

التحكم في المحرك

إن motorTurn() تقوم الدالة المساعدة بتحديد اتجاه وسرعة محرك واحد. تقوم هذه الدالة بكتابة إشارة دبوس الاتجاه إلى HIGH (للأمام) أو LOW (للخلف)، وتضبط السرعة عبر analogWrite() (0-255)، ويحرر الفرامل. لاحظ أن غطاء المحرك يستخدم دبابيس فرامل منفصلة، لذا فإن ضبط الفرامل على مستوى عالٍ يوقف المحرك فورًا.

كيف تكتشف السيارة الروبوتية التي تتجنب العوائق العوائق وتبطئ سرعتها

داخل المبنى الرئيسي حلقة(), يقيس الروبوت المسافة أمامه في كل دورة. إذا كانت المسافة بين 15 سم و40 سم، فإن الروبوت لا يتوقف. بدلاً من ذلك، يقلل سرعته تدريجياً باستخدام map() كلما اقترب العائق، تباطأت حركة الروبوت. وهذا يخلق تباطؤًا سلسًا بدلًا من التوقف المفاجئ.

منطق مسح السيارة الروبوتية لتجنب العوائق

عندما تقل المسافة عن 15 سم، يتوقف الروبوت عن تشغيل كلا المحركين ثم يستدعي تحقق من الاتجاه (175) (انظر إلى اليسار) و تحقق من الاتجاه (5) (انظر إلى اليمين). الـ تحقق من الاتجاه() تقوم الدالة بتدوير المحرك المؤازر إلى الزاوية المحددة، وتنتظر حتى يصل إلى الموضع المطلوب، ثم تقيس المسافة وتعيدها. بعد ذلك، يقارن الروبوت المسافتين ويتجه نحو الجانب ذي المساحة الأوسع.

سلوك عكسي مسدود

إذا كانت المسافة بين الجانبين الأيمن والأيسر أقل من 15 سم، فإن الروبوت يكون في طريق مسدود. فيقوم الروبوت بالرجوع للخلف لمدة 500 مللي ثانية، ثم يتوقف، ثم يعيد المسح بزوايا مختلفة قليلاً (30° و150°) لإعادة التقييم. وهذا يمنح الروبوت فرصة للخروج من الزوايا الضيقة وإيجاد طريق جديد للمضي قدمًا.

مسح سيرفو أثناء قيادة السيارة الروبوتية لتجنب العوائق

عندما يكون الطريق أمام الروبوت خاليًا (مسافة تزيد عن 40 سم)، يتحرك الروبوت للأمام بسرعة ثابتة بينما يقوم المحرك المؤازر بمسح مستشعر الموجات فوق الصوتية بزاوية تتراوح بين 30° و150° بزيادات قدرها 10°. يتيح هذا المسح الواسع للروبوت اكتشاف العوائق القادمة من الجوانب، وليس فقط من الأمام مباشرة. ينعكس اتجاه المسح في كل مرة يصل فيها إلى زاوية حدية.

قم بتحميل واختبار ومراقبة العائق الذي يتجنب سيارة الروبوت

  1. قم بتوصيل أردوينو بجهاز الكمبيوتر الخاص بك عبر منفذ USB، ثم افتح بيئة تطوير Arduino IDE.
  2. ثم قم بتحميل الرسم التخطيطي أعلاه إلى أردوينو أونو.
  3. بعد ذلك، افصل كابل USB, أدخل البطاريات، ثم قم بتشغيل مفتاح الطاقة.
  4. راقب السلوك: وعلى وجه التحديد، يجب على الروبوت أن يتقدم للأمام، ثم يبطئ سرعته عند اقترابه من عائق، ويتوقف، ويمسح يسارًا ويمينًا، ثم ينعطف نحو المسار الأكثر وضوحًا.
  5. إذا انعطف الروبوت في الاتجاه الخاطئ، فقم بتبديل السلكين الموجودين على طرف محرك واحد (A+ و A−، أو B+ و B−) لعكس اتجاه ذلك المحرك.

كيفية ضبط العائق لتجنب سيارة الروبوت

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

مرجع معلمات الضبط

المعلمةالقيمة الافتراضيةما الذي يتحكم فيهنصيحة لضبط المحرك
عتبة العائق (بعيدة)40 سمالمسافة التي يبدأ عندها الروبوت بالتباطؤقم بزيادة القيمة لسرعة الاستجابة؛ وقم بتقليلها إذا توقف الروبوت مبكرًا جدًا.
عتبة العائق (قريب)15 سمالمسافة التي يتوقف عندها الروبوت ويقوم بالمسحقم بزيادة القيمة إذا تعطل الروبوت قبل التوقف؛ وقللها لتحسين دقة الملاحة.
للأمام سريع100 (PWM)سرعة الإبحار عندما يكون الطريق خالياًالنطاق 0-255. كلما زادت القيمة، زادت السرعة ولكن يصعب إيقافها في الوقت المناسب.
سرعة الدوران128 (PWM)السرعة أثناء الانعطاف يسارًا/يمينًاقم بزيادة القيمة إذا لم يُكمل الروبوت الدوران؛ وقللها على الأسطح الزلقة
مدة التشغيل500 مللي ثانيةكم من الوقت يستغرق الروبوت للدوران قبل التوقف؟قم بزيادة الزيادة لتوسيع نطاق الانعطافات؛ وقم بتقليلها لإجراء تعديلات طفيفة
مدة عكسية500 مللي ثانيةكم من الوقت يستغرق الروبوت للرجوع للخلف في طريق مسدود؟قم بزيادة القيمة إذا لم يتراجع الروبوت مسافة كافية
نطاق المسح المؤازر30°–150°نطاق المسح أثناء القيادة للأمامنطاق أوسع = كشف جانبي أفضل ولكن عمليات مسح أبطأ
خطوة فحص المؤازرة10°زيادة الزاوية لكل دورة حلقةحجم أصغر = مسح أكثر سلاسة ولكن تغطية أبطأ
تأخير مسح المؤازرة40 مللي ثانيةتوقف مؤقتًا بين خطوات المؤازرة أثناء المسحقلل القيمة لمسح أسرع؛ وزدها إذا كان المحرك يرتجف

فهم درع محرك الأردوينو L293D Arduino Shield

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

L293D Arduino motor shield board layout showing motor terminals, power terminals, and control pin labels
لوحة محرك L293D — أطراف المحرك (A+، A−، B+، B−)، مدخل الطاقة (Vin، GND)، ودبابيس التحكم

الميزات الرئيسية

  • يتحكم بشكل مستقل في ما يصل إلى محركين تيار مستمر (أو محرك متدرج واحد)
  • يتحمل تيارًا مستمرًا يصل إلى 2 أمبير لكل قناة محرك
  • يدعم تقنية تعديل عرض النبضة (PWM) للتحكم السلس في السرعة
  • يوفر دبابيس فرامل مخصصة للتوقف الفوري
L293D motor shield mounted on Arduino Uno with DC motor wires connected to screw terminals
لوحة محرك L293D مثبتة على لوحة أردوينو أونو - أسلاك المحرك متصلة بأطراف التوصيل اللولبية

مرجع دبابيس لوحة حماية المحرك

وظيفةدبوس المحرك أدبوس المحرك B
اتجاه1213
السرعة (PWM)311
الفرامل98

للحصول على شرح أعمق حول محركات القيادة وكيفية عمل جسور H، راجع البرنامج التعليمي الكامل: التحكم في محركات التيار المستمر باستخدام جسر H المزدوج L298N ودرع محرك أردوينو.

استكشاف الأخطاء وإصلاحها عقبة تجنب سيارة الروبوت

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

مشاكل وحلول شائعة لسيارات الروبوت التي تتجنب العوائق

مشكلةالسبب المحتملحل
الروبوت لا يتحرك على الإطلاقانقطاع التيار الكهربائي، أو وجود أسلاك مفكوكة، أو عدم تحرير الفراملأولاً، تحقق من مفتاح الطاقة، وجهد البطارية (يجب أن يكون حوالي 12 فولت)، وتأكد من توصيلات أطراف المحرك. تأكد من تحميل البرنامج بدون أخطاء.
محرك واحد فقط يعملأحد المحركات غير موصول، أو سلك مقطوعبدلاً من ذلك، قم بتبديل أسلاك المحرك العامل إلى الطرف الآخر للاختبار. تحقق من وصلات اللحام على المحرك.
يتحرك الروبوت في اتجاه واحد فقطتم تبديل أسلاك المحرك أو توصيل دبابيس التوجيه بشكل غير صحيح.ببساطة قم بتبديل السلكين الموجودين على طرف المحرك الذي يعمل في الاتجاه الخاطئ (A+ و A−، أو B+ و B−).
يعطي مستشعر الموجات فوق الصوتية قراءات غير مستقرة أو معدومة.الأسلاك غير المحكمة، أو الدبابيس الخاطئة، أو وجود جسم قريب جدًا / بعيد جدًاأولاً، تأكد من توصيلات Trig (الطرف 7) وEcho (الطرف 6). يتراوح نطاق HC-SR04 تقريبًا من 2 سم إلى 400 سم. أضف تأخيرًا بسيطًا إذا كانت القراءات متذبذبة.

مشاكل في مستشعرات سيارة الروبوت لتجنب العوائق والطاقة

مشكلةالسبب المحتملحل
اهتزازات أو تشنجات المؤازرعدم كفاية الطاقة، أو توصيل المؤازر بجهد 3.3 فولت، أو سكة طاقة صاخبةأولاً، تأكد أولاً من توصيل VCC المؤازر ب 5 فولت (وليس 3.3 فولت). ثم، أضف مكثف 100 µF عبر خطوط الطاقة المؤازرة لتنعيم الإمداد.
يدور الروبوت في الاتجاه الخاطئيتم تبديل المحرك الأيسر والأيمنبدلاً من ذلك، قم بتبديل وصلات المحرك على الدرع (انقل أسلاك المحرك A إلى أطراف المحرك B والعكس بالعكس)، أو قم بتبديل تعيينات دبوس الاتجاه في الكود.
يتفاعل الروبوت بعد فوات الأوان ويصطدم بالعوائقعتبة المسافة منخفضة جداً، أو تأخير الرمز طويلاً جداًولذلك، قم بزيادة العتبة البعيدة (على سبيل المثال، من 40 سم إلى 50 سم) وتقليل التأخير غير الضروري في الحلقة.
تستنزف البطاريات بسرعة كبيرةالمحركات التي تسحب تياراً عالياً، أو البطاريات غير مشحونة بالكاملأولاً، استخدم بطاريات NiMH المشحونة حديثًا. أيضًا، قم بتقليل سرعة المحرك إن أمكن. تأكد من عدم وجود ربط ميكانيكي على العجلات.
إعادة تعيين الأردوينو عند بدء تشغيل المحركاتانخفاض الجهد من سحب تيار المحركبدلاً من ذلك، استخدم حزمة بطارية منفصلة أو أضف مكثفًا كبيرًا (470-1000 ميكروفاراد) عبر أطراف طاقة درع المحرك.
روبوت يدور في دوائركلا المحركين يعملان في اتجاهين متعاكسين، أو محرك واحد لا يدورأولاً، تحقق من تعيينات دبوس الاتجاه ثم اختبر كل محرك على حدة باستخدام رسم تخطيطي بسيط قبل تشغيل الكود الكامل.

عقبة تجنب الأسئلة الشائعة لسيارة الروبوت

What is an obstacle avoiding robot car?

إحدى العوائق التي تتجنب السيارة الآلية هي مركبة صغيرة مستقلة تستخدم أجهزة استشعار (عادةً مستشعر بالموجات فوق الصوتية مثل HC-SR04) لاكتشاف الأشياء في طريقها وتغيير الاتجاه تلقائيًا لتجنب الاصطدامات، وكل ذلك دون تحكم بشري.

هل يمكنني استخدام Arduino Nano أو Mega بدلاً من Arduino Uno؟

تم تصميم درع المحرك L293D لتوصيله مباشرة برأس Arduino Uno. كما أنه يناسب Arduino Mega، ولكن ليس Arduino Nano بدون محول. إذا كنت تريد استخدام Nano، فكر في استخدام L293D IC مستقل أو وحدة L298N بدلاً من ذلك. انظر لدينا البرنامج التعليمي لسائق المحرك L298N لنهج بديل.

هل يمكنني استخدام مشغل محرك L298N بدلاً من درع المحرك L293D؟

نعم. يعد L298N بديلاً شائعًا يدعم التيار العالي. ستختلف تعيينات الأسلاك والدبوس نظرًا لأن L298N عبارة عن وحدة منفصلة وليست درعًا، لذلك ستحتاج إلى ضبط الكود. ملكنا البرنامج التعليمي للتحكم في محرك التيار المستمر يغطي كلا الخيارين.

كيف يقيس المستشعر بالموجات فوق الصوتية HC-SR04 المسافة؟

يرسل المستشعر دفعة قصيرة من الصوت بالموجات فوق الصوتية (40 كيلو هرتز) ويقيس المدة التي يستغرقها الصدى للعودة بعد الارتداد عن جسم ما. يقوم Arduino بعد ذلك بتحويل هذه المرة إلى مسافة بالسنتيمتر. لمزيد من التفاصيل، راجع لدينا برنامج تعليمي لمستشعر الموجات فوق الصوتية.

لماذا يقوم المؤازر بمسح المستشعر فوق الصوتي يميناً ويساراً؟

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

المزيد من العقبات في تجنب أسئلة سيارة الروبوت

ما هو الجهد والبطاريات التي يجب أن أستخدمها؟

في هذا المشروع، نستخدم 8 بطاريات قابلة لإعادة الشحن مقاس AA موصلة على التوالي بقوة 12 فولت تقريبًا. ويقبل درع المحرك L293D ما بين 5 فولت إلى 12 فولت عند مدخلات الطاقة الخاصة به وينظم الطاقة لـ Arduino. يمكنك أيضًا استخدام بطارية LiPo 2S أو 3S (7.4 فولت إلى 11.1 فولت) طالما بقي الجهد ضمن النطاق المقدر للدرع.

هل أحتاج إلى حوامل مطبوعة ثلاثية الأبعاد؟

لا، فالحوامل المطبوعة ثلاثية الأبعاد تجعل التصميم أكثر نظافة وأمانًا، ولكن يمكنك استبدالها بالغراء الساخن أو الروابط المضغوطة أو الشريط على الوجهين أو الأقواس الصغيرة على شكل حرف L من متجر الأجهزة.

كيف يمكنني تغيير سرعة الروبوت؟

يتم التحكم في سرعة المحرك بواسطة قيمة PWM التي يتم تمريرها إلى analogWrite(). في الكود، تم ضبط سرعة الانطلاق الأمامية على 100 وسرعة الدوران على 128 (من أصل 255 كحد أقصى). قم بزيادة هذه القيم لتتحرك بشكل أسرع، أو قم بتقليلها للحصول على حركة أبطأ وأكثر تحكمًا.

ماذا أفعل إذا استمر الروبوت في الاصطدام بالجدران؟

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

هل يمكنني إضافة المزيد من المستشعرات إلى هذا الروبوت؟

نعم. يمكنك إضافة مستشعرات الأشعة تحت الحمراء على الجوانب للكشف عن الحواف، ومستشعر ثانٍ بالموجات فوق الصوتية للكشف الخلفي، أو حتى مستشعر لتتبع الخط في الأسفل. ضع في اعتبارك أن كل مستشعر إضافي يحتاج إلى دبوس رقمي أو تناظري مجاني على Arduino وإضافة صغيرة إلى الكود.

المشاريع والموارد التالية الموصى بها

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

الخاتمة

لديك الآن عائق عمل وهو تجنب سيارة الروبوت المبنية باستخدام Arduino ودرع المحرك L293D ومحرك مؤازر ومستشعر الموجات فوق الصوتية HC-SR04. على طول الطريق، تعلمت كيفية توصيل محركات التيار المستمر، وقراءة بيانات المسافة بالموجات فوق الصوتية، والتحكم في جهاز مؤازر للمسح الضوئي، وكتابة منطق التنقل المستقل. ويغطي ذلك المهارات الأساسية للروبوتات: استشعار البيئة، واتخاذ القرارات، والتحكم في المحركات.

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

3 رأي حول “Building an Obstacle-Avoiding Robot Car with Arduino, L293D Motor Shield, Servo Motor, and Ultrasonic Sensor”

  1. من أفضل ماشاهدت في هذا المجال بما في ذلك من الواضحات. سهل وميسر. تحياتي لكم أستاذي العزيز. أخوكم من سلطنة عمان

    رد

أضف تعليق