بناء سيارة الروبوت التي يتم التحكم فيها عن طريق البلوتوث OmObi باستخدام Arduino وHC-05 ودرع محرك Adafruit

📋 ملخص سريع

قم ببناء OmObi، وهي سيارة روبوت يتم التحكم فيها عن طريق البلوتوث باستخدام Arduino Uno، ووحدة Bluetooth HC-05، وAdafruit Motor Shield V1. يغطي هذا البرنامج التعليمي تصميم الهيكل المطبوع ثلاثي الأبعاد، وأسلاك المحرك، وإقران Bluetooth، والتحكم في الهاتف الذكي باستخدام تطبيق MIT App Inventor. قم بالقيادة للأمام والخلف والدوران وإيقاف الروبوت الخاص بك لاسلكيًا.

 هل سبق لك أن أردت بناء سيارة روبوت يمكنك قيادتها من هاتفك؟ في هذا البرنامج التعليمي للسيارة الروبوتية OmObi، سأرشدك خلال عملية بناء سيارة روبوت يتم التحكم فيها عن طريق البلوتوث باستخدام Arduino Uno، ووحدة Bluetooth HC-05، وAdafruit Motor Shield V1.2. إنه مشروع Arduino رائع للسيارة يتم التحكم فيه عن طريق البلوتوث سواء كنت بدأت للتو أو لديك بالفعل بعض الخبرة.

OmObi Bluetooth controlled robot car with four yellow DC motors, Arduino Uno, and Adafruit Motor Shield assembled and ready for wireless control

سنغطي كل شيء بدءًا من تجميع هيكل الدفع الرباعي وتوصيل المحركات وحتى تحميل كود Arduino وإنشاء تطبيق تحكم Android باستخدام MIT App Inventor. بمجرد الانتهاء، ستستجيب السيارة الآلية الخاصة بك لأوامر الأمام والخلف واليسار واليمين والتوقف المرسلة لاسلكيًا من هاتفك الذكي.

إذا كنت جديدًا في استخدام تقنية Bluetooth مع Arduino، ففكر في قراءة موقعنا استكمال البرنامج التعليمي HC-05/HC-06 Arduino Bluetooth أولاً. للحصول على مقدمة عامة عن برمجة Arduino، راجع موقعنا دليل أساسيات برمجة الأردوينو.

ما ستتعلمه

بحلول الوقت الذي تنتهي فيه من هذا البرنامج التعليمي للسيارة الروبوتية OmObi، ستعرف كيفية القيام بما يلي:

  • قم ببناء هيكل السيارة الروبوتية OmObi ذات الدفع الرباعي باستخدام إطار مطبوع ثلاثي الأبعاد وحوامل محرك
  • افهم كيف يتحكم Adafruit Motor Shield في أربعة محركات تعمل بالتيار المستمر في وقت واحد
  • قم بتوصيل وحدة Bluetooth HC-05 إلى Arduino للاتصال التسلسلي اللاسلكي
  • اكتب كود Arduino الذي يفسر أوامر Bluetooth ذات الحرف الواحد ويشغل المحركات وفقًا لذلك
  • أنشئ تطبيقًا بسيطًا للتحكم في Android باستخدام MIT App Inventor باستخدام أزرار الاتجاهات
  • اختبار وضبط واستكشاف الأخطاء وإصلاحها للسيارة الروبوتية النهائية التي يتم التحكم فيها عن طريق البلوتوث

كيف تعمل سيارة OmObi الروبوتية

قبل البدء في البناء، من المفيد أن تفهم كيفية تناسب جميع الأجزاء معًا. هناك أربعة مكونات رئيسية في مشروع السيارة الروبوتية Adafruit Motor Shield: هاتف Android، ووحدة Bluetooth HC-05، وArduino Uno، وAdafruit Motor Shield مع أربعة محركات تعمل بالتيار المستمر.

إن هاتف أندرويد يدير تطبيقًا مخصصًا تم إنشاؤه باستخدام MIT App Inventor. عندما تضغط على زر اتجاه (للأمام أو للخلف أو لليسار أو لليمين)، يرسل التطبيق أمرًا بحرف واحد (F أو B أو L أو R أو S للإيقاف) عبر البلوتوث.

بعد ذلك، فإن وحدة البلوتوث HC-05 يتلقى هذا الأمر لاسلكيًا ويمرره إلى Arduino من خلال الاتصال التسلسلي على الأطراف 0 (RX) و 1 (TX). بشكل أساسي، يعمل HC-05 كجسر تسلسلي لاسلكي بين الهاتف وArduino. لمعرفة المزيد حول كيفية عمل وحدتي HC-05 وHC-06، راجع موقعنا استكمال البرنامج التعليمي HC-05/HC-06 Arduino Bluetooth.

ثم، فإن أردوينو أونو يقرأ الحرف الوارد من المخزن المؤقت التسلسلي. بناءً على الأمر المستلم، فإنه يستدعي وظيفة الحركة المناسبة (للأمام، أو للخلف، أو TurnLeft، أو TurnRight، أو Stop).

وأخيرا، درع المحرك Adafruit Motor Shield V1.2 يقع أعلى Arduino ويحرك أربعة محركات DC من خلال أطراف الإخراج M1 و M2 و M3 و M4. يستخدم الدرع مكتبة AFMotor للتحكم في اتجاه المحرك (للأمام، للخلف، للتحرير) والسرعة (0 إلى 255). في هذا المشروع، تتصل محركات الجانب الأيسر بـ M1 وM2، بينما تتصل محركات الجانب الأيمن بـ M3 وM4. بالنسبة للدوران، يتحرك أحد الجانبين للأمام بينما يعمل الجانب الآخر للخلف، مما يخلق دورانًا على شكل دبابة.

لإلقاء نظرة أعمق على مبادئ قيادة السيارات، راجع موقعنا دورة تعليم قيادة المحرك L298N باستخدام الاردوينو.

أكمل قائمة المواد الخاصة بسيارة OmObi Robot

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

المكوّن الكمية هل هذا مطلوب؟ الغرض الملاحظات
أردوينو أونو 1 مطلوب متحكم رئيسي تعمل أي لوحة متوافقة مع Uno
درع المحرك Adafruit Motor Shield V1.2 1 مطلوب يشغل أربعة محركات تعمل بالتيار المستمر مداخن مباشرة على رأس اردوينو
وحدة البلوتوث HC-05 1 مطلوب الاتصال التسلسلي اللاسلكي مع الهاتف يعمل HC-06 أيضًا (التابع فقط)
محركات التيار المستمر مع علب التروس 4 مطلوب قيادة العجلات الأربع عادة محركات ذات تروس 3-6 فولت
العجلات 4 مطلوب نعلق على مهاوي المحرك تطابق مع حجم عمود علبة التروس الخاصة بك
هيكل مطبوع ثلاثي الأبعاد 1 مطلوب إطار قاعدة سيارة روبوت يعمل أيضًا زجاج شبكي أو لوح أكريليك
حوامل محرك مطبوعة ثلاثية الأبعاد 4 اختياري تأمين المحركات إلى الهيكل يمكن استبداله بأقواس معدنية على شكل حرف L
حامل اردوينو مطبوع ثلاثي الأبعاد 1 اختياري جبل اردوينو على الهيكل الشريط على الوجهين أو المواجهات تعمل أيضًا
حزمة البطارية (4xAA أو ما شابه ذلك) 1 مطلوب محركات القوى واردوينو يوصى باستخدام حزمة 6 فولت؛ استخدم بطاريات جديدة
أسلاك التوصيل العديد من مطلوب قم بتوصيل HC-05 بالاردوينو استخدم أسلاك التوصيل ذات الرؤوس الدبوسية لـ HC-05
مسامير، صواميل، مواجهات متنوع مطلوب التجميع الميكانيكي حجم M3 شائع
الهاتف الذكي 1 مطلوب يقوم بتشغيل تطبيق التحكم MIT App Inventor يجب أن يدعم تقنية البلوتوث الكلاسيكية

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

أول شيء عليك القيام به عند بناء سيارة OmObi الروبوتية هو تركيب محركات وعجلات التيار المستمر على الهيكل.

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

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

تركيب العجلات

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

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

مع وجود المحركات في مكانها، قم الآن بتثبيت Arduino Uno وAdafruit Motor Shield في الهيكل.

تأمين حامل اردوينو

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

ضع اردوينو والدرع

بعد ذلك، قم بتثبيت Arduino Uno في الحامل وقم بتثبيته بالمسامير. ثم ضع Adafruit Motor Shield أعلى Arduino، واضغط عليه لأسفل برفق حتى تتم محاذاة جميع دبابيس الرأس بشكل صحيح ومستقرة بالكامل. يجب أن يكون الدرع مستويًا دون أي محاذاة خاطئة للدبابيس.

الخطوة 3: توصيل المكونات

إن الحصول على الأسلاك بشكل صحيح أمر مهم للغاية لأن الاتصال الخاطئ الوحيد قد يعني أن المحركات تدور بطريقة خاطئة أو أن تقنية Bluetooth لا تعمل على الإطلاق. يغطي هذا القسم توصيلات المحرك، وأسلاك Bluetooth HC-05، وتوصيلات الطاقة. استخدم مخطط الأسلاك أدناه كمرجع.

Wiring diagram for the OmObi Bluetooth robot car showing four DC motors connected to Adafruit Motor Shield terminals M1 through M4, HC-05 Bluetooth module wired to Arduino pins 0 and 1, and battery pack connected to the motor shield power terminals

اتصالات المحرك

المحرك محطة الدرع الموقف على السيارة
المحرك 1 M1 الجانب الأيسر (الأمامي أو الخلفي)
المحرك 2 M2 الجانب الأيسر (الأمامي أو الخلفي)
المحرك 3 M3 الجانب الأيمن (الأمامي أو الخلفي)
المحرك 4 M4 الجانب الأيمن (الأمامي أو الخلفي)

لتوصيل المحركات، قم بتوصيل المحركين الموجودين على الجانب الأيسر بالمحطات الطرفية M1 وM2، والمحركين الموجودين على الجانب الأيمن بالمحطات الطرفية M3 وM4. يحتوي كل محرك على سلكين؛ أدخلها في أطراف البراغي الموجودة على الدرع وقم بإحكام ربطها بشكل آمن.

اتصالات وحدة بلوتوث HC-05

دبوس HC-05 دبوس الأردوينو الملاحظات
VCC 5V يعمل على تشغيل وحدة HC-05
GND GND أرضية مشتركة
TXD آر إكس (دبوس 0) ينقل HC-05 البيانات إلى Arduino
RXD تكساس (دبوس 1) اردوينو ينقل البيانات إلى HC-05

هام: تسلسل الأجهزة (دبابيس 0/1) وتعارضات التحميل

تحذير: في هذا المشروع، يتم توصيل HC-05 بمنفذي Arduino 0 (RX) و1 (TX). هذه هي نفس المسامير التي يستخدمها اتصال USB التسلسلي لتحميل الرسومات واتصالات المراقبة التسلسلية. وبسبب هذا، يجب عليك افصل وحدة HC-05 (على الأقل أسلاك RX/TX) في كل مرة تقوم فيها بتحميل كود جديد إلى Arduino. إذا ظل HC-05 متصلاً أثناء التحميل، فسوف يفشل التحميل لأن وحدة Bluetooth تتداخل مع بيانات USB التسلسلية. بمجرد الانتهاء من التحميل، أعد توصيل HC-05 وأعد ضبط Arduino.

علاوة على ذلك، لن تتمكن من استخدام Serial Monitor لتصحيح الأخطاء أثناء توصيل HC-05 بالدبابيس 0/1. ومع ذلك، إذا كنت بحاجة إلى Bluetooth وSerial Monitor في وقت واحد، فاستخدم مكتبة SoftwareSerial على منافذ مختلفة (على سبيل المثال، المنافذ 2 و3). لمزيد من التفاصيل حول الأسلاك واستخدام وحدة HC-05، راجع موقعنا HC-05/HC-06 دروس البلوتوث للاردوينو.

اتصالات الطاقة

للحصول على الطاقة، قم بتوصيل الأطراف الموجبة والسالبة لحزمة البطارية بأطراف إدخال الطاقة الموجودة على Adafruit Motor Shield. ونتيجة لذلك، يقوم الدرع بتمرير الطاقة إلى المحركات ويمكنه أيضًا تشغيل Arduino من خلال المنظم الموجود على اللوحة. تأكد من أن التوصيلات الأرضية بين حزمة البطارية والدرع والاردوينو كلها مشتركة. استخدم بطاريات جديدة (يوصى بـ 6 فولت) للحصول على أداء محرك موثوق.

الخطوة 4: تشغيل السيارة التي تعمل بتقنية البلوتوث

بالنسبة لمشروع السيارة الروبوتية OmObi، تعمل حزمة بطارية 4xAA (إجمالي 6 فولت) بشكل جيد ويسهل العثور عليها. قم بتوصيل حزمة البطارية بمحطات الطاقة الخارجية الموجودة على Adafruit Motor Shield. من هناك، يقوم الدرع بتوزيع الطاقة على المحركات ويمكنه إمداد Arduino من خلال وصلة الطاقة الخاصة به.

إذا كنت تستخدم مفتاح الطاقة، فتأكد من سهولة الوصول إليه حتى تتمكن من تشغيل السيارة وإيقاف تشغيلها بسرعة. تجنب استخدام بطاريات 9 فولت هنا لأنها لا تستطيع توفير تيار كافٍ لأربعة محركات تعمل بالتيار المستمر تحت الحمل. إذا كنت تريد وقت تشغيل أطول أو عزم دوران أكبر، فإن حزمة Li-ion القابلة لإعادة الشحن مع منظم الجهد هي الخيار الأفضل.

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

يتلقى رسم Arduino أدناه أوامر ذات حرف واحد من وحدة Bluetooth HC-05 عبر الاتصال التسلسلي للأجهزة ويقوم بتشغيل محركات التيار المستمر الأربعة وفقًا لذلك. هذا هو الرمز الذي يجعل سيارتك الروبوتية التي يتم التحكم فيها عن طريق البلوتوث تعمل.

إذا كنت تريد مقدمة أوسع للتحكم في محركات التيار المستمر باستخدام Arduino، فراجع البرنامج التعليمي الخاص بنا التحكم في محرك التيار المستمر باستخدام برنامج التشغيل L298N و Arduino Motor Shield.

مهم: قبل تحميل هذا المخطط، افصل وحدة HC-05 عن الأطراف 0 و1. أعد الاتصال بعد اكتمال التحميل، ثم أعد ضبط Arduino.

مستودع GitHub: التطبيق والرمز

/**
 * Author: Omar Draidrya
 * Date: 2024/07/03
 * Bluetooth-controlled 4WD robot car (OmObi) using Adafruit Motor Shield V1.2 and HC-05.
 * Receives single-character commands (F/B/L/R/S) via serial from the HC-05
 * Bluetooth module and drives four DC motors on terminals M1-M4 accordingly.
 */
#include <AFMotor.h>
AF_DCMotor motor1(1);  // Create motor #1 using M1 connector
AF_DCMotor motor2(2);  // Create motor #2 using M2 connector
AF_DCMotor motor3(3);  // Create motor #3 using M3 connector
AF_DCMotor motor4(4);  // Create motor #4 using M4 connector

char command;

void setup() {
  Serial.begin(9600);     // Start serial communication at 9600 baud rate
  motor1.setSpeed(255);   // Set initial motor speeds
  motor2.setSpeed(255);
  motor3.setSpeed(255);
  motor4.setSpeed(255);
}

void loop() {
  if (Serial.available() > 0) {
    command = Serial.read();  // Read the incoming command
    if (command == 'F') { forward(); }
    else if (command == 'B') { backward(); }
    else if (command == 'L') { turnLeft(); }
    else if (command == 'R') { turnRight(); }
    else if (command == 'S') { stop(); }
  }
}

void forward() {
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
}

void backward() {
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
}

void turnLeft() {
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
  motor3.run(FORWARD);
  motor4.run(FORWARD);
}

void turnRight() {
  motor1.run(FORWARD);
  motor2.run(FORWARD);
  motor3.run(BACKWARD);
  motor4.run(BACKWARD);
}

void stop() {
  motor1.run(RELEASE);
  motor2.run(RELEASE);
  motor3.run(RELEASE);
  motor4.run(RELEASE);
}

شرح الكود: مكتبة AFMotor وإعداد المحرك

يبدأ الكود بتضمين AFMotor.h، وهي مكتبة Adafruit Motor Shield. تمنحك هذه المكتبة طريقة مباشرة للتحكم في محركات التيار المستمر المتصلة بالدرع. بعد ذلك، يتم إنشاء أربعة كائنات حركية: المحرك 1 (1) إلى المحرك 4 (4)، المطابق للأطراف من M1 إلى M4 على الدرع. أثناء الإعداد ()، تتم تهيئة الاتصال التسلسلي عند 9600 باود (مطابقة معدل الباود الافتراضي HC-05)، ويتم ضبط جميع المحركات الأربعة على السرعة الكاملة (255 من 255).

شرح الكود: رسم الخرائط الحركية (M1 إلى M4)

في هذا الإعداد، يكون المحركان 1 و2 (M1، M2) على الجانب الأيسر، والمحركات 3 و4 (M3، M4) على الجانب الأيمن. هذا التعيين مهم لأن منطق الانعطاف يعتمد على قيادة الجانبين الأيسر والأيمن بشكل مستقل. إذا انعطفت سيارتك في الاتجاه الخاطئ أو تحركت للخلف عندما تتوقع الأمام، فيمكنك تبديل توصيلات المحرك في أطراف الدرع أو تبديل ثوابت FORWARD/BACKWARD في الكود.

شرح الكود: بروتوكول أوامر البلوتوث

بروتوكول الأمر بسيط: يرسل التطبيق حرف ASCII واحدًا، ويقرأه Arduino من المخزن المؤقت التسلسلي في الحلقة (). هناك خمسة أوامر: F (للأمام)، B (للخلف)، L (الاتجاه لليسار)، R (الاتجاه لليمين)، وS (التوقف). نظرًا لأن كل أمر يتكون من حرف واحد فقط، فإن وقت الاستجابة يكون سريعًا بدرجة كافية للتحكم في الوقت الفعلي.

شرح الكود: وظائف الحركة

عند الاتصال، يقوم الدالةward()‎ بتشغيل جميع المحركات الأربعة في الاتجاه FORWARD، بحيث تسير السيارة للأمام بشكل مستقيم. وبالمثل، فإن back()‎ تقوم بتشغيل جميع المحركات الأربعة في BACKWARD. يقوم TurnLeft() بتشغيل المحركات اليسرى (M1، M2) للخلف والمحركات اليمنى (M3، M4) للأمام، مما يؤدي إلى إنشاء دوران يسارًا على شكل دبابة. يقوم TurnRight() بالعكس: المحركات اليسرى للأمام، والمحركات اليمنى للخلف. يستدعي الدالة stop()‎ RELEASE على جميع المحركات، مما يؤدي إلى قطع الطاقة والسماح للسيارة بالتوقف.

كيفية تغيير السرعة

يتم ضبط سرعة المحرك في الإعداد () باستخدام motor1.setSpeed(255). تتراوح القيمة من 0 (متوقف) إلى 255 (السرعة الكاملة). إذا كنت تريد إبطاء السيارة، فما عليك سوى تقليل هذه القيمة. على سبيل المثال، 150 يعطي سرعة 60 بالمائة تقريبًا. يمكنك أيضًا ضبط سرعات مختلفة للانعطاف مقابل القيادة المستقيمة عن طريق استدعاء setSpeed() داخل وظائف الحركة.

كيفية اختبار الكود بأمان

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

الخطوة 6: تطوير تطبيق أندرويد للتحكم بالبلوتوث

بالنسبة لتطبيق الهاتف، سنستخدم MIT App Inventor لإنشاء تطبيق Android بسيط يتصل بوحدة HC-05 عبر البلوتوث ويرسل أوامر توجيهية إلى Arduino. إن MIT App Inventor عبارة عن أداة برمجة مرئية مجانية تعتمد على المتصفح، لذلك لا تحتاج إلى كتابة أي كود Java أو Kotlin لإنشاء تطبيق السيارة الروبوتية HC-05.

لفهم أساسيات برمجة Arduino التي يتواصل معها التطبيق، راجع موقعنا دليل أساسيات برمجة الأردوينو.

التسجيل وإنشاء المشروع

انتقل إلى مخترع تطبيقات معهد ماساتشوستس للتكنولوجيا وقم بتسجيل الدخول باستخدام حساب Google الخاص بك. ثم انقر فوق "بدء مشروع جديد" وقم بتسميته "RobotCarControl".

تصميم واجهة المستخدم

في طريقة عرض المصمم، تحتاج إلى إضافة المكونات التالية إلى شاشة التطبيق الخاص بك:

  • ListPicker - اضبط النص على "تحديد جهاز Bluetooth". يتيح ذلك للمستخدم اختيار جهاز Bluetooth المقترن للاتصال به.
  • التسمية (التسمية 1) – إضافة مكون التسمية لعرض حالة الاتصال. ستقوم الكتل بتعيين هذه التسمية على "متصل" أو "غير متصل" اعتمادًا على نتيجة اتصال Bluetooth. تتم الإشارة إلى هذه التسمية باسم Label1 في رمز الكتلة أدناه، لذا تأكد من إضافتها إلى الواجهة الخاصة بك.
  • عميل بلوتوث - اسحب هذا من لوحة الاتصال. وهو مكون غير مرئي يتعامل مع اتصالات Bluetooth.
  • أربعة أزرار - إضافة أزرار تسمى ButtonForward، ButtonBackward، ButtonLeft، و ButtonRight. قم بتعيين النص والألوان الخاصة بهم للإشارة بوضوح إلى الاتجاهات.

برمجة الكتل

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

عندما ListPicker1.BeforePicking
  اضبط ListPicker1.Elements على BluetoothClient1.AddressesAndNames

عندما ListPicker1.AfterPicking
  في حالة الاتصال بـ BluetoothClient1.Connect عنوان ListPicker1.Selection
    ثم قم بتعيين Label1.Text على "متصل"
    وإلا قم بتعيين Label1.Text على "غير متصل"

عندما ButtonForward.TouchDown
  إذا كان BluetoothClient1.IsConnected
    استدعاء BluetoothClient1.SendText النص "F"

عندما ButtonBackward.TouchDown
  إذا كان BluetoothClient1.IsConnected
    استدعاء BluetoothClient1.SendText النص "B"

عندما ButtonLeft.TouchDown
  إذا كان BluetoothClient1.IsConnected
    استدعاء BluetoothClient1.SendText النص "L"

عندما ButtonRight.TouchDown
  إذا كان BluetoothClient1.IsConnected
    استدعاء BluetoothClient1.SendText النص "R"

عندما ButtonForward.TouchUp
  إذا كان BluetoothClient1.IsConnected
    استدعاء BluetoothClient1.SendText النص "S"

عندما ButtonBackward.TouchUp
  إذا كان BluetoothClient1.IsConnected
    استدعاء BluetoothClient1.SendText النص "S"

عندما ButtonLeft.TouchUp
  إذا كان BluetoothClient1.IsConnected
    استدعاء BluetoothClient1.SendText النص "S"

عندما ButtonRight.TouchUp
  إذا كان BluetoothClient1.IsConnected
    استدعاء BluetoothClient1.SendText النص "S"
MIT App Inventor blocks editor screenshot showing the Bluetooth connection logic, ListPicker event handlers, and TouchDown/TouchUp blocks for the four directional buttons that send F, B, L, R, and S commands

فهم منطق الكتلة

إليك كيفية عمل كل كتلة. منتقي القائمة.قبل الانتقاء: عندما ينقر المستخدم على ListPicker، فإنه يقوم بملء القائمة بجميع عناوين وأسماء أجهزة Bluetooth المقترنة من BluetoothClient1.AddressesAndNames.

ثم، ListPicker.AfterPicking: بعد أن يحدد المستخدم جهازًا، يحاول التطبيق الاتصال باستخدام BluetoothClient1.Connect بالعنوان المحدد. في حالة النجاح، يتم تعيين Label1.Text على "متصل"؛ وإلا فإنه يظهر "غير متصل". ولهذا السبب يجب أن يكون مكون Label1 موجودًا في الواجهة الخاصة بك.

بالنسبة لضوابط الحركة أحداث اللمس: عندما يضغط المستخدم (يلمس) زر الاتجاه، يرسل التطبيق حرف الأمر المقابل (F أو B أو L أو R) عبر BluetoothClient1.SendText، ولكن فقط إذا كان اتصال Bluetooth نشطًا.

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

الخطوة 7: توصيل الروبوت واختباره

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

قم بإقران HC-05

أولاً، قم بتشغيل Bluetooth على هاتفك الذكي الذي يعمل بنظام Android وانتقل إلى إعدادات Bluetooth. ثم ابحث عن أجهزة جديدة. سيظهر HC-05 باسم "HC-05" في القائمة. قم بإقرانه باستخدام رمز PIN الافتراضي 1234 (أو 0000 في بعض الوحدات). ما عليك سوى الاقتران مرة واحدة لأن الهاتف سيتذكر الجهاز بعد ذلك.

الاتصال والقيادة

بمجرد الاقتران، افتح تطبيق RobotCarControl على هاتفك. اضغط على منتقي القائمة "تحديد جهاز Bluetooth" واختر HC-05 من القائمة. يجب أن يعرض Label1 "متصل". بعد ذلك، اضغط على أزرار الاتجاهات لقيادة السيارة. عند هذه النقطة، يجب أن يتحرك الروبوت للأمام، للخلف، للانعطاف يسارًا، يمينًا، ويتوقف عند تحرير الأزرار.

كيفية اختبار وضبط سيارة OmObi Robot

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

اختبار اتجاه واحد في وقت واحد. للبدء، أرسل الأمر F فقط وتأكد من دوران العجلات الأربع للأمام. ثم اختبر B وL وR بشكل فردي.

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

تقليل السرعة خلال الاختبارات الأولى. بدلاً من 255، حاول setSpeed(120). ونتيجة لذلك، تحصل على مزيد من وقت رد الفعل وتمنع وقوع حوادث أثناء الاختبار الداخلي.

إصلاح اتجاه الدوران الخاطئ. إذا قام "اليسار" بتحويل السيارة إلى اليمين، فقم بتبديل تعيينات المحرك الأيسر والأيمن في الكود (قم بتغيير منطق M1/M2 إلى M3/M4 والعكس صحيح)، أو قم بتبديل أسلاك المحرك فعليًا.

تحسين الاستجابة. إذا شعرت أن السيارة بطيئة أو متأخرة، فتأكد أولاً من أن معدل الباود HC-05 يطابق معدل الباود التسلسلي لـ Arduino (9600). بالإضافة إلى ذلك، تأكد من أن البطاريات جديدة لأن الجهد المنخفض يسبب بطء استجابة المحرك.

استكشاف المشكلات الشائعة وإصلاحها

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

أزواج HC-05 لكن السيارة لا تتحرك

تم إنشاء اتصال Bluetooth، لكن المحركات لا تستجيب. أولاً، تأكد من توصيل طرف HC-05 TXD بـ Arduino RX (pin 0) و RXD إلى Arduino TX (pin 1). تأكد أيضًا من أن معدل البث بالباود في كود Arduino الخاص بك يطابق الإعداد الافتراضي HC-05 (9600). علاوة على ذلك، تأكد من تثبيت درع المحرك بشكل صحيح على Arduino ومن توصيل حزمة البطارية وتشغيلها.

فشل تحميل Arduino (تعارض RX/TX)

إذا حصلت على أخطاء في التحميل مثل "avrdude: stk500_getsync(): not in sync"، فمن المحتمل أن يكون HC-05 لا يزال متصلاً بالطرفين 0 و1. افصل أسلاك HC-05 RX وTX، وقم بتحميل المخطط، ثم أعد توصيلهما. هذه هي المشكلة الأكثر شيوعًا عند استخدام الأجهزة التسلسلية مع وحدة Bluetooth.

يتحرك الروبوت في الاتجاه الخاطئ

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

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

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

يتصل التطبيق ولكن الأزرار لا تفعل شيئًا

أولاً، تأكد من أن التطبيق يرسل الأحرف الصحيحة (F، B، L، R، S). في MIT App Inventor، تأكد أيضًا من ربط مكون BluetoothClient بشكل صحيح في الكتل وأن SendText يستخدم الأحرف الكبيرة الدقيقة المتوقعة بواسطة كود Arduino. بالإضافة إلى ذلك، تأكد من أن Label1 يعرض "متصل" بعد الاقتران.

المحركات ضعيفة أو غير متناسقة

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

يستمر الروبوت في التحرك بعد تحرير الزر

وهذا يعني أن أمر الإيقاف (S) لا يتم إرساله أو استلامه عندما ترفع إصبعك. في التطبيق، تأكد من أن كل زر يحتوي على كتلة TouchDown (لإرسال أمر الحركة) وكتلة TouchUp (لإرسال "S"). على وجه الخصوص، إذا كانت كتل TouchUp مفقودة، فلن يتلقى Arduino أبدًا أمر الإيقاف.

طاقة البطارية غير كافية

إذا تم إعادة ضبط Arduino عند بدء تشغيل المحركات، أو إذا كانت السيارة تتصرف بشكل غير منتظم، فمن المحتمل أن حزمة البطارية لا يمكنها توفير التيار الكافي. بدلاً من ذلك، استخدم حزمة مصنفة لإخراج مستمر لا يقل عن 2 أمبير. على سبيل المثال، تعمل بطاريات NiMH AA القابلة لإعادة الشحن أو حزمة 2S Li-ion المزودة بنظام BMS بشكل جيد للسيارات الآلية ذات الأربعة محركات.

الأسئلة الشائعة (FAQ)

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

أسئلة الأجهزة والتوافق

هل يمكنني استخدام وحدة HC-06 بدلاً من HC-05؟

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

ما هو تطبيق البلوتوث الذي يمكنني استخدامه للتحكم في السيارة الآلية؟

يستخدم هذا البرنامج التعليمي تطبيقًا مخصصًا تم إنشاؤه باستخدام MIT App Inventor، والذي يمنحك التحكم الكامل في الواجهة وتعيين الأوامر. وبدلاً من ذلك، يمكنك استخدام تطبيقات Bluetooth التسلسلية العامة من متجر Google Play، ولكنك ستحتاج إلى كتابة أحرف الأوامر (F، B، L، R، S) يدويًا بدلاً من الضغط على الأزرار.

هل يمكنني التحكم في سيارة OmObi الروبوتية من هاتف iPhone؟

ليس مباشرة. يستخدم HC-05 تقنية Bluetooth Classic (SPP)، والتي لا يدعمها iOS لتطبيقات الطرف الثالث. للتحكم في السيارة من جهاز iPhone، ستحتاج إلى استبدال HC-05 بوحدة BLE (Bluetooth منخفضة الطاقة) مثل HM-10 أو استخدام ESP32 مع دعم BLE، وتعديل التطبيق وفقًا لذلك.

لماذا يتم إعادة ضبط جهاز Arduino الخاص بي عند بدء تشغيل المحركات؟

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

هل يمكنني استخدام Adafruit Motor Shield V2 بدلاً من V1؟

نعم، ولكن مكتبة التعليمات البرمجية مختلفة. يستخدم درع V2 مكتبة Adafruit_MotorShield (المعتمدة على I2C) بدلاً من AFMotor.h. يتشابه تخطيط الأسلاك وطرف المحرك، لكنك ستحتاج إلى إعادة كتابة أجزاء تهيئة المحرك والتحكم في الكود لاستخدام واجهة برمجة تطبيقات مكتبة V2.

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

إلى أي مدى يمكن أن يصل اتصال البلوتوث؟

يبلغ مدى نموذج HC-05 حوالي 10 أمتار (30 قدمًا) في الهواء الطلق. يمكن أن تؤدي الجدران والتداخل من أجهزة توجيه Wi-Fi وأجهزة Bluetooth الأخرى إلى تقليل هذا النطاق. بالنسبة لمعظم مشاريع سيارات الروبوت الداخلية، فإن 10 أمتار أكثر من كافية.

كيف يمكنني إضافة التحكم في السرعة من التطبيق؟

يمكنك إضافة شريط تمرير في MIT App Inventor يرسل قيمة السرعة (على سبيل المثال، من 0 إلى 255) كأمر منفصل. في كود Arduino، اقرأ هذه القيمة واستدعاء motorX.setSpeed(value) لجميع المحركات الأربعة. استخدم بادئة أمر مختلفة (مثل "V" متبوعة بالرقم) للتمييز بين أوامر السرعة وأوامر الاتجاه.

هل يمكنني استخدام هذا المشروع بمحركين بدلاً من أربعة؟

نعم. بالنسبة للسيارة ذات الدفع الثنائي، قم بتوصيل المحركين بـ M1 وM3 (أو أي طرفين، واحد لكل جانب). قم بإزالة الكائنات الحركية غير المستخدمة من الكود أو اتركها محددة ولكن غير متصلة. يبقى منطق الدوران والقيادة كما هو.

لماذا تدور السيارة في دوائر فقط؟

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

هل أحتاج إلى تثبيت مكتبة خاصة للكود؟

نعم. أنت بحاجة إلى مكتبة Adafruit Motor Shield (AFMotor.h). في Arduino IDE، انتقل إلى Sketch > Include Library > Manage Libraries، وابحث عن "Adafruit Motor Shield Library"، وقم بتثبيته. هذه المكتبة مطلوبة لفئة AF_DCMotor المستخدمة في الكود.

الموارد والمشاريع القادمة

الآن بعد أن أصبحت السيارة الروبوتية OmObi التي يتم التحكم فيها عن طريق البلوتوث تعمل، إليك بعض البرامج التعليمية ذات الصلة بـ OmArTronics إذا كنت تريد الاستمرار في البناء:

لمزيد من الترقيات، فكر في إضافة ميزة تجنب العوائق باستخدام جهاز استشعار بالموجات فوق الصوتيةأو وحدة كاميرا لقيادة FPV، أو قم بالتبديل إلى ESP32 للتحكم في Wi-Fi ونطاق أطول.

الخاتمة

إذا كنت قد تابعت الأمر، فلديك الآن سيارة روبوت تعمل بتقنية OmObi Bluetooth ومُصممة باستخدام Arduino وHC-05 وAdafruit Motor Shield. لقد قمت بتجميع الهيكل، وتوصيل أربعة محركات تعمل بالتيار المستمر، وتوصيل HC-05 للاتصال عبر البلوتوث، وكتابة كود Arduino، وإنشاء تطبيق للتحكم في Android باستخدام MIT App Inventor.

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

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

تنزيل ملفات الطباعة ثلاثية الأبعاد (STL)

جميع ملفات STL القابلة للطباعة ثلاثية الأبعاد لهذا المشروع متاحة للتنزيل. يمكنك الحصول عليها من متجرنا أو تصفحها على Cults3D:

  • متجر OmArTronics: قم بتنزيل ملفات المشروع من OmArTronics - احصل على حزمة المشروع الكاملة بما في ذلك ملفات STL ومخططات الأسلاك وكود المصدر التي يتم تسليمها إلى بريدك الإلكتروني.
  • الطوائف3D: عرض على Cults3D - تصفح وتنزيل ملفات النماذج ثلاثية الأبعاد على Cults3D.

رأي واحد حول “Building the Bluetooth-Controlled Robot Car OmObi with Arduino, HC-05, and Adafruit Motor Shield”

أضف تعليق