Building an Obstacle-Avoiding Robot Car with Arduino, Motor Shield Rev3, Servo Motor, and Ultrasonic Sensor

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

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

The video loads from YouTube (Google), which may set cookies. Privacy policy

📋 ملخص سريع

Build an autonomous obstacle avoiding robot car using Arduino Uno, Arduino Motor Shield Rev3, HC-SR04 ultrasonic sensor, and an SG90 servo motor for scanning. The robot detects obstacles, scans left and right to find the clearest path, and navigates on its own. Includes complete wiring, code, and troubleshooting.

ما ستتعلمه

  • كيف يكتشف المستشعر بالموجات فوق الصوتية HC-SR04 العوائق عن طريق قياس المسافة
  • كيف يقوم محرك مؤازر بمسح مستشعر الموجات فوق الصوتية لمسح البيئة يميناً ويساراً
  • How the Arduino Motor Shield Rev3 drives two DC motors for forward, reverse, and turning movement
  • كيف يقرر كود Arduino متى يتوقف ويعكس ويختار اتجاهًا جديدًا
  • How to assemble the complete robot chassis with battery power, wiring, and 3D printed mounts
  • كيفية تحميل الكود البرمجي لتجنب العوائق واختباره وضبطه

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

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

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

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

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

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

Arduino Motor Shield Rev3 — The Muscle

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

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

The Arduino runs a continuous loop: measure distance, decide, and act. If the path ahead is clear (more than 40 cm), the robot drives forward at a steady speed while scanning. As an obstacle gets closer (between 20 cm and 40 cm), the robot gradually slows down. When the distance drops below 15 cm, the robot stops, looks left and right, and turns toward whichever side has more open space. If both sides are blocked (a dead end), the robot reverses first, then scans again and picks a new direction.

Components (bill of materials)

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

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

المكوّنالكميةمطلوب / اختياريالغرضالملاحظات
أردوينو أونو1مطلوبMain microcontroller — runs the obstacle avoidance codeتعمل أي لوحة متوافقة مع Arduino Uno
درع المحرك Arduino Motor Shield Rev31مطلوبيقود ويتحكم في محركي التيار المستمرلأنه يتم توصيله مباشرة أعلى Arduino Uno
محركات التيار المستمر (3-6 فولت)2مطلوبعجلات القيادة اليمنى واليسرىمحركات التيار المستمر القياسية الموجهة للهوايات
محرك مؤازر (SG90)1مطلوبيمسح المستشعر فوق الصوتي يميناً ويساراً للبحث عن العوائقأي جهاز مؤازر صغير 9g يعمل
مستشعر الموجات فوق الصوتية (HC-SR04)1مطلوبقياس المسافة إلى العوائق باستخدام النبضات فوق الصوتيةوحدة ذات 4 سنون: VCC، تريج، صدى الصوت، GND
أسلاك التوصيلالعديد منمطلوبجميع التوصيلات الكهربائية بين المكوناتأنواع M-M و M-F
AA Rechargeable Batteries (NiMH, 1.2 V)8مطلوبمزود الطاقة للمحركات و Arduino8 × 1.2 V = about 9.6 V total. The motor shield accepts 5–12 V and powers the Arduino directly.
حوامل البطاريات (4×AA)2مطلوبعقد البطاريات وتوصيلها على التواليWired in series to produce about 9.6 V
مفتاح التبديل1مطلوبمفتاح التشغيل/إيقاف التشغيل الرئيسيمضمن بسلك البطارية الموجب
هيكل الروبوت1مطلوبإطار لتركيب جميع المكوناتAcrylic or 3D printed platform
العجلات2مطلوبالتوصيل بمحركات التيار المستمر للحركةطابق حجم عمود المحرك
عجلة الدعم (العجلة)1مطلوبنقطة الاتصال الثالثة للاستقرارعجلة كروية أو عجلة دوارة
البراغي والصواميل والمثبتات والفواصلمتنوعمطلوبالتجميع الميكانيكيمسامير M3 شائعة في Arduino والهيكل
3D Printed Mountsمجموعةاختياريحوامل مخصصة للمحرك المؤازر والمستشعر فوق الصوتي وArduinoيمكن استبداله بالغراء الساخن أو الأربطة السحابية أو الأقواس

Step-by-step assembly

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

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

Secure both 4×AA battery holders to the underside or rear of the robot chassis using screws and nuts. Solder the output wires of the two holders in series (positive of one holder to negative of the other) so all 8 batteries connect in series for roughly 9.6 V total.

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

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

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

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

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

If you are using the 3D printed Arduino mount, heat the threaded brass inserts with a soldering iron and press them into the mounting holes. This gives you strong, reusable screw threads for securing the Arduino.

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

Secure the 3D printed mount (or standoffs) onto the chassis. Next, place the Arduino Uno onto the mount and fasten it with screws. Then carefully plug the Arduino Motor Shield Rev3 onto the Arduino, while making sure all header pins are properly aligned.

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

First, attach the 3D printed servo motor mount to the front of the chassis using double-sided tape or screws. Then, insert the SG90 servo motor into the mount and secure it. The servo horn should be oriented so the ultrasonic sensor can rotate freely from left to right.

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

Now, insert the HC-SR04 ultrasonic sensor into its 3D printed bracket (or attach with hot glue). Secure the bracket onto the servo horn using a small screw so the sensor rotates with the servo.

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

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

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

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

Wiring the robot car

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

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
Complete wiring diagram — Arduino Uno with Motor Shield Rev3, HC-SR04 ultrasonic sensor, SG90 servo motor, DC motors, and battery supply

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

المحركطرف توصيل درع المحرك
سلك محرك التيار المستمر الأيسر 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/طرف توصيل الطاقة (-)

The Arduino Motor Shield Rev3 regulates power for the Arduino through the Vin pin, so you do not need a separate USB cable once the batteries are connected. Just double-check all connections before inserting batteries, because reversed polarity can damage components.

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

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

كود أردوينو

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

رسم اردوينو كامل

/**
 * Author: Omar Draidrya
 * Date: 2024-06-09
 * 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();
أعد المسافة المقاسة؛;
}

شرح الكود

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

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

At the top of the sketch, we define which Arduino pins connect to each component. Motor A (left) uses pins 12 (direction), 3 (speed/PWM), and 9 (brake). Motor B (right) uses pins 13, 11, and 8. The ultrasonic sensor trigger is on pin 7, echo on pin 6, and the servo signal is on pin 5. These pin numbers are set by the Arduino Motor Shield Rev3, so they are not arbitrary.

قياس المسافة

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

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

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

How the robot detects obstacles and slows down

داخل المبنى الرئيسي حلقة(), the robot measures the distance ahead on every cycle. If the distance is between 20 cm and 40 cm, the robot does not stop. Instead, it gradually reduces speed using the map() كلما اقترب العائق، تباطأت حركة الروبوت. وهذا يخلق تباطؤًا سلسًا بدلًا من التوقف المفاجئ.

Scan logic

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

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

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

Servo sweep while driving

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

Upload, test, and observe

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

How to tune the robot

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

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

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

Understanding the Arduino Motor Shield Rev3

The Arduino Motor Shield Rev3 is a plug-and-play board that stacks directly on top of the Arduino Uno. It simplifies motor control by providing screw terminals for motors and dedicated control pins for direction, speed, and braking. Here is a quick overview of its features and connections.

Arduino Motor Shield Rev3 top view with screw terminals for motor A, motor B and Vin, the L298P driver chip and the header pins for the Uno
Arduino Motor Shield Rev3 — screw terminals for motors A and B and the Vin power input on the left, L298P driver in the middle

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

  • يتحكم بشكل مستقل في ما يصل إلى محركين تيار مستمر (أو محرك متدرج واحد)
  • يتحمل تيارًا مستمرًا يصل إلى 2 أمبير لكل قناة محرك
  • يدعم تقنية تعديل عرض النبضة (PWM) للتحكم السلس في السرعة
  • يوفر دبابيس فرامل مخصصة للتوقف الفوري
PWM waveforms for analogWrite values 255, 0, 64 and 128 and the resulting motor speed
PWM speed control: analogWrite() sets the duty cycle — 255 is full speed, 0 stops the motor, 64 and 128 run it slower

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

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

For more on motor drivers and how H-bridges work, see the full tutorial: التحكم في محركات التيار المستمر باستخدام جسر H المزدوج L298N ودرع محرك أردوينو.

استكشاف الأخطاء وإصلاحها

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

Common problems and solutions

مشكلةالسبب المحتملحل
الروبوت لا يتحرك على الإطلاقانقطاع التيار الكهربائي، أو وجود أسلاك مفكوكة، أو عدم تحرير الفراملFirst, check the power switch, battery voltage (should be ~9.6 V with charged NiMH cells), and verify motor terminal connections. Make sure the code uploads without errors.
محرك واحد فقط يعملأحد المحركات غير موصول، أو سلك مقطوعبدلاً من ذلك، قم بتبديل أسلاك المحرك العامل إلى الطرف الآخر للاختبار. تحقق من وصلات اللحام على المحرك.
يتحرك الروبوت في اتجاه واحد فقطتم تبديل أسلاك المحرك أو توصيل دبابيس التوجيه بشكل غير صحيح.ببساطة قم بتبديل السلكين الموجودين على طرف المحرك الذي يعمل في الاتجاه الخاطئ (A+ و A−، أو B+ و B−).
يعطي مستشعر الموجات فوق الصوتية قراءات غير مستقرة أو معدومة.الأسلاك غير المحكمة، أو الدبابيس الخاطئة، أو وجود جسم قريب جدًا / بعيد جدًاأولاً، تأكد من توصيلات Trig (الطرف 7) وEcho (الطرف 6). يتراوح نطاق HC-SR04 تقريبًا من 2 سم إلى 400 سم. أضف تأخيرًا بسيطًا إذا كانت القراءات متذبذبة.

Sensor and power issues

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

الأسئلة المتداولة

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

The Arduino Motor Shield Rev3 plugs directly onto the Arduino Uno header and also fits an Arduino Mega. It does not fit a Nano. If you want to use a Nano, use an L298N module instead; see our L298N motor driver tutorial.

Can I use an L298N motor driver instead of the Arduino Motor Shield Rev3?

Yes. The L298N is a common alternative that supports higher current. The wiring and pin assignments will differ since the L298N is a separate module rather than a shield, so you will need to adjust the code. Our DC motor control tutorial covers both options.

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

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

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

For this project, we use 8 AA rechargeable batteries wired in series for roughly 12 V. The Arduino Motor Shield Rev3 accepts 5 V to 12 V on its power input and regulates power for the Arduino. You can also use a 2S or 3S LiPo battery (7.4 V to 11.1 V) as long as the voltage stays within the shield’s rated range.

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

Motor speed is controlled by the PWM value passed to analogWrite(). In the code, the forward cruising speed is set to 100 and the turning speed to 128 (out of a maximum of 255). Increase these values to go faster, or decrease them for slower, more controlled movement.

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

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

More questions

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

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

الخاتمة

You now have a working obstacle avoiding robot car built with an Arduino, an Arduino Motor Shield Rev3, a servo motor, and an HC-SR04 ultrasonic sensor. Along the way, you learned how to wire DC motors, read ultrasonic distance data, control a servo for scanning, and write autonomous navigation logic. That covers the core skills of robotics: sensing the environment, making decisions, and controlling actuators.

From here, you can expand the robot with additional sensors, add wireless control, or tweak the obstacle avoidance algorithm for trickier environments.

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

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

    رد

أضف تعليق