لذلك، كنت ترغب في بناء سيارة روبوت تفادي العقبات التي تقود نفسها وتهرب من الجدران من تلقاء نفسها؟ يرشدك هذا البرنامج التعليمي خطوة بخطوة خلال عملية البناء بأكملها، بدءًا من تجميع الهيكل وحتى تحميل مخطط Arduino النهائي. سوف تستخدم أردوينو اونو، ان درع المحرك Arduino Motor Shield Rev3و محرك سيرفو SG90و مستشعر الموجات فوق الصوتية HC-SR04. ونتيجة لذلك، يقوم الروبوت بمسح محيطه باستخدام جهاز استشعار بالموجات فوق الصوتية المثبت على جهاز مؤازر، ويكتشف العوائق في طريقه، ويتحرك حولها تلقائيًا.
بالإضافة إلى ذلك، يعد تجنب مشروع سيارة الروبوت هذا طريقة عملية لتعلم التحكم في المحركات وتحديد المواقع المؤازرة وتكامل أجهزة الاستشعار والملاحة المستقلة الأساسية. كما أنه يربط أيضًا مفاهيم من دروس OmArTronics السابقة أساسيات برمجة الأردوينو, التحكم في المحرك المؤازر, استشعار المسافة بالموجات فوق الصوتيةو التحكم في محرك التيار المستمر مع برامج تشغيل المحرك. في النهاية، سيكون لديك روبوت يعمل على تجنب العقبات من الصفر.
📋 ملخص سريع
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 Rev3 | 1 | مطلوب | يقود ويتحكم في محركي التيار المستمر | لأنه يتم توصيله مباشرة أعلى 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 | مطلوب | مزود الطاقة للمحركات و Arduino | 8 × 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
بعد اكتمال التجميع الميكانيكي، حان الوقت لتوصيل جميع المكونات الكهربائية. يوضح مخطط الأسلاك أدناه الدائرة الكاملة. ارجع إلى جدول الأسلاك للحصول على مرجع توصيل سريع.

توصيلات محرك التيار المستمر
| المحرك | طرف توصيل درع المحرك |
|---|---|
| سلك محرك التيار المستمر الأيسر 1 | A− |
| سلك محرك التيار المستمر الأيسر 2 | A+ |
| سلك محرك التيار المستمر الأيمن 1 | B− |
| سلك محرك التيار المستمر الأيمن 2 | B+ |
توصيلات المحرك المؤازر
| سلك مؤازر | يتصل بـ |
|---|---|
| إشارة (برتقالي/أصفر) | دبوس اردوينو الرقمي 5 (على رأس درع المحرك) |
| VCC (أحمر) | دبوس 5 فولت على درع المحرك |
| GND (بني/أسود) | دبوس GND على درع المحرك |
مهم: قم بتوصيل سلك الطاقة الخاص بالمؤازرة&8217 بسلك الطاقة إلى 5 V دبوس على درع المحرك, لا دبوس 3.3 فولت. يتطلب سيرفو SG90 5 فولت ليعمل بشكل موثوق. سيؤدي استخدام 3.3 فولت إلى حدوث ارتعاش وحركة ضعيفة.
توصيلات جهاز الاستشعار بالموجات فوق الصوتية (HC-SR04)
| دبوس HC-SR04 | يتصل بـ |
|---|---|
| VCC | 5 فولت على درع المحرك |
| المثلثات | دبوس اردوينو الرقمي 7 |
| الصدى | دبوس اردوينو الرقمي 6 |
| GND | GND على درع المحرك |
توصيلات إمداد الطاقة
| سلك البطارية/سلك التبديل | يتصل بـ |
|---|---|
| موجب (من خرج المفتاح) | واقي المحرك 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
- قم بتوصيل أردوينو بجهاز الكمبيوتر الخاص بك عبر منفذ USB، ثم افتح بيئة تطوير Arduino IDE.
- ثم قم بتحميل الرسم التخطيطي أعلاه إلى أردوينو أونو.
- بعد ذلك، افصل كابل USB, أدخل البطاريات، ثم قم بتشغيل مفتاح الطاقة.
- راقب السلوك: وعلى وجه التحديد، يجب على الروبوت أن يتقدم للأمام، ثم يبطئ سرعته عند اقترابه من عائق، ويتوقف، ويمسح يسارًا ويمينًا، ثم ينعطف نحو المسار الأكثر وضوحًا.
- إذا انعطف الروبوت في الاتجاه الخاطئ، فقم بتبديل السلكين الموجودين على طرف محرك واحد (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.

الميزات الرئيسية
- يتحكم بشكل مستقل في ما يصل إلى محركين تيار مستمر (أو محرك متدرج واحد)
- يتحمل تيارًا مستمرًا يصل إلى 2 أمبير لكل قناة محرك
- يدعم تقنية تعديل عرض النبضة (PWM) للتحكم السلس في السرعة
- يوفر دبابيس فرامل مخصصة للتوقف الفوري

مرجع دبابيس لوحة حماية المحرك
| وظيفة | دبوس المحرك أ | دبوس المحرك B |
|---|---|---|
| اتجاه | 12 | 13 |
| السرعة (PWM) | 3 | 11 |
| الفرامل | 9 | 8 |
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 ميكروفاراد) عبر أطراف طاقة درع المحرك. |
| روبوت يدور في دوائر | كلا المحركين يعملان في اتجاهين متعاكسين، أو محرك واحد لا يدور | أولاً، تحقق من تعيينات دبوس الاتجاه ثم اختبر كل محرك على حدة باستخدام رسم تخطيطي بسيط قبل تشغيل الكود الكامل. |
الأسئلة المتداولة
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.
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 ذات الصلة.
- أساسيات برمجة الأردوينو - تقوية أساسك إذا كنت جديدًا على الأردوينو
- كيفية التحكم في محرك مؤازر باستخدام الأردوينو - التعمق في تحديد موضع المؤازرة وأنماط المسح
- استكشاف أجهزة الاستشعار بالموجات فوق الصوتية باستخدام الأردوينو - تعلم تقنيات قياس المسافات المتقدمة
- التحكم في محركات التيار المستمر مع L298N ودرع المحرك Arduino - فهم جسور H ومحركات المحركات H بتعمق
- إضافة تحكم Bluetooth أو Wi-Fi — combine obstacle avoidance with remote control using an HC-05 module or ESP8266 (our سيارة روبوت يتم التحكم فيها عن طريق البلوتوث shows the HC-05 side)
- إضافة وضع تتبع الخط — use IR sensors to follow a black line on the floor and switch between line-following and obstacle avoidance
- الترقية إلى هيكل رباعي الدفع الرباعي - إضافة محركين إضافيين لتحسين السحب والثبات على الأسطح الوعرة
الخاتمة
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.

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