📋 ملخص سريع
قم ببناء OmObiArm - روبوت متنقل يتم التحكم فيه عبر البلوتوث مع ذراع آلية مدمجة 4-DOF مدعومة بواسطة Arduino Mega وHC-05 وAdafruit Motor Shield ومحرك سيرفو PCA9685. يغطي هذا البرنامج التعليمي عملية البناء الكاملة: تصميم الهيكل والذراع المطبوع ثلاثي الأبعاد، والقيادة بمحرك مزدوج، والتحكم في الذراع المؤازر، والتحكم عبر بلوتوث الهاتف الذكي عبر MIT App Inventor.
تريد بناء روبوت متنقل يمكنه القيادة و التقاط الأشياء؟ لذلك في هذا البرنامج التعليمي، سوف تقوم بالبناء أوموبي أرم، يتم التحكم فيها عن طريق البلوتوث ذراع الروبوت المحمول مدعوم من أردوينو. نظرًا لأن OmObiArm يجمع بين قاعدة العربة الجوالة ذات الأربع عجلات وذراع آلي 6-DOF، يتم التحكم في كل ذلك لاسلكيًا من تطبيق Android مخصص من خلال HC-05 بلوتوث وحدة. خلال هذا المشروع، ستتعلم أيضًا كيفية تصميم الهيكل وتجميع الميكانيكا وتوصيل أسلاك Adafruit Motor Shield و محرك سيرفو PCA9685وبرمجة Arduino وإنشاء تطبيق تحكم باستخدام MIT App Inventor. أخيرًا، في النهاية، سيكون لديك عمل DIY ذراع الروبوت المحمول يمكنها القيادة والوصول والإمساك وإعادة تشغيل وضعيات الذراع المحفوظة من تلقاء نفسها.

أساسًا، أوموبي أرم هو مشروع تمت ترقيته يجمع بين اثنين من بنياتنا السابقة: أوموبي، الروبوت المحمول الذي يتم التحكم فيه عن طريق البلوتوثو أومارم، الذراع الروبوتية 6-DOF مع التحكم عبر البلوتوث. بمجرد تثبيته على منصته المحمولة، يمكن لـ OmObiArm القيادة في جميع الاتجاهات بينما يمكنك التحكم بشكل مستقل في ستة مفاصل للذراع من خلال أشرطة التمرير في التطبيق. بالإضافة إلى ذلك، يقوم زر "حفظ" بتسجيل مواضع الذراع، ويقوم زر "تشغيل" بإعادة تشغيلها كتسلسلات تلقائية. لذا، إذا كنت تريد تعلم الميكاترونكس، أو منطق الأتمتة، أو التحكم في الروبوت اللاسلكي عبر البلوتوث، فهذا مشروع قوي يمكنك تجربته.
ما ستتعلمه
- كيف أوموبي أرم يجمع بين إمكانية التنقل في العربة الجوالة والتلاعب بالذراع الآلي في منصة واحدة يتم التحكم فيها بواسطة Arduino.
- كيف درع المحرك Adafruit Motor Shield V1.2 يقوم بتشغيل أربعة محركات تعمل بالتيار المستمر لحركة شاملة الاتجاهات لقاعدة الهاتف المحمول.
- كيف محرك سيرفو PCA9685 يتحكم في ستة أجهزة (ثلاثة MG996R وثلاثة SG90) للتحكم الدقيق في الذراع والقابض.
- كيف وحدة البلوتوث HC-05 يتيح الاتصال اللاسلكي بين هاتف Android الخاص بك وArduino.
- كيفية حفظ أوضاع الذراع وتشغيلها وتكرارها وإعادة ضبطها لتسلسلات المهام الآلية.
- كيفية إنشاء تطبيق للتحكم في Android باستخدام مخترع تطبيقات معهد ماساتشوستس للتكنولوجيا مع أشرطة التمرير والأزرار ومنطق البلوتوث.
- كيفية اختبار النظام بأكمله ومعايرته واستكشاف أخطائه وإصلاحها بما في ذلك الطاقة والماكينات والمحركات واتصال Bluetooth.
كيف يعمل أوموبيآرم
قبل البدء في البناء، من المفيد أن تفهم كيف يتناسب كل شيء معًا. باختصار، يستخدم OmObiArm أردوينو ميجا 2560 كوحدة تحكم مركزية لها. بعد ذلك، يتلقى Arduino أوامر Bluetooth من هاتفك عبر وحدة HC-05 متصلة على المسامير التسلسلية للأجهزة (TX/RX على الأطراف 0 و1). ثم، بناءً على سلسلة الأوامر المستلمة، إما أن يقود العربة الجوالة أو يحرك الذراع الآلية.
ل حركة روفر، ثم يرسل Arduino الأوامر إلى درع المحرك Adafruit Motor Shield V1.2، والتي تتحكم في أربعة محركات DC من خلال محركات L293D المزدوجة H-bridge المدمجة. في الواقع، يقع درع المحرك مباشرة فوق Arduino Mega. إذا كنت تريد المزيد من التفاصيل حول كيفية عمل دروع المحركات، راجع موقعنا سيارة روبوت يتم التحكم فيها عن طريق البلوتوث مع البرنامج التعليمي Adafruit Motor Shield.
التحكم في الذراع والاتصالات اللاسلكية
وفي الوقت نفسه، ل التحكم في الذراع، يتواصل الاردوينو مع PCA9685 برنامج تشغيل مؤازر ذو 16 قناة على I2C. بعد ذلك، يقوم PCA9685 بإنشاء إشارات PWM لستة أجهزة منتشرة عبر القنوات 0 و4 و8 و9 و12 و13. من بينها، ثلاث أجهزة MG996R تتعامل مع القاعدة الثقيلة ومفاصل الكتف، بينما تتعامل ثلاث أجهزة SG90 الصغيرة مع مفاصل الرسغ والقابض الأخف وزنًا. أيضًا، يحصل PCA9685 على قوته بشكل مستقل من خلال LM2596 محول باك يؤدي ذلك إلى خفض بطارية LiPo الرئيسية بقوة 7.4 فولت إلى 6 فولت. ولهذا السبب، فإنه يحافظ على التحميل الزائد على منظم Arduino الموجود على اللوحة. لمعرفة المزيد حول التحكم المؤازر باستخدام PCA9685، راجع موقعنا دليل التحكم في المحرك المؤازر Arduino.
وفي الوقت نفسه، تطبيق التحكم للاندرويد (تم إنشاؤه باستخدام MIT App Inventor) يرسل أوامر ذات حرف واحد لحركة المركبة الجوالة (F، B، L، R، S) وأوامر مؤازرة منسقة (على سبيل المثال، "1,90" لتحريك المؤازرة من 1 إلى 90 درجة) عبر البلوتوث. يرسل التطبيق أيضًا أوامر إدارة الوضعية: "v" للحفظ، و"l" للتشغيل، و"r" لإعادة التعيين، و"s" للإيقاف، و"o" لتمكين الحلقة، و"f" لتعطيل الحلقة. وأيضًا، أثناء تشغيل الوضعيات، تتوقف محركات العربة الجوالة تلقائيًا حتى لا يتحرك الروبوت بشكل غير متوقع. لمعرفة المزيد حول وحدة HC-05، تفضل بزيارة موقعنا HC-05 / HC-06 وحدة بلوتوث البرنامج التعليمي الكامل.
المكونات اللازمة لذراع الروبوت المحمول OmObiArm
بشكل عام، لبناء OmObiArm، ستحتاج إلى أجزاء مطبوعة ثلاثية الأبعاد من كلا الجهازين أوموبي روفر و الذراع الروبوتية OmArm، بالإضافة إلى الأجهزة الإلكترونية والمحركات والأجهزة التالية. أدناه، يسرد جدول قائمة المواد (BOM) الكامل أدناه كل جزء مطلوب بالإضافة إلى الكمية والغرض منه.
ملخص المكونات الرئيسية
| فئة | عناصر |
|---|---|
| المراقب المالي | أردوينو ميجا 2560 |
| سائق موتور | Adafruit Motor Shield V1.2 (المعتمد على L293D) |
| سائق سيرفو | PCA9685 برنامج تشغيل مؤازر I2C ذو 16 قناة |
| بلوتوث | وحدة البلوتوث HC-05 |
| المحركات | 4 محركات DC مع علب التروس + 4 عجلات |
| الماكينات | 3 MG996R (عزم الدوران العالي) + 3 SG90 (ميكرو) |
| الطاقة | بطارية ليبو 7.4 فولت 2S (5300 مللي أمبير) + محول باك LM2596 (متدرج إلى 6 فولت) + مفتاح الطاقة |
| الأجزاء المطبوعة ثلاثية الأبعاد | الهيكل، وصلات الذراع، المقبض، القاعدة، الأغطية، حامل Arduino (من تصميمات OmObi وOmArm) |
| الإكسسوارات | أسلاك توصيل، براغي M3، إدخالات، براغي M2، زنبرك تمديد، دبوس مشترك، محمل كروي (6806ZZ 30x42x7)، أبواق مؤازرة |
قائمة المواد الكاملة (BOM)
في الأساس، الجدول التالي هو قائمة المواد الكاملة لمشروع OmObiArm. كما أنه يغطي جميع الأجزاء الهيكلية المطبوعة ثلاثية الأبعاد، والماكينات، والإلكترونيات، والمثبتات، والملحقات. يمكنك أيضًا تنزيل العناصر التي تم وضع علامة "مطبوعة ثلاثية الأبعاد" عليها كملفات STL من Cults3D أو الحصول عليها من لدينا متجر أومارترونيكس.
قائمة الأجزاء الكاملة
| البند | الكمية | الجزء | الغرض / ملاحظات |
|---|---|---|---|
| 1 | 1 | القاعدة السفلية (الهيكل) | قاعدة سفلية مطبوعة ثلاثية الأبعاد لتركيب المحركات والإلكترونيات |
| 2 | 1 | JIS B 1521 - 6806 JIS B 1521 - 6806 30x42x7 | محمل كروي ذو أخدود عميق لتدوير قاعدة الذراع |
| 3 | 1 | رابط الذراع 1 | وصلة الذراع الأولى المطبوعة ثلاثية الأبعاد |
| 4 | 1 | الإصبع القابض الأيمن | الإصبع الأيمن من القابض، مطبوع ثلاثي الأبعاد |
| 5 | 2 | غلاف القابض | جلبة بلاستيكية لمحور وصلة القابض |
| 6 | 1 | ترس القابض الأيمن | ترس الجانب الأيمن لآلية القابض |
| 7 | 1 | ترس القابض الأيسر | ترس الجانب الأيسر لآلية القابض |
| 8 | 1 | تجميع القابض | تجميع القابض الكامل المطبوع ثلاثي الأبعاد |
| 9 | 4 | الرابط | أجزاء الوصلة العامة، مطبوعة ثلاثية الأبعاد |
| 10 | 1 | قاعدة الذراع العلوية | جزء القاعدة العلوي المطبوع ثلاثي الأبعاد من الذراع الروبوتية |
| 11 | 3 | جهاز مؤازر صغير SG90 | مؤازرة مدمجة للمقبض والمفاصل خفيفة الوزن |
| 12 | 3 | مؤازر MG996R | مضاعفات عزم الدوران العالي للمفاصل الأساسية والثقيلة |
| 13 | 1 | رابط الذراع 3 | وصلة الذراع الثالثة المطبوعة ثلاثية الأبعاد |
| 14 | 1 | رابط الذراع 2 | وصلة الذراع الثانية المطبوعة ثلاثية الأبعاد |
| 15 | 1 | وصلة قاعدة الذراع | قاعدة مطبوعة ثلاثية الأبعاد لتوصيل الذراع الآلية بالمركبة الجوالة |
| 16 | 7 | AS 1420 - 1973 - M3 x 16 | برغي سداسي الرأس سداسي المقبس |
| 17 | 1 | زنبرك التمديد | زنبرك لشد الوصلة |
| 18 | 1 | دبوس مشترك | دبوس يستخدم لتثبيت المفاصل في الذراع الروبوتية |
| 19 | 1 | ANSI B18.2.4.4.2M - M3x0.5 | صامولة سداسية (لولب متري قياسي) |
| 20 | 3 | بوق MG955 | أبواق مؤازرة لمضاعفات الماكينات MG996R |
| 21 | 3 | بوق مؤازر SG90 | أبواق لمخدمات SG90 |
| 22 | 8 | المعيار ANSI B18.6.4 - رقم 3 - 28 - 1/2 | برغي التنصت على رأس الجمالون المتقاطع – النوع AB – النوع I |
| 23 | 16 | معيار ANSI B18.6.4 - رقم 2 - 32 - 3/8 | برغي التنصت على رأس الجمالون المتقاطع – النوع AB – النوع I |
السحابات والإلكترونيات وأجزاء الهيكل
| البند | الكمية | الجزء | الغرض / ملاحظات |
|---|---|---|---|
| 24 | 2 | معيار DIN 7985 (Z) - M3x6-Z | براغي برأس جبن بارزة متقاطعة الغائرة - النوع Z |
| 25 | 3 | معيار DIN 7985 (Z) - M2x6-Z | براغي برأس جبن بارزة متقاطعة الغائرة - النوع Z |
| 26 | 4 | ترس المحرك | ترس بلاستيكي لعمود محرك التيار المستمر |
| 27 | 4 | إطارات 4WD 4WD | عجلة مطاطية للقاعدة المتحركة |
| 28 | 4 | عجلة العربة ذات الدفع الرباعي 4WD | عجلة بلاستيكية لمنصة الدفع الرباعي |
| 29 | 1 | إطار الهيكل | إطار هيكل مطبوع ثلاثي الأبعاد للهيكل للدعم الهيكلي |
| 30 | 3 | الغلاف | أغطية مطبوعة ثلاثية الأبعاد |
| 31 | 1 | قاعدة سيارة روبوت | قاعدة مطبوعة ثلاثية الأبعاد |
| 32 | 1 | أردوينو ميجا 2560 | متحكم دقيق للتحكم والاتصال عبر البلوتوث |
| 33 | 1 | برنامج تشغيل المحرك L293D (Adafruit Motor Shield V1.2) | درع محرك H-bridge مزدوج للتحكم في محرك DC |
| 34 | 1 | بطارية ليبو 7.4 فولت 2S (5300 مللي أمبير) | مصدر الطاقة الرئيسي للنظام بأكمله |
| 35 | 16 | إدخالات M3 | إدراجات حرارية ملولبة للأجزاء المطبوعة ثلاثية الأبعاد |
| 36 | 1 | التبديل | مفتاح التشغيل/إيقاف التشغيل للدائرة الرئيسية |
| 37 | 16 | AS 1420 - 1973 - M3 x 6 - 1973 | براغي سداسية الرأس سداسية الشكل سداسية الرأس متري ISO |
| 38 | 4 | ANSI B18.3.3.1M - M3x0.5 × 30 | برغي غطاء رأس المقبس المطروق - متري |
| 39 | 4 | ANSI B18.3.3.1M - M3x0.5 × 25 | برغي غطاء رأس المقبس المطروق - متري |
| 40 | 1 | وحدة البلوتوث HC-05 | وحدة اتصالات لاسلكية للتحكم بالبلوتوث |
| 41 | 4 | معيار ANSI B18.6.4 - رقم 0 - 48 - 1/4 | برغي التنصت على رأس الجمالون المتقاطع – النوع AB – النوع I |
| 42 | 1 | محول LM2596 باك LM2596 | محول تنحي DC-DC لتزويد 6 فولت إلى PCA9685 |
| 43 | 1 | برنامج تشغيل المؤازر PCA9685 | لوحة تشغيل مؤازرة ذات 16 قناة تعتمد على I2C |
| 44 | 4 | محرك DC مع علبة التروس | محركات DC موجهة لقاعدة روفر 4WD |
الخطوة 1: تصميم نموذج OmObiArm ثلاثي الأبعاد لذراع الروبوت المتحرك
في البداية، تجمع هذه الخطوة بين التصاميم السابقة أوموبي روفر و الذراع الروبوتية OmArm المشاريع. بعد ذلك، وباستخدام Autodesk Inventor، قمنا بتعديل قاعدة OmArm ودمجها مع تصميم اللوحة العلوية (الغطاء) من OmObi. ونتيجة لذلك، فإن المنصة التي تثبت الذراع الآلية بشكل آمن على هيكل الهاتف المحمول. إذا كنت جديدًا في مجال التصميم ثلاثي الأبعاد للروبوتات، فراجع موقعنا مقدمة للطباعة ثلاثية الأبعاد وAutodesk Inventor الدليل.
يمكنك أيضًا تنزيل ملفات STL للطباعة ثلاثية الأبعاد من Cults3D أو من لدينا متجر أومارترونيكس. للمساعدة في التجميع، قمنا بتصميم جميع المكونات بأبعاد تفصيلية، والتي يمكنك رؤيتها في الرسم الفني أدناه. بالإضافة إلى ذلك، يتضمن الرسم مناظر مقطعية حتى تتمكن من الحصول على صورة واضحة للتصميم الميكانيكي وتخطيط التجميع.

الخطوة 2: الطباعة ثلاثية الأبعاد للأجزاء الروبوتية
بعد الانتهاء من التصميم، قم بطباعة جميع المكونات ثلاثية الأبعاد. على سبيل المثال، باستخدام طابعة ثلاثية الأبعاد مثل Creality Ender 3، قم بطباعة جميع الأجزاء المدرجة في قائمة مكونات الصنف لكل من الذراع الآلية والمنصة المتنقلة. بشكل عام، تعمل خيوط PLA بشكل جيد مع معظم الأجزاء. لقد صممنا أيضًا هذه الأجزاء لتكون سهلة التجميع وقوية بما يكفي للاستخدام المنتظم. وللحصول على نصائح حول إعدادات الطابعة واختيار المواد، راجع موقعنا مقدمة للطباعة ثلاثية الأبعاد برنامج تعليمي.
الخطوة 3: تجميع روبوت OmObiArm
بمجرد أن تصبح جميع الأجزاء المطبوعة ثلاثية الأبعاد جاهزة، فقد حان الوقت لتجميع ذراع الروبوت المحمول OmObiArm. ولهذا السبب، اتبع كل خطوة فرعية بعناية وتحقق من الملاءمة والمحاذاة قبل ربط البراغي.
3.1 تركيب المحركات والعجلات
قم بتوصيل المحركات: قم بتأمين محركات التيار المستمر الأربعة على حوامل المحرك المطبوعة ثلاثية الأبعاد باستخدام البراغي والإدراج والصواميل. تأكد أيضًا من تثبيتها بإحكام لمنع أي اختلال في المحاذاة أثناء الحركة.
قم بتركيب العجلات: قم بتوصيل العجلات بأعمدة المحرك وتأكد من تثبيتها بإحكام. ثم اختبر الدوران السلس والمحاذاة الصحيحة.
3.2 تركيب Arduino Mega وMotor Shield وPCA9685 وLM2596 وHC-05
وصِّل حامل الأردوينو: أولاً، قم بتثبيت حامل Arduino المطبوع ثلاثي الأبعاد على الهيكل المحمول باستخدام البراغي.
تركيب الاردوينو وموتور شيلد: ضع أردوينو ميجا في الحامل وتأمينه بالمسامير. ثم قم بتوصيل Adafruit Motor Shield أعلى Arduino Mega، مع التأكد من محاذاة جميع المسامير وتثبيتها بشكل صحيح.
ثم قم بإصلاح PCA9685 وLM2596 وHC-05: استخدم روابط مضغوطة أو شريط مزدوج الجوانب لتثبيت برنامج التشغيل المؤازر PCA9685، ومحول التنحي LM2596، ووحدة Bluetooth HC-05 على الهيكل. قم أيضًا بوضعها بحيث تكون مسارات الأسلاك قصيرة ومرتبة.
3.3 تثبيت اللوحة العلوية وقاعدة الذراع الآلية
أخيرًا، قم بتوصيل اللوحة العلوية (والتي تعد أيضًا قاعدة الذراع الآلية) بالمنصة المتحركة. ثم استخدم البراغي لتثبيته بإحكام. ونتيجة لذلك، يمنح هذا الذراع الروبوتية سطح تثبيت ثابتًا ويمنع التذبذب أثناء الحركة.
3.4 تجميع الذراع الروبوتية
الآن، تتبع مجموعة الذراع الآلية نفس الإجراء الموضح في موقعنا دليل بناء OmArm. لذلك اتبع هذه الخطوات الفرعية بعناية، حيث أن كل واحدة منها مبنية على السابقة:
الخطوة الفرعية 1 - تأمين محرك سيرفو على القاعدة: قم بتركيب أول محرك سيرفو MG996R على قاعدة الذراع الآلية باستخدام براغي M3x12. ثم أضف محمل الكرة 6806ZZ (30x42x7 مم) لتقليل الاحتكاك وتمكين الدوران السلس. ثم قم بتوصيل البوق المؤازر بالجزء العلوي الدوار وقم بتثبيته بمسامير M2x12. تأكد أيضًا من أن الاتصال محكم ومحاذي.
الخطوة الفرعية 2 - تركيب الأبواق المؤازرة على روابط ذراع الروبوت: قم بمحاذاة أبواق المؤازرة مع نقاط ربط وصلات الذراع. ثم قم بتثبيتها بالمسامير، وشدها بقوة لمنع الانزلاق.
الخطوة الفرعية 3 - تركيب المحركات المؤازرة على وصلات الذراع: قم بمحاذاة المحركات المؤازرة مع نقاط التثبيت الموجودة على وصلات الذراع. ثم قم بتثبيتها باستخدام البراغي، وتأكد من أن التركيب محكم وثابت. بعد ذلك، قم باختبار الثبات عن طريق تحريك الروابط بلطف.
الخطوة الفرعية 4 - توصيل روابط الذراع: قم بمحاذاة الروابط وربطها باستخدام البراغي من خلال أبواق المؤازرة. تأكد أيضًا من أن المفاصل تتحرك بسلاسة ويتم تثبيتها بشكل آمن.
الخطوة الفرعية 5 - تجميع القابض: أخيرًا، قم بتوصيل المقبض بالوصلة النهائية للذراع الآلي باستخدام براغي M3x20. بعد ذلك، تأكد من أن المقبض يفتح ويغلق بسلاسة ويستقر بشكل صحيح على الذراع.
3.5 فحوصات التجميع النهائية
بمجرد تجميع الذراع الروبوتية والمنصة المتنقلة بالكامل، اختبر جميع المكونات للتأكد من ثباتها وسلاسة تشغيلها. قبل المضي قدمًا، تأكد من أن المحركات والمضاعفات والمقابض تعمل بشكل صحيح قبل الانتقال إلى الأسلاك والبرمجة.
الخطوة 4: توصيل مكونات OmObiArm
يعد الحصول على الأسلاك بشكل صحيح أمرًا مهمًا جدًا لهذا المشروع لأن التوصيلات السيئة يمكن أن تؤدي إلى تلف المكونات أو التسبب في سلوك غير متوقع. ترشدك الأقسام الفرعية التالية عبر كل مجموعة اتصال. راجع أيضًا مخطط الأسلاك أدناه للحصول على تخطيط الدائرة الكامل.
4.1 محركات التيار المستمر إلى درع المحرك
| المحرك | طرف توصيل درع المحرك | جانب |
|---|---|---|
| المحرك الأمامي الأيسر | M1 | غادر |
| المحرك الخلفي الأيسر | M2 | غادر |
| المحرك الأمامي الأيمن | M3 | يمين |
| المحرك الخلفي الأيمن | M4 | يمين |
أولاً، قم بتوصيل المحركات الموجودة على الجانب الأيسر بالأطراف المسمى M1 وM2 الموجودة على Adafruit Motor Shield، والمحركات الموجودة على الجانب الأيمن بالمحطات الطرفية M3 وM4. بعد ذلك، تحقق من القطبية بحيث تدور جميع العجلات في الاتجاه الصحيح عند إرسال أمر للأمام.
4.2 البطارية ومسار الطاقة الرئيسي
استخدم بطارية ليبو 7.4 فولت 2 ثانية بسعة لا تقل عن 5300 مللي أمبير وموصل EC3. ثم قم بلحام قابس EC3 متوافق بمدخل الدائرة. وأيضا إضافة أ مفتاح الطاقة بين البطارية والدائرة للتحكم بسهولة في تدفق الطاقة. بشكل عام، توفر البطارية الطاقة لكل من Adafruit Motor Shield (الذي يقوم بتشغيل Arduino من خلال المنظم الموجود على اللوحة)، وبالتوازي، إلى محول باك LM2596.
4.3 LM2596 محول تنحى DC-DC
| LM2596 دبوس | الاتصال |
|---|---|
| في+ | البطارية إيجابية (7.4 فولت، عبر المفتاح) |
| في− | ارض البطارية |
| خارج + | محطة PCA9685 VCC (تم تعديلها إلى 6 فولت) |
| خارج− | محطة PCA9685 GND |
أولا، قم بتوصيل البطارية بالتوازي مع محول التنحي LM2596. قبل توصيل PCA9685، اضبط مقياس الجهد على LM2596 لضبط جهد الخرج تمامًا 6 خامسا باستخدام المتعدد. ولهذا السبب، يعمل مصدر الإمداد المستقل بجهد 6 فولت على تشغيل لوحة التشغيل المؤازرة PCA9685 وجميع الماكينات المتصلة، مما يتجنب التحميل الزائد على منظم Arduino الموجود على اللوحة.
4.4 PCA9685 محرك المؤازرة والمؤازرة
| دبوس PCA9685 | الاتصال |
|---|---|
| VCC (محطة الطاقة) | مخرج LM2596 6 فولت |
| GND (محطة الطاقة) | مخرج LM2596 GND |
| SDA | اردوينو ميجا SDA (دبوس 20) |
| SCL | اردوينو ميجا SCL (دبوس 21) |
| VCC (المنطق) | أردوينو 5 فولت |
| جي إن دي (منطق) | شبكة GND للأردوينو |
بعد ذلك، قم بتوصيل كل مؤازرة بالقناة PCA9685 المناسبة، مع التأكد من محاذاة منافذ الإشارة وVCC وGND بشكل صحيح. أيضًا، تخصيصات قناة المؤازرة المستخدمة في الكود هي:
| المؤازرة | مشترك | قناة PCA9685 | يكتب |
|---|---|---|---|
| المؤازر 1 | دوران القاعدة | 0 | MG996R |
| المؤازرة 2 | كتف | 4 | MG996R |
| سيرفو 3 | مِرفَق | 8 | MG996R |
| سيرفو 4 | الملعب المعصم | 9 | SG90 |
| سيرفو 5 | لفة المعصم | 12 | SG90 |
| سيرفو 6 | القابض | 13 | SG90 |
تأكد أيضًا من استخدام مصدر الطاقة المستقل بقدرة 6 فولت من LM2596 لمحطة الطاقة المؤازرة PCA9685. بمعنى آخر، لا تقم بتشغيل المعززات من طرف Arduino 5 V - سيؤدي ذلك إلى انخفاض الجهد، وارتعاش المؤازرة، وإعادة ضبط Arduino المحتملة.
4.5 HC-05 وحدة بلوتوث
| دبوس HC-05 | اردوينو ميجا دبوس |
|---|---|
| VCC | 5 V |
| GND | GND |
| TXD | RX0 (دبوس 0) |
| RXD | TX0 (دبوس 1) |
ملاحظة هامة حول الدبابيس 0 و 1: يتصل HC-05 بالدبابيس التسلسلية لأجهزة Arduino Mega (Serial0، دبابيس 0 و1). نظرًا لأن هذه هي نفس المسامير التي يستخدمها اتصال USB لتحميل الرسومات، يمكنك يجب فصل HC-05 (أو على الأقل افصل سلك HC-05 TXD من الدبوس 0) قبل تحميل الكود من Arduino IDE. إذا تركت HC-05 متصلاً أثناء التحميل، فسوف يفشل التحميل مع حدوث خطأ في الاتصال. بعد ذلك، أعد توصيل HC-05. أيضًا، للحصول على دليل تفصيلي حول الأسلاك والاقتران HC-05، راجع موقعنا البرنامج التعليمي لوحدة البلوتوث Arduino HC-05 / HC-06.
4.6 Adafruit Motor Shield إلى Arduino Mega
بعد ذلك، ضع Adafruit Motor Shield بشكل آمن على Arduino Mega، وتأكد من محاذاة جميع المسامير وتثبيتها بشكل صحيح. بدلاً من ذلك، يتم تثبيت Motor Shield مباشرة فوق رؤوس Arduino، لذلك لا حاجة إلى أسلاك إضافية بين الدرع وArduino - يتصل الدرع من خلال رؤوس الدبوس المكدسة. لمعرفة المزيد حول كيفية عمل Adafruit Motor Shield، راجع موقعنا سيارة روبوت بلوتوث مع البرنامج التعليمي Adafruit Motor Shield.
4.7 اختبار توزيع الطاقة
قبل تشغيل النظام لأول مرة، تحقق من جميع توصيلات الطاقة باستخدام جهاز قياس متعدد. ابحث أيضًا عن الدوائر القصيرة. بعد ذلك، تأكد من حصول كل من المحركات والماكينات ووحدة HC-05 على الجهد الصحيح: يجب أن يرى Arduino وHC-05 5 فولت، ويجب أن ترى الماكينات 6 فولت من LM2596، ويجب أن تحصل المحركات على جهد البطارية الكامل من خلال Motor Shield.

الخطوة 5: برمجة ذراع الروبوت المتنقل OmObiArm للتحكم بالبلوتوث
في هذه الخطوة قمنا ببرمجة Arduino Mega للتحكم في الذراع الروبوتية ومنصة الهاتف المحمول عبر البلوتوث. بشكل عام، يتعامل الكود الكامل مع تحليل أوامر البلوتوث، والتحكم في محرك العربة الجوالة، والحركة المؤازرة السلسة، ومنطق الحفظ/التشغيل/الحلقة. يمكنك أيضًا العثور على الكود المصدري الكامل وملف مشروع MIT App Inventor في ملف مستودع GitHub: التطبيق والرمز. إذا كنت جديدًا في برمجة Arduino، فننصحك بمراجعة موقعنا أساسيات برمجة الأردوينو البرنامج التعليمي أولا.
مهم: تذكر دائمًا فصل وحدة HC-05 عن الأطراف 0/1 قبل تحميل هذا المخطط. وبعد ذلك، أعد توصيله بعد اكتمال التحميل.
أكمل كود OmObiArm Arduino
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
#include <AFMotor.h>
// Constants and definitions
const int numServos = 6; // Number of servos
const int maxConfigurations = 10; // Maximum number of storable poses
const int stepDelay = 10; // Delay between each step to slow down the servo movement
const int stepSize = 1; // The number of degrees to move per step
// Servo channels on the PCA9685
const int servoChannels[numServos] = {0, 4, 8, 9, 12, 13};
// Storage structures
int savedConfigurations[maxConfigurations][numServos];
int currentServoPositions[numServos] = {375, 375, 375, 375, 375, 375}; // Default positions
int configCount = 0; // Counter for stored poses
bool isPlaying = false; // Status indicating if poses are being played
bool loopPlayback = false; // Status indicating if poses should be played in a loop
bool stopPlaying = false; // Status indicating if playback should be stopped
int currentPoseIndex = 0; // Index of the current pose during playback
// Motor instances for the rover
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
String input = ""; // Holds incoming Bluetooth data
void setup() {
Serial.begin(9600); // Serial communication for Bluetooth
// Initialize motors
motor1.setSpeed(255);
motor2.setSpeed(255);
motor3.setSpeed(255);
motor4.setSpeed(255);
// Initialize servo controller
pwm.begin();
pwm.setPWMFreq(50); // Set frequency to 50 Hz for servos
// Initialize servo positions
for (int i = 0; i < numServos; i++) {
pwm.setPWM(servoChannels[i], 0, currentServoPositions[i]);
}
Serial.println("Bluetooth Robot Controller ready. Waiting for commands...");
}
الحلقة الرئيسية وكود معالجة الأوامر
void loop() {
// Process incoming commands
if (Serial.available()) {
input = Serial.readStringUntil('\n'); // Read data from Bluetooth
input.trim();
Serial.println("Received command: " + input);
processCommand(input);
}
// Check if robot arm is playing poses
if (isPlaying && !stopPlaying) {
if (loopPlayback) {
playPosesInLoop();
} else {
playNextPose();
}
}
}
كود معالجة الأوامر
void processCommand(String command) {
// If playing, ignore all rover commands
if (isPlaying) {
if (command == "s") { // Allow stop playback command
stopPlayingPoses();
} else {
Serial.println("Playback in progress. Ignoring command: " + command);
}
return;
}
// Control rover movement
if (command == "F") {
forward();
} else if (command == "B") {
backward();
} else if (command == "L") {
turnLeft();
} else if (command == "R") {
turnRight();
} else if (command == "S") {
stopMotors(); // Stop motors immediately on "S" command
// Control robotic arm
} else if (command.startsWith("1,")) {
processServoCommand(command, 0); // Control Servo 1
} else if (command.startsWith("2,")) {
processServoCommand(command, 1); // Control Servo 2
} else if (command.startsWith("3,")) {
processServoCommand(command, 2); // Control Servo 3
} else if (command.startsWith("4,")) {
processServoCommand(command, 3); // Control Servo 4
} else if (command.startsWith("5,")) {
processServoCommand(command, 4); // Control Servo 5
} else if (command.startsWith("6,")) {
processServoCommand(command, 5); // Control Servo 6
// Save, play, reset poses
} else if (command == "v") {
saveCurrentPose();
} else if (command == "l") {
startPlayingPoses();
} else if (command == "r") {
resetPoses();
} else if (command == "s") {
stopPlayingPoses();
} else if (command == "o") {
loopPlayback = true;
Serial.println("Loop playback enabled.");
} else if (command == "f") {
loopPlayback = false;
Serial.println("Loop playback disabled.");
} else {
Serial.println("Unknown command: " + command);
}
}
void processServoCommand(String command, int servoIndex) {
int commaIndex = command.indexOf(',');
if (commaIndex > 0) {
int position = command.substring(commaIndex + 1).toInt();
int pwmValue = map(position, 0, 180, 150, 600);
moveToPositionSmoothly(servoIndex, pwmValue);
}
}
// Rover motor control
حركة روفر وتشكل رمز التشغيل
التحكم في المحركات ووظائف الوضع
void forward() {
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
Serial.println("Moving forward");
}
void backward() {
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
Serial.println("Moving backward");
}
void turnLeft() {
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
Serial.println("Turning left");
}
void turnRight() {
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
Serial.println("Turning right");
}
void stopMotors() {
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
Serial.println("Motors stopped");
}
// Arm servo control
void moveToPositionSmoothly(int servoIndex, int targetPwmValue) {
int currentPwmValue = currentServoPositions[servoIndex];
if (targetPwmValue > currentPwmValue) {
for (int pos = currentPwmValue; pos <= targetPwmValue; pos += stepSize) {
pwm.setPWM(servoChannels[servoIndex], 0, pos);
delay(stepDelay);
}
} else {
for (int pos = currentPwmValue; pos >= targetPwmValue; pos -= stepSize) {
pwm.setPWM(servoChannels[servoIndex], 0, pos);
delay(stepDelay);
}
}
currentServoPositions[servoIndex] = targetPwmValue;
Serial.println("Servo " + String(servoIndex + 1) + " set to position: " + String(targetPwmValue));
}
// Pose handling for the arm
وظائف إدارة الوضع
void saveCurrentPose() {
if (configCount < maxConfigurations) {
for (int i = 0; i < numServos; i++) {
savedConfigurations[configCount][i] = currentServoPositions[i];
}
configCount++;
Serial.println("Pose saved. Total poses: " + String(configCount));
} else {
Serial.println("Memory full. Cannot save pose.");
}
}
void startPlayingPoses() {
if (configCount > 0) {
stopMotors(); // Ensure rover is stopped during playback
isPlaying = true;
stopPlaying = false;
currentPoseIndex = 0;
Serial.println("Starting pose playback");
} else {
Serial.println("No poses saved");
}
}
void playNextPose() {
if (currentPoseIndex < configCount) {
for (int i = 0; i < numServos; i++) {
moveToPositionSmoothly(i, savedConfigurations[currentPoseIndex][i]);
}
delay(1000);
currentPoseIndex++;
} else {
isPlaying = false;
Serial.println("Pose playback finished");
}
}
void playPosesInLoop() {
for (int i = 0; i < configCount; i++) {
if (stopPlaying) break; // Immediate stop on command
for (int j = 0; j < numServos; j++) {
moveToPositionSmoothly(j, savedConfigurations[i][j]);
}
delay(1000);
}
}
void stopPlayingPoses() {
stopPlaying = true;
isPlaying = false;
Serial.println("Pose playback stopped");
}
void resetPoses() {
configCount = 0;
isPlaying = false;
loopPlayback = false;
currentPoseIndex = 0;
Serial.println("All poses reset");
}
إرشادات التعليمات البرمجية: المكتبات المضمنة
#include <Wire.h> #include <Adafruit_PWMServoDriver.h> #include <AFMotor.h>
أولاً، أنت بحاجة إلى ثلاث مكتبات لهذا المشروع. Wire.h يوفر اتصال I2C، والذي يستخدمه برنامج التشغيل المؤازر PCA9685 لتلقي الأوامر من Arduino. Adafruit_PWMServoDriver.h هي مكتبة للتحكم في الماكينات من خلال لوحة PCA9685. و AFMotor.h هي مكتبة Adafruit Motor Shield التي تعمل على تبسيط التحكم في محرك التيار المستمر من خلال الجسور L293D H الموجودة على الدرع. قبل التجميع، تأكد من تثبيت الثلاثة جميعًا في Arduino IDE الخاص بك قبل التجميع.
إرشادات التعليمات البرمجية: تعيين قناة المؤازرة والمتغيرات
const int numServos = 6;
const int maxConfigurations = 10;
const int stepDelay = 10;
const int stepSize = 1;
const int servoChannels[numServos] = {0, 4, 8, 9, 12, 13};
int savedConfigurations[maxConfigurations][numServos];
int currentServoPositions[numServos] = {375, 375, 375, 375, 375, 375};
int configCount = 0;
bool isPlaying = false;
bool loopPlayback = false;
bool stopPlaying = false;
int currentPoseIndex = 0;
بعد ذلك، تحدد الثوابت معلمات النظام. numServos تم ضبطه على 6 لأن الذراع بها ستة مفاصل. التكوينات القصوى يحد من عدد الأوضاع المحفوظة إلى 10 (مخزنة في ذاكرة الوصول العشوائي). تأخير الخطوة (10 مللي ثانية) و حجم الخطوة (وحدة PWM واحدة) تتحكم في مدى سلاسة تحرك الماكينات. تنتج أحجام الخطوات الأصغر ذات التأخيرات القصيرة حركة سلسة بدلاً من القفزات المفاجئة. ال قنوات مؤازرة يقوم المصفوفة بتعيين كل أجهزة منطقية (من 1 إلى 6) لقناة PCA9685 الفعلية الخاصة بها (0، 4، 8، 9، 12، 13). ال currentServoPositions يتتبع المصفوفة مكان وجود كل مؤازرة حاليًا، باستخدام قيم PWM الأولية (375 هو النطاق المتوسط تقريبًا لتعيين 150 إلى 600 PWM). وأخيرا، الأعلام المنطقية هو اللعب, تكرار التشغيلو stopPlaying إدارة آلة الحالة لتشغيل الوضع.
إرشادات التعليمات البرمجية: تهيئة المحرك
AF_DCMotor motor1(1); AF_DCMotor motor2(2); AF_DCMotor motor3(3)؛ AF_DCMotor motor3(3); AF_DCMotor motor4(4); Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
بعد ذلك، يتم إنشاء أربعة كائنات محرك DC على القنوات من 1 إلى 4 من Adafruit Motor Shield. ال Adafruit_PWMSMServoDriver كائن (يسمى pwm) تتم تهيئته بعنوان I2C الافتراضي (0x40) للوحة PCA9685. ومع ذلك، إذا كان لديك لوحات PCA9685 متعددة، فسوف تقوم بتمرير عنوان مختلف هنا.
إرشادات التعليمات البرمجية: وظيفة الإعداد
void setup() {
Serial.begin(9600);
motor1.setSpeed(255);
motor2.setSpeed(255);
motor3.setSpeed(255);
motor4.setSpeed(255);
pwm.begin();
pwm.setPWMFreq(50);
for (int i = 0; i < numServos; i++) {
pwm.setPWM(servoChannels[i], 0, currentServoPositions[i]);
}
}
أثناء بدء التشغيل، تقوم وظيفة الإعداد بتهيئة الاتصال التسلسلي عند 9600 باود، والذي يجب أن يتطابق مع معدل الباود الافتراضي لـ HC-05. بعد ذلك، يقوم بضبط جميع المحركات الأربعة على السرعة القصوى (255 من 255)، ويقوم بتهيئة PCA9685 بتردد PWM قدره 50 هرتز (المعيار لماكينات الهوايات)، وينقل جميع الماكينات الستة إلى مواضعها الافتراضية متوسطة المدى (قيمة PWM 375) بحيث يبدأ الذراع في وضع معروف وآمن.
إرشادات التعليمات البرمجية: تنسيق أمر Bluetooth ووظيفة الحلقة
void loop() {
if (Serial.available()) {
input = Serial.readStringUntil('\n');
input.trim();
processCommand(input);
}
if (isPlaying && !stopPlaying) {
if (loopPlayback) {
playPosesInLoop();
} else {
playNextPose();
}
}
}
الآن، تقوم الحلقة الرئيسية بالتحقق بشكل مستمر من بيانات البلوتوث الواردة على المنفذ التسلسلي. عندما تكون البيانات متاحة، فإنها تقرأ سلسلة أوامر كاملة حتى حرف السطر الجديد ('\n') استخدام قراءة السلسلة('\n'). لذا فإن السطر الجديد يعمل كمحدد للأمر، بحيث ينتهي كل أمر يتم إرساله من التطبيق بـ \n. بعد قطع المسافة البيضاء، تنتقل سلسلة الأمر إلى عملية الأمر (). وفي الوقت نفسه، يتحقق النصف الثاني من الحلقة مما إذا كان تشغيل الوضعية نشطًا، وإذا كان الأمر كذلك، فإنه إما يلعب الوضعيات في حلقة أو يتقدم إلى الوضع التالي بالتسلسل.
التعليمات البرمجية التفصيلية: معالجة الأوامر (Rover وArm)
void processCommand(String command) {
if (isPlaying) {
if (command == "s") { stopPlayingPoses(); }
return;
}
if (command == "F") forward();
else if (command == "B") backward();
else if (command == "L") turnLeft();
else if (command == "R") turnRight();
else if (command == "S") stopMotors();
else if (command.startsWith("1,")) processServoCommand(command, 0);
else if (command.startsWith("2,")) processServoCommand(command, 1);
else if (command.startsWith("3,")) processServoCommand(command, 2);
else if (command.startsWith("4,")) processServoCommand(command, 3);
else if (command.startsWith("5,")) processServoCommand(command, 4);
else if (command.startsWith("6,")) processServoCommand(command, 5);
else if (command == "v") saveCurrentPose();
else if (command == "l") startPlayingPoses();
else if (command == "r") resetPoses();
else if (command == "s") stopPlayingPoses();
else if (command == "o") { loopPlayback = true; }
else if (command == "f") { loopPlayback = false; }
}
إن عملية الأمر () الوظيفة هي مرسل القيادة المركزية. يقوم أولاً بالتحقق مما إذا كان تشغيل الوضع نشطًا. إذا كان الأمر كذلك، فسيتم قبول الأمر "s" (الإيقاف) فقط ويتم تجاهل كافة الأوامر الأخرى. ونتيجة لذلك، يمنع هذا حركة العربة الجوالة أثناء تشغيل الذراع، مما قد يتسبب في تحرك الروبوت بشكل غير متوقع.
باختصار، بروتوكول الأوامر الكامل هو كما يلي:
مرجع قيادة روفر والذراع
| الأمر | فعل | فئة |
|---|---|---|
F | قيادة روفر إلى الأمام | روفر |
B | قيادة روفر إلى الوراء | روفر |
L | انعطف يسارًا | روفر |
R | اقلب العربة الجوالة إلى اليمين | روفر |
S | أوقف جميع محركات العربة الجوالة | روفر |
1، | انقل المؤازرة 1 (القاعدة) إلى الزاوية (0–180) | ذراع |
2، | انقل المؤازرة 2 (الكتف) إلى الزاوية | ذراع |
3، | حرك المؤازرة 3 (الكوع) إلى الزاوية | ذراع |
4، | حرك المؤازرة 4 (درجة المعصم) إلى الزاوية | ذراع |
5، | حرك المؤازرة 5 (لفة المعصم) إلى الزاوية | ذراع |
6، | انقل المؤازرة 6 (القابض) إلى الزاوية | ذراع |
v | حفظ وضعية الذراع الحالية | أَثَار |
l | ابدأ بلعب الأوضاع المحفوظة | أَثَار |
r | إعادة تعيين (مسح) جميع الأوضاع المحفوظة | أَثَار |
s | إيقاف التشغيل الوضعي | أَثَار |
o | تمكين وضع تشغيل الحلقة | أَثَار |
f | تعطيل وضع تشغيل الحلقة | أَثَار |
تنسيق الأوامر المؤازرة ومعالجتها
عند التحكم في الذراع، تستخدم أوامر المؤازرة التنسيق "ن، زاوية"، حيث N هو رقم المؤازرة (1–6) والزاوية هي الموضع بالدرجات (0–180). ال عمليةسيرفوكوماند () تقوم الوظيفة بتحليل هذه السلسلة، واستخراج قيمة الزاوية، وتعيينها من نطاق 0–180 درجة إلى نطاق PCA9685 PWM (150–600)، واستدعاء وظيفة الحركة السلسة.
إرشادات التعليمات البرمجية: وظائف التحكم في محرك Rover
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 stopMotors() {
motor1.run(RELEASE); motor2.run(RELEASE);
motor3.run(RELEASE); motor4.run(RELEASE);
}
بعد ذلك، تتحكم كل وظيفة حركة في جميع المحركات الأربعة في وقت واحد من خلال درع محرك Adafruit. بالنسبة للحركة للأمام والخلف، تدور المحركات الأربعة في نفس الاتجاه. من أجل الدوران، تعمل المحركات الموجودة على جانب واحد للأمام بينما يعمل الجانب الآخر للخلف (نمط التوجيه الانزلاقي / دوران الخزان). ال توقف المحركات () استخدامات الوظيفة يطلق لقطع الكهرباء عن جميع المحركات أيضًا، تم ضبط سرعة المحرك على 255 بوصة (كحد أقصى). يثبت; يمكنك خفض هذه القيمة إذا كنت تريد حركة أبطأ وأكثر تحكمًا. لإلقاء نظرة أعمق على التحكم في محرك التيار المستمر، راجع موقعنا البرنامج التعليمي لسائق المحرك L298N.
إرشادات التعليمات البرمجية: حركة مؤازرة سلسة
void moveToPositionSmoothly(int servoIndex, int targetPwmValue) {
int currentPwmValue = currentServoPositions[servoIndex];
if (targetPwmValue > currentPwmValue) {
for (int pos = currentPwmValue; pos <= targetPwmValue; pos += stepSize) {
pwm.setPWM(servoChannels[servoIndex], 0, pos);
delay(stepDelay);
}
} else {
for (int pos = currentPwmValue; pos >= targetPwmValue; pos -= stepSize) {
pwm.setPWM(servoChannels[servoIndex], 0, pos);
delay(stepDelay);
}
}
currentServoPositions[servoIndex] = targetPwmValue;
}
بدلاً من القفز مباشرة إلى الموضع المستهدف (مما يتسبب في حركة متشنجة ويمكن أن يؤدي إلى تلف التروس)، تنتقل هذه الوظيفة عبر قيم PWM المتوسطة وحدة واحدة في كل مرة مع تأخير قدره 10 مللي ثانية بين الخطوات. في الأساس، يعتمد اتجاه الحلقة (تزايدي أو تناقصي) على ما إذا كان الهدف أعلى أو أقل من الموضع الحالي. بعد اكتمال الحلقة، currentServoPositions يتم تحديث المصفوفة حتى يعرف النظام دائمًا مكان وجود كل مؤازرة بالفعل. لاحظ أنه أثناء تنشيط الحركة السلسة، يتم حظر Arduino في حلقة for ولا يمكنه معالجة الأوامر الجديدة. ومع ذلك، هذا مخصص لـ OmObiArm، ولكن يمكنك تحسينه باستخدام أساليب غير محظورة في إصدار أكثر تقدمًا. لمعرفة المزيد عن أساسيات المؤازرة، راجع موقعنا دليل التحكم بمحرك سيرفو من Arduino لـ SG90 وPCA9685.
إرشادات التعليمات البرمجية: وضع الحفظ والتشغيل والتكرار وإعادة تعيين المنطق
void saveCurrentPose() {
if (configCount < maxConfigurations) {
for (int i = 0; i < numServos; i++) {
savedConfigurations[configCount][i] = currentServoPositions[i];
}
configCount++;
}
}
void startPlayingPoses() {
if (configCount > 0) {
stopMotors();
isPlaying = true;
stopPlaying = false;
currentPoseIndex = 0;
}
}
void playNextPose() {
if (currentPoseIndex < configCount) {
for (int i = 0; i < numServos; i++) {
moveToPositionSmoothly(i, savedConfigurations[currentPoseIndex][i]);
}
delay(1000);
currentPoseIndex++;
} else {
isPlaying = false;
}
}
void playPosesInLoop() {
for (int i = 0; i < configCount; i++) {
if (stopPlaying) break;
for (int j = 0; j < numServos; j++) {
moveToPositionSmoothly(j, savedConfigurations[i][j]);
}
delay(1000);
}
}
void resetPoses() {
configCount = 0;
isPlaying = false;
loopPlayback = false;
currentPoseIndex = 0;
}
كيفية عمل التسجيل والتشغيل
وأخيرًا، يسمح نظام الوضعية بتسجيل وإعادة تشغيل أوضاع الذراع. حفظCurrentPose() نسخ جميع قيم PWM المؤازرة الستة الحالية إلى ملف التكوينات المحفوظة قم بضبط العداد وزيادة عدده، بما يصل إلى 10 أوضاع كحد أقصى في المجمل. startPlayingPoses() يقوم أولاً بإيقاف محركات العربة الجوالة (لمنع الروبوت من القيادة أثناء تشغيل الذراع)، ثم يضبط إشارات التشغيل ويعيد ضبط مؤشر الوضعية على 0.
ثم، بلاينكستبوز () ينقل جميع الماكينات الستة إلى المواضع المخزنة في الوضع الحالي، وينتظر ثانية واحدة، ويتقدم إلى الوضع التالي. عند تشغيل جميع الأوضاع، يتوقف التشغيل تلقائيًا. بلايبوسينلوب () يتنقل بشكل مستمر عبر جميع الأوضاع المحفوظة حتى stopPlaying يتم تعيين العلامة بواسطة الأمر "s". إعادة تعيين الوضعيات () مسح جميع الأوضاع المحفوظة وإعادة تعيين جميع علامات حالة التشغيل. ولهذا السبب، أثناء تشغيل الوضعيات، يوقف النظام العربة الجوالة ويتجاهل جميع الأوامر الجديدة باستثناء "s" للتوقف. هذا إجراء أمان يمنع العربة الجوالة من القيادة بشكل غير متوقع أثناء تسلسل الذراع الآلي.
الخطوة 6: تطوير تطبيق OmObiArmControl للتحكم بالبلوتوث
الآن، تطبيق OmObiArmControl هو تطبيق Android مخصص يتحكم في OmObiArm لاسلكيًا عبر البلوتوث. ولهذا السبب، يمكنك التحكم في الذراع الروبوتية، وحفظ الوضعيات، وقيادة العربة الجوالة من هاتفك. كما تم إنشاء التطبيق باستخدام MIT App Inventor وهو متاح في مستودع GitHub.
نظرة عامة على التطبيق والميزات الرئيسية

وباختصار، يوفر التطبيق الميزات التالية:
اتصال بلوتوث: أولاً، يتصل التطبيق بوحدة Bluetooth HC-05 الموجودة على OmObiArm. بعد ذلك، يقوم المستخدمون بإقران أجهزتهم وإنشاء اتصال عبر زر "تحديد جهاز". بعد الاتصال، تتغير شاشة الحالة إلى "متصل".
التحكم بالذراع الآلي: تتحكم ستة أشرطة منزلقة في التطبيق في مفاصل الذراع، من القاعدة إلى المقبض. أيضًا، يرسل كل شريط تمرير قيمة موضع إلى محرك سيرفو المقابل في الوقت الفعلي. لذا، عندما تقوم بضبط شريط التمرير، يرسل التطبيق الأمر المؤازر بالتنسيق ن،زاوية\ن (على سبيل المثال، 1,90\ن لتحريك المؤازرة من 1 إلى 90 درجة).
التحكم في منصة الهاتف المحمول: أربعة أزرار اتجاهات (للأمام، للخلف، لليسار، لليمين) تقود العربة الجوالة. بالإضافة إلى ذلك، يعمل زر الإيقاف على إيقاف جميع المحركات على الفور. بعد ذلك، يرسل كل زر أمراً مكونًا من حرف واحد متبوعًا بسطر جديد.
إدارة الوضع: يقوم زر "حفظ" بتخزين موضع الذراع الحالي كوضعية (يرسل v\n). بعد ذلك، يبدأ "تشغيل" تشغيل الأوضاع المحفوظة (يرسل ل\ن). "إعادة تعيين" يمسح جميع التكوينات المحفوظة (يرسل ص \ ن). بالإضافة إلى ذلك، يعمل مفتاح التبديل على تمكين أو تعطيل التشغيل المتكرر (يرسل على لتمكين و و\ن للتعطيل).
عرض ردود الفعل: أخيرًا، في الجزء العلوي، يعرض التطبيق حالة اتصال Bluetooth الحالية وعدد الأوضاع المحفوظة.
بناء التطبيق خطوة بخطوة
إعداد اتصال بلوتوث
أولاً، استخدم أ ListPicker مكون في MIT App Inventor. في حدث "قبل الانتقاء"، قم بملء القائمة بأجهزة Bluetooth المقترنة المتوفرة. في حدث "بعد الانتقاء"، حاول الاتصال بالجهاز المحدد. بعد ذلك، قم بتحديث الواجهة لعرض حالة "متصل". لتجديد المعلومات حول إنشاء تطبيقات Bluetooth، راجع موقعنا البرنامج التعليمي لوحدة البلوتوث HC-05، والذي يغطي إعداد MIT App Inventor Bluetooth بالتفصيل.
التحكم في مفصل الذراع باستخدام المتزلجون
وبعد ذلك، أضف ستة المنزلق المكونات، واحدة لكل أجهزة. بعد ذلك، قم بتعيين نطاق كل شريط تمرير من 0 إلى 180. في حدث "PositionChanged" لكل شريط تمرير، أرسل سلسلة الأوامر المقابلة عبر البلوتوث. على سبيل المثال، يرسل شريط التمرير 1 1,\n، يرسل المنزلق 2 2,\nوهكذا حتى Slider 6.

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

تشكل ضوابط الإدارة
بعد ذلك، أضف أزرارًا للحفظ والتشغيل وإعادة الضبط وإيقاف التشغيل، بالإضافة إلى مفتاح تبديل لوضع الحلقة. أيضًا، يرسل كل زر سلسلة الأوامر الخاصة به: حفظ الإرسال v\n، اللعب يرسل ل\ن، إعادة تعيين يرسل ص \ ن، وإيقاف الإرسال س\ن. وبالمثل، يرسل تبديل الحلقة على عند التمكين و و\ن عند تعطيله.
عرض ردود الفعل في الوقت الحقيقي
وأخيرًا، قم بإضافة مكونات التسمية لعرض حالة اتصال Bluetooth وعدد الأوضاع المحفوظة. قم بتحديث هذه التسميات ديناميكيًا أثناء اتصال المستخدم وحفظه وإعادة تعيينه.

كيف يعمل التطبيق عمليا
الاتصال بالروبوت: أولاً، افتح التطبيق وانقر على "تحديد جهاز". اختر وحدة HC-05 من قائمة أجهزة Bluetooth المقترنة. عند الاتصال، يتم تحديث تسمية الحالة إلى "متصل".
التحكم بالذراع الروبوتية: ثم استخدم المنزلقات الستة لتحريك مفاصل الذراع. وبسبب هذا، يتم إرسال التعديلات إلى الروبوت في الوقت الحقيقي عبر البلوتوث. يتحكم كل شريط تمرير بشكل مستقل في قناة مؤازرة واحدة.
إدارة الوضعيات: لحفظ الوضعية، ضع الذراع في المكان الذي تريده، ثم اضغط على "حفظ" لتسجيل الوضعية. يمكنك أيضًا تكرار ذلك لما يصل إلى 10 أوضاع. اضغط على "تشغيل" لإعادة تشغيل جميع الأوضاع المحفوظة بالتسلسل. اختياريًا، قم بتمكين تبديل الحلقة للتشغيل المستمر. اضغط على "إيقاف" لإيقاف التشغيل في أي وقت. اضغط على "إعادة تعيين" لمسح جميع الأوضاع المحفوظة.
قيادة روفر: بعد ذلك، استخدم أزرار الاتجاهات لقيادة العربة الجوالة للأمام أو للخلف أو لليسار أو لليمين. اضغط أيضًا على "إيقاف" لإيقاف جميع المحركات على الفور. تذكر أن النظام يتجاهل أوامر العربة الجوالة أثناء تشغيل الوضعية من أجل السلامة.
الخطوة 7: معايرة واختبار وضبط OmObiArm
بعد تحميل الكود وتثبيت التطبيق، حان الوقت لاختبار ومعايرة نظام OmObiArm الكامل. ثم اتبع هذا التسلسل للتحقق من كل نظام فرعي قبل محاولة التشغيل الكامل.
7.1 فحص الاتصال
للبدء، افتح تطبيق OmObiArmControl، وانقر على "تحديد جهاز"، وقم بالاقتران بوحدة HC-05. بعد ذلك، يجب أن يتغير مؤشر LED HC-05 من الوميض السريع (وضع الإقران) إلى الوميض البطيء أو التشغيل الثابت (متصل). يجب أن يعرض التطبيق بعد ذلك كلمة "متصل". إذا فشل الاتصال، فتأكد من أن HC-05 مزود بالطاقة وأنك قمت بتمكين Bluetooth على هاتفك. لاحظ أن رمز الاقتران الافتراضي هو عادةً 1234 أو 0000.
7.2 التحقق من محرك روفر
بعد ذلك، اختبر اتجاه حركة كل مركبة جوالة واحدًا تلو الآخر. بعد ذلك، اضغط على الأمام والخلف واليسار واليمين في التطبيق وتأكد من تحرك العربة الجوالة في الاتجاه الصحيح. إذا كان المحرك يدور بطريقة خاطئة، فقم بتبديل أسلاك المحرك الموجودة على طرف Motor Shield بزوج المحرك هذا. تأكد أيضًا من أن زر الإيقاف يوقف جميع الحركات فورًا.
7.3 معايرة المؤازرة
بعد ذلك، قم باختبار كل قناة مؤازرة واحدة تلو الأخرى. ثم، حرك شريط التمرير 1 ببطء وتحقق من استجابة المؤازرة 1 (الدوران الأساسي). كرر أيضًا لجميع أشرطة التمرير الستة. إذا لم يستجب جهاز مؤازر، فتحقق من أسلاك قناة PCA9685 وتأكد من تطابق القناة مع تعيين الكود (القنوات 0، 4، 8، 9، 12، 13). إذا اهتزت المؤازرة أو طنينت دون أن تتحرك، فتحقق من مصدر الطاقة 6 فولت من LM2596. يمكنك أيضًا ضبط نطاق شريط التمرير إذا وصل أي جهاز مؤازر إلى حده الميكانيكي قبل أن يصل شريط التمرير إلى 0 أو 180. للقيام بذلك، قم بتعديل قيم تعيين PWM في الكود (الرمز الخريطة (الموقع، 0، 180، 150، 600) line) لضبط النطاق القابل للاستخدام لكل أجهزة.
7.4 التحقق من الحفظ والتشغيل
أولاً، حرك الذراع إلى موضع محدد وانقر على "حفظ". بعد ذلك، حرك الذراع إلى موضع مختلف وانقر على "حفظ" مرة أخرى. انقر الآن على "تشغيل" وتأكد من أن الذراع يعيد تشغيل الوضعين المحفوظين بسلاسة بالترتيب. اختبر "إعادة الضبط" لمسح الأوضاع، ثم تحقق من أن "تشغيل" لا يفعل شيئًا عندما لا يتم حفظ أي وضعيات. اختبر تبديل الحلقة من خلال تمكينه وبدء التشغيل. يجب أن يتنقل الذراع بين الأوضاع بشكل مستمر حتى تنقر على "إيقاف".
7.5 اختبار إجهاد العربة الجوالة والذراع المشترك
بمجرد أن يعمل كلا النظامين الفرعيين بشكل فردي، قم باختبارهما معًا. بعد ذلك، قم بقيادة العربة الجوالة أثناء تحريك مزلقات الذراع. قم أيضًا بمراقبة جهد البطارية تحت الحمل المشترك. على سبيل المثال، إذا أصبح الروبوت بطيئًا، أو ارتعشت الماكينات، أو تمت إعادة ضبط Arduino، فمن المحتمل أن تكون لديك مشكلات في مصدر الطاقة. يجب أن يوفر جهاز LiPo 7.4 فولت المشحون بالكامل تيارًا كافيًا، ولكن الماكينات المحملة بكثافة (على سبيل المثال، حمل جسم ثقيل بالمقبض أثناء القيادة) قد تسبب انخفاضًا في الجهد. إذا حدث ذلك، ففكر في استخدام بطارية ذات سعة أعلى أو تقليل سرعة المحرك في الكود.
7.6 تسلسل الاختبار الآمن
أخيرًا، للحصول على اختبار أول موثوق به، اتبع هذا الترتيب: (1) تشغيل الروبوت مع وضع الذراع في وضع مريح، (2) الاتصال من التطبيق، (3) اختبار حركة العربة الجوالة على سطح مستو، (4) اختبار كل شريط تمرير مؤازر ببطء، (5) اختبار الحفظ واللعب في وضعيتين بسيطتين، (6) وضع حلقة الاختبار، (7) اختبار التوقف وإعادة الضبط، (8) أخيرًا اختبار القيادة وحركة الذراع معًا. هذا النهج التدريجي يعزل المشاكل ويمنع الضرر.
استكشاف مشكلات OmObiArm الشائعة وإصلاحها
إذا لم يعمل شيء ما كما هو متوقع، فاستخدم دليل استكشاف الأخطاء وإصلاحها هذا لتحديد المشكلات الأكثر شيوعًا وإصلاحها.
أزواج HC-05 ولكن الروبوت لا يستجيب للأوامر: تحقق من توصيل HC-05 TXD بـ Arduino RX (الرقم 0) وRXD بـ Arduino TX (الرقم 1). تأكد أيضًا من أن معدل البث بالباود في الكود هو 9600، والذي يطابق الإعداد الافتراضي HC-05. ثم حاول فتح Arduino Serial Monitor (مع فصل HC-05) للتحقق من تشغيل الكود وطباعة رسالة "Waiting for Commands".
فشل تحميل رسم اردوينو: أولاً، افصل وحدة HC-05 عن الأطراف 0 و1 قبل التحميل. وذلك لأن HC-05 يتداخل مع اتصال USB التسلسلي المستخدم للتحميل. أعد توصيله بعد اكتمال التحميل.
مشاكل المؤازرة والمحركات
ارتعاش الماكينات أو الطنانة أو المماطلة: أولاً، تحقق من جهد الخرج LM2596. ثم، يجب أن يكون بالضبط 6 فولت. إذا انخفض الجهد تحت الحمل، فقد تكون البطارية منخفضة أو قد لا يوفر LM2596 تيارًا كافيًا. تحقق أيضًا من عدم وجود أسلاك PCA9685 فضفاضة. يمكن أن ينجم الارتعاش أيضًا عن عدم كفاية الطاقة، خاصة عندما تتحرك العديد من الماكينات في نفس الوقت.
يتحرك العربة الجوالة لكن الذراع لا تستجيب: تحقق من صحة توصيلات PCA9685 SDA وSCL إلى Arduino Mega (الجهات 20 و21). تأكد أيضًا من أن PCA9685 يستقبل 6 فولت على طرف الطاقة الخاص به. تحقق من عنوان I2C — الافتراضي هو 0x40. قم بتشغيل رسم الماسح الضوئي I2C للتأكد من أن Arduino اكتشف PCA9685.
تتحرك الذراع ولكن العربة الجوالة لا تستجيب: تحقق من أسلاك المحرك إلى أطراف Motor Shield من M1 إلى M4. تأكد أيضًا من تثبيت Motor Shield بقوة على Arduino Mega. تحقق أيضًا من أن البطارية توفر جهدًا كافيًا من خلال محطات الطاقة Motor Shield.
تشكل وقضايا السلطة
لا يتم حفظ الأوضاع أو اللعب بشكل صحيح: أولاً، تأكد من أنك ترسل الأوامر الصحيحة من التطبيق (v للحفظ، l للتشغيل). تحقق أيضًا من إخراج جهاز المراقبة التسلسلي بحثًا عن رسائل عدد الوضعيات. تذكر أيضًا أن الحد الأقصى هو 10 أوضاع — إذا قمت بالفعل بحفظ 10 أوضاع، فسيتجاهل النظام عمليات الحفظ الإضافية.
تشغيل الحلقة لا يتوقف: أولاً، لإيقاف التشغيل، أرسل الأمر "s" (أحرف صغيرة) من التطبيق. أثناء تشغيل الحلقة، يتحقق النظام من أمر الإيقاف بين الوضعيات، وليس أثناء الحركة المؤازرة. ولهذا السبب، قد يكون هناك تأخير قصير قبل أن تتوقف الحلقة فعليًا. تأكد من أن تطبيقك يرسل الحرف الصحيح.
انخفاض الجهد والسلوك غير المنتظم تحت الحمل: في معظم الحالات، يعني هذا أن البطارية لا يمكنها توفير تيار كافٍ لتشغيل المحرك والمؤازرة في وقت واحد. ولذلك، استخدم ليبو مشحونة بالكامل. إذا استمرت المشكلة، ففكر أيضًا في استخدام بطارية ذات سعة أعلى أو تشغيل محركات العربة الجوالة ونظام المؤازرة من بطاريات منفصلة.
المحركات تدور في الاتجاه الخاطئ: بعد ذلك، ما عليك سوى تبديل السلكين الموجودين على طرف Motor Shield للمحرك المتأثر. بمعنى آخر، لا تحتاج إلى تغيير الرمز.
الأسئلة الشائعة (FAQ)
OmObiArm هو مشروع ذراع آلي متنقل DIY يجمع بين مركبة جوالة ذات أربع عجلات يتم التحكم فيها عن طريق البلوتوث (استنادًا إلى منصة OmObi) وذراع آلي 6-DOF (استنادًا إلى تصميم OmArm). كما يتم التحكم فيه لاسلكيًا من هاتف Android عبر البلوتوث وArduino Mega.
تم تصميم هذا المشروع لـ Arduino Mega 2560 لأنه يحتوي على ذاكرة أكبر، والمزيد من منافذ الإدخال/الإخراج، ومنافذ تسلسلية إضافية للأجهزة. يوصى باستخدام Mega لأن الكود المدمج وتخزين الوضع قد يتجاوز SRAM الخاص بـ Uno. إذا كان يجب عليك استخدام أونو، فقم بتقليل عدد الأوضاع المحفوظة.
يستخدم OmObiArm وحدة Bluetooth HC-05 للاتصالات اللاسلكية. في الأساس، HC-05 عبارة عن وحدة بلوتوث كلاسيكية (SPP) تعمل بسرعة 9600 باود افتراضيًا ويسهل إقرانها بأجهزة Android. للحصول على دليل كامل حول استخدام وحدتي HC-05 وHC-06، راجع البرنامج التعليمي لوحدة Bluetooth Arduino HC-05 / HC-06.
يستخدم Adafruit Motor Shield العديد من منافذ PWM الخاصة بـ Arduino، لذا يتصل PCA9685 عبر I2C بدلاً من ذلك (باستخدام SDA وSCL فقط) ويوفر 16 قناة PWM مستقلة. كما أنه يعمل على تشغيل جميع الماكينات من مصدر منفصل بجهد 6 فولت، مما يحمي Arduino.
حاليًا، يمكنك حفظ ما يصل إلى 10 أوضاع. يقوم كل وضع بتخزين قيم PWM لجميع الماكينات الستة في ذاكرة الوصول العشوائي Arduino. يتم فقدان الأوضاع عند إزالة الطاقة. يمكنك زيادة الحد الأقصى للكود أو استخدام EEPROM للتخزين المستمر.
المزيد من الأسئلة الشائعة
في الأساس، يستخدم HC-05 تقنية Bluetooth Classic (SPP)، والتي لا تدعمها أجهزة iPhone محليًا. للتحكم في الروبوت من نظام iOS، استبدل HC-05 بوحدة BLE (مثل HM-10 أو ESP32 مع BLE) وقم بتحديث كود وتطبيق Arduino وفقًا لذلك.
هذه هي ميزة السلامة. أثناء تشغيل الوضعية، يستخدم الذراع أوامر مؤازرة الحظر. إذا تمكنت المركبة من القيادة في نفس الوقت، فقد تتحرك بشكل غير متوقع وتتسبب في حدوث تصادمات. يوقف الكود محركات العربة الجوالة قبل بدء التشغيل.
يوصى باستخدام بطارية LiPo بقوة 7.4 فولت 2S بسعة 5300 مللي أمبير على الأقل. بشكل عام، يعمل الجهد الاسمي 7.4 فولت بشكل جيد لكل من محركات التيار المستمر (عبر Motor Shield) ومحول التنحي LM2596. توفر البطاريات ذات السعة العالية أوقات تشغيل أطول ومعالجة أفضل للتيار أثناء تشغيل العربة الجوالة والذراع معًا.
تعتمد سرعة المؤازرة على ثوابتين في الكود: stepDelay وstepSize. زيادة stepDelay يبطئهم. كما أن زيادة حجم الخطوة يجعل الحركة أسرع ولكن أقل سلاسة. الإعدادات الافتراضية (تأخير 10 مللي ثانية، خطوة وحدة واحدة) تعطي حركة معتدلة وسلسة.
نعم. في الواقع، يحتوي Arduino Mega على الكثير من منافذ الإدخال/الإخراج المجانية لأجهزة الاستشعار مثل أجهزة الاستشعار بالموجات فوق الصوتية HC-SR04 أو أجهزة استشعار الأشعة تحت الحمراء أو حتى وحدة الكاميرا. في الواقع، تضيف الترقية المخططة التالية لـ OmObiArm أربعة أجهزة استشعار بالموجات فوق الصوتية لتجنب العوائق.
تتوفر ملفات STL القابلة للطباعة ثلاثية الأبعاد على Cults3D وفي متجر OmArTronics الخاص بنا. يتوفر كود مصدر Arduino الكامل وملف مشروع MIT App Inventor على GitHub.
الموارد والمشاريع القادمة
ملفات المشروع
- مستودع جيثب - أكمل كود Arduino وملف مشروع MIT App Inventor لـ OmObiArm.
- ملفات Cults3D STL | متجر أومارترونيكس - أجزاء قابلة للطباعة ثلاثية الأبعاد لهيكل OmObiArm وروابط الذراع والقابض.
دروس OmArTronics ذات الصلة
- OmObi: بناء سيارة روبوت يتم التحكم فيها عن طريق البلوتوث - مشروع قاعدة العربة الجوالة الذي يعتمد عليه OmObiArm.
- OmArm: ذراع آلي 6-DOF يمكنك صنعه بنفسك مع تحكم عبر البلوتوث - مشروع الذراع الروبوتية الذي يدمجه OmObiArm.
- الذراع الروبوتية ذات 6 أبعاد - طباعة ثلاثية الأبعاد، وتوصيل أسلاك وبرمجة - النسخة الأصلية للذراع الآلية التي يتم التحكم فيها عن طريق مقياس الجهد.
- برنامج تعليمي كامل لوحدة البلوتوث Arduino HC-05 / HC-06 - دليل أساسي لفهم اتصال Bluetooth مع Arduino.
- دليل التحكم بمحرك مؤازر اردوينو: SG90، PWM، وPCA9685 - تعلم أساسيات التحكم المؤازر واستخدام برنامج التشغيل PCA9685.
- أساسيات برمجة الأردوينو: الدليل الكامل للمبتدئين - ابدأ هنا إذا كنت جديدًا في برمجة Arduino.
- سيارة روبوتية متقدمة ومستقلة مع أجهزة استشعار Arduino Mega والموجات فوق الصوتية — مشروع مماثل باستخدام نفس درع المحرك وArduino Mega بقدرات ذاتية.
- سائق محرك L298N مع اردوينو: دليل التحكم في محرك التيار المستمر - برنامج تعليمي بديل لسائق المحرك لفهم التحكم في محرك الجسر H.
الترقيات التالية المقترحة لـ OmObiArm
- تجنب العوائق بالموجات فوق الصوتية: أضف أربعة أجهزة استشعار HC-SR04 لتمكين التنقل المستقل أثناء أداء الذراع للمهام. انظر لدينا HC-SR04 البرنامج التعليمي لجهاز الاستشعار بالموجات فوق الصوتية و مشروع رادار الاردوينو للإلهام.
- تخزين وضعية EEPROM: قم بحفظ الأوضاع في EEPROM بحيث تستمر عبر دورات الطاقة، مما يسمح للروبوت بتذكر مهامه المبرمجة.
- التحكم في السرعة: أضف تحكمًا متغيرًا في السرعة للمركبة باستخدام تعديلات سرعة PWM وشرائح التطبيق بدلاً من السرعة القصوى الثابتة.
- رؤية الكاميرا والكمبيوتر: قم بتركيب وحدة كاميرا للكشف عن الأشياء المرئية وعمليات الالتقاط والمكان المستقلة.
- ترقية واي فاي: استبدل HC-05 بـ ESP32 للتحكم المعتمد على WiFi، مما يتيح التحكم في متصفح الويب أو التكامل مع أنظمة التشغيل الآلي للمنزل.
الخاتمة
لذا، إذا كنت قد اتبعت هذا البرنامج التعليمي من البداية إلى النهاية، فلديك الآن طريقة عمل ذراع روبوتية متنقلة يتم التحكم فيها عن طريق البلوتوث بنيت من الصفر. الآن، يمكن لـ OmObiArm الخاص بك القيادة في جميع الاتجاهات، وتحريك ذراع آلية ذات 6 DOF، وحفظ أوضاع الذراع وإعادة تشغيلها، وتكرار التسلسلات الآلية، وكل ذلك يتم التحكم فيه لاسلكيًا من هاتف Android الخاص بك.
خلال هذا المشروع، اكتسبت أيضًا خبرة عملية في التصميم والطباعة ثلاثية الأبعاد، والتجميع الميكانيكي، والأسلاك الإلكترونية، وبرمجة Arduino، والتحكم المؤازر I2C باستخدام PCA9685، والتحكم في محرك التيار المستمر باستخدام Adafruit Motor Shield، واتصال Bluetooth مع HC-05، وتطوير تطبيقات Android مع MIT App Inventor. في نهاية المطاف، كل هذا ينتقل مباشرة إلى مشاريع الروبوتات والأتمتة الأكثر تقدمًا.
وفي المشروع التالي، نخطط أيضًا لإضافة أربعة أجهزة استشعار بالموجات فوق الصوتية إلى OmObiArm لتجنب العوائق والكشف المستقل عن الأشياء، حتى تتمكن الذراع من العثور على الأشياء وإمساكها بمفردها. حتى لا تنزعج ل أومارترونيكس للترقية القادمة!
تنزيل ملفات الطباعة ثلاثية الأبعاد (STL)
كما أن جميع ملفات STL القابلة للطباعة ثلاثية الأبعاد لهذا المشروع متاحة للتنزيل. يمكنك الحصول عليها من متجرنا أو تصفحها على Cults3D:
- متجر OmArTronics: قم بتنزيل ملفات المشروع من OmArTronics - احصل على حزمة المشروع الكاملة بما في ذلك ملفات STL ومخططات الأسلاك وكود المصدر التي يتم تسليمها إلى بريدك الإلكتروني.
- الطوائف3D: عرض على Cults3D - تصفح وتنزيل ملفات النماذج ثلاثية الأبعاد على Cults3D.
مرحباً فريق أومارترونيكس بلس
آمل أن يكون كل شيء على ما يرام معك!
هذه آشلي من JLCMC، وهي علامة تجارية فرعية تابعة لشركة JLCPCB. نحن ملتزمون ببناء خدمة عالمية متكاملة. هناك أكثر من آلاف المكونات الميكانيكية التي تناسب سيناريوهات الاستخدام والاحتياجات المختلفة.
لقد أُعجبنا بنهجك العملي ومشاريعك الإبداعية التي تقوم بها بنفسك، خاصةً عملك مع الأذرع الروبوتية. إن تركيزكم على الحلول العملية والمبتكرة يتوافق تمامًا مع مهمتنا في شركة JLCMC لتوفير مكونات ميكانيكية عالية الجودة. نحن نعتقد أن التعاون سيكون مفيدًا للطرفين، حيث إن اهتمام جمهورك بالروبوتات والأتمتة يتطابق بشكل وثيق مع الحلول التي نقدمها. ستسمح لنا الشراكة معكم بتقديم قطعنا الدقيقة إلى مجتمع مهتم بالتكنولوجيا ومتحمس للتقنيات الذكية والفعالة.
سنكون سعداء بتزويدك بمنتجاتنا لاستخدامك، إذا كنت مهتمًا أو إذا كنت بحاجة إلى تحديث مكوناتك أو لديك أي أسئلة أخرى، فلا تتردد في الاتصال بنا!
أشكرك على وقتك وأتطلع إلى الاستماع منك!
مع أطيب التحيات
آشلي