جدول المحتويات:

روبوت الزبدة: روبوت الأردوينو الذي يعاني من أزمة وجودية: 6 خطوات (بالصور)
روبوت الزبدة: روبوت الأردوينو الذي يعاني من أزمة وجودية: 6 خطوات (بالصور)

فيديو: روبوت الزبدة: روبوت الأردوينو الذي يعاني من أزمة وجودية: 6 خطوات (بالصور)

فيديو: روبوت الزبدة: روبوت الأردوينو الذي يعاني من أزمة وجودية: 6 خطوات (بالصور)
فيديو: روبوت يتكلم 2024, شهر نوفمبر
Anonim
Image
Image

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

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

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

للتلخيص ، يحتاج الروبوت إلى تلبية المتطلبات التالية:

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

الخطوة 1: المفهوم الرئيسي

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

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

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

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

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

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

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

الخطوة 2: المواد

الأجزاء الميكانيكية

  • طابعة ثلاثية الأبعاد وآلة القطع بالليزر

    • سيتم استخدام PLA للطباعة ثلاثية الأبعاد ولكن يمكنك أيضًا استخدام ABS
    • سيتم استخدام صفيحة من خشب البتولا 3 مم للقطع بالليزر لأنها تتيح إمكانية إجراء تعديلات لاحقًا بسهولة ، كما يمكن استخدام زجاج زجاجي ولكن من الصعب تعديله بمجرد قطعه بالليزر دون إتلافه
  • البراغي والصواميل والغسالات

    يتم تثبيت معظم المكونات معًا باستخدام مسامير رأس زر M3 وغسالات وصواميل ، لكن بعضها يتطلب مجموعة مسامير M2 أو M4. طول البراغي في حدود 8-12 ملم

  • فواصل PCB ، 25 مم و 15 مم
  • 2 محركات مؤازرة مع عجلات متوافقة
  • بعض الأسلاك المعدنية السميكة قطرها حوالي 1-2 مم

أجزاء إلكترونية

  • متحكم

    1 لوحة اردوينو UNO

  • أجهزة المحركات

    • 2 محركات مؤازرة كبيرة: Feetech مستمر 6 كجم 360 درجة
    • 2 محرك سيرفو صغير: Feetech FS90
  • مجسات

    • 1 جهاز استشعار بالموجات فوق الصوتية
    • 2 مستشعرات القرب من الأشعة تحت الحمراء
    • عدد 2 من الثنائيات الضوئية IR
  • بطاريات

    • 1 حامل بطارية 9 فولت + بطارية
    • 1 حامل بطارية 4AA + بطاريات
    • 1 صندوق بطارية 9 فولت + بطارية
  • مكونات إضافية

    • بعض الأسلاك القافزة والأسلاك ولوحات اللحام
    • بعض المقاومات
    • 1 IR LED
    • 3 مفاتيح
    • 1 جرس
    • 1 زر
    • 1 موصل بطارية Arduino إلى 9V

الخطوة الثالثة: اختبار الإلكترونيات

اختبار الإلكترونيات
اختبار الإلكترونيات
اختبار الإلكترونيات
اختبار الإلكترونيات

انشاء الزر:

يتكون الزر ببساطة من مفتاح كهربائي ، ومصباح LED يعمل بالأشعة تحت الحمراء ، ومقاوم 220 أوم على التوالي ، مدعومًا ببطارية 9 فولت. تم وضع هذا في حزمة بطارية 9 فولت لتصميم مضغوط ونظيف.

إنشاء وحدات استقبال الأشعة تحت الحمراء:

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

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

  • محركات مؤازرة مستمرة
  • أجهزة الاستشعار بالموجات فوق الصوتية؛
  • محركات مؤازرة غير مستمرة
  • صفارة؛
  • كشف اتجاه زر الأشعة تحت الحمراء.
  • كشف الحافة بواسطة مستشعرات القرب ؛

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

الخطوة 4: تصميم القطع المطبوعة بالليزر والقطع ثلاثية الأبعاد

تصميم القطع المطبوعة والليزر ثلاثية الأبعاد
تصميم القطع المطبوعة والليزر ثلاثية الأبعاد
تصميم القطع المطبوعة والليزر ثلاثية الأبعاد
تصميم القطع المطبوعة والليزر ثلاثية الأبعاد
تصميم القطع المطبوعة والليزر ثلاثية الأبعاد
تصميم القطع المطبوعة والليزر ثلاثية الأبعاد

قطع الليزر

يتكون التجميع من ثلاث لوحات أفقية رئيسية مثبتة معًا بواسطة فواصل PCB للحصول على تصميم مفتوح يوفر وصولاً سهلاً إلى الإلكترونيات إذا لزم الأمر.

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

يتم قطع القطع الصغيرة لأبعاد المؤازرة الكبيرة لتثبيتها في التجميع.

قطع مطبوعة ثلاثية الأبعاد

بالإضافة إلى القطع بالليزر ، ستحتاج بعض القطع إلى الطباعة ثلاثية الأبعاد:

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

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

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

يمكن العثور على جميع ملفات SOLIDWORKS في المجلد المضغوط.

الخطوة 5: التجميع والأسلاك

Image
Image
التجميع والأسلاك
التجميع والأسلاك
التجميع والأسلاك
التجميع والأسلاك
التجميع والأسلاك
التجميع والأسلاك

سيكون التجميع مزيجًا من الأسلاك وربط المكونات معًا ، بدءًا من الأسفل إلى الأعلى.

لوحة أسفل

يتم تجميع اللوحة السفلية مع حزمة بطارية 4AA ، ومحركات مؤازرة ، والجزء المطبوع (إرفاق عجلة الكرة أسفل اللوحة) ، وجهازي استشعار الحافة ، و 6 فواصل للذكور والإناث.

اللوحة الوسطى

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

يمكن توصيل وحدة الموجات فوق الصوتية بوحدة مؤازرة غير مستمرة ، والتي يتم تثبيتها على اللوحة الوسطى مع Arduino ، وحزمة البطارية 9V (تشغيل اردوينو) ، ووحدتي استقبال الأشعة تحت الحمراء في مقدمة الروبوت. هذه الوحدات مصنوعة من خلال ألواح اللحام من خلال الفتحات ومثبتة بمسامير على اللوحة. تم تصوير الدوائر الخاصة بهذه الوحدات في المخططات العامة.

اللوحة العلوية

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

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

آخر شيء يجب اختباره وتصحيحه هو زاوية المؤازرة لفتح الغطاء بشكل صحيح.

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

في نهاية هذه الخطوة ، ينتهي التجميع والجزء المتبقي الأخير هو الرموز المفقودة.

الخطوة 6: البرمجة: وضع كل شيء معًا

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

أولاً ، يتم تحديد السرعة العامة للروبوت مع المتغير "تذكير". هذا "التذكير" هو قيمة تتذكر الاتجاه الذي كان الروبوت يدور فيه. إذا كان "تذكير = 1" ، فإن الروبوت كان / يتجه إلى اليسار ، وإذا كان "تذكير = 2" ، فإن الروبوت كان / يتجه إلى اليمين.

سرعة int = 9 ؛ // السرعة العامة للروبوت

تذكير int = 1 ؛ // الاتجاه الأولي

في إعداد الروبوت ، يتم تهيئة الملفات الفرعية المختلفة للبرنامج. في هذه الملفات الفرعية ، تتم كتابة الوظائف الأساسية للتحكم في المحركات ، وأجهزة الاستشعار ، …. من خلال تهيئتها في الإعداد ، يمكن استخدام الوظائف الموضحة في كل ملف من هذه الملفات في الحلقة الرئيسية. من خلال تنشيط الوظيفة r2D2 () ، سيقوم الروبوت بإصدار ضوضاء مثل الروبوت R2D2 من امتياز فيلم Star Wars عندما يبدأ. هنا يتم تعطيل وظيفة r2D2 () لمنع الجرس من سحب الكثير من التيار.

// Setup @ reset // ----------------

إعداد باطل () {initialize_IR_sensors () ، initialize_obstacles_and_edges () ، initialize_movement () ، initialize_lid () ، initialize_buzzer () ، // r2D2 () ؛ تذكير int = 1 ؛ // بداية الاتجاه الأولي (تذكير) ؛ }

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

// Starter Loop: استدر وابحث عن الزر // ------------------------------------ ----------------

void Starter (int reminder) {if (isedgeleft () || isedgeright ()) {// Detect the edgeDetected (reminder)؛ } else {bool cond = true؛ while (cond == true) {if (buttonleft () == false && buttonright () == false && isButtonDetected () == true) {cond = false؛ } آخر {إذا (تذكير == 1) {// كنا نستدير لليسار إذا (isobstacleleft ()) {stoppeed ()؛ تجنب العائق (تذكير) ؛ } else if (isedgeleft () || isedgeright ()) {// Detect the edges edgeDetected (reminder)؛ } else {turnleft (speed)؛ }} else if (note == 2) {if (isobstacleright ()) {stoppeed ()؛ تجنب العائق (تذكير) ؛ } else if (isedgeleft () || isedgeright ()) {// Detect the edges edgeDetected (reminder)؛ } else {turnright (speed)؛ }}}}}}

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

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

الطريقة التي يعمل بها روتين المسار هي كما يلي: عند اكتشاف الزر ، يتحرك الروبوت نحو الزر عن طريق الدوران في نفس الاتجاه الذي كان يدور فيه (باستخدام متغير التذكير) وفي نفس الوقت يتحرك للأمام قليلاً. إذا استدار الروبوت بعيدًا جدًا ، فسيتم فقد الزر مرة أخرى ، وفي هذه المرحلة يتذكر الروبوت أنه يحتاج إلى الدوران في الاتجاه الآخر. يتم ذلك أيضًا أثناء المضي قدمًا قليلاً. من خلال القيام بذلك ، يتحول الروبوت باستمرار إلى اليسار ويستدير لليمين ، ولكن في هذه الأثناء لا يزال يتقدم نحو الزر. في كل مرة يعثر الروبوت على الزر ، يستمر في الدوران حتى يفقده وفي هذه الحالة يبدأ في التحرك في الاتجاه الآخر. لاحظ الاختلاف في الوظائف المستخدمة في حلقة Starter والحلقة الرئيسية: تستخدم حلقة Starter "turnleft ()" أو "turnright ()" ، بينما تستخدم الحلقة الرئيسية "moveleft ()" و "moveright ()". إن وظائف الحركة لليسار / لليمين لا تجعل الروبوت يدور فحسب ، بل تجعله يتحرك للأمام أيضًا في نفس الوقت.

/ * الحلقة الوظيفية ---------------------------- هنا ، يوجد فقط روتين المسار * /

خسر int = 0 ؛ // إذا فقد = 0 تم العثور على الزر ، إذا فقد = 1 يتم فقد الزر حلقة فارغة () {if (isedgeleft () || isedgeright ()) {

إذا (! isobstacle ()) {

تحرك إلى الأمام (السرعة) ؛ تأخير (5) ؛ } else {تجنب_obstacle (تذكير) ؛ } else {if (reminder == 1 && lost == 1) {// كنا نستدير لليسار stoppeed ()؛ إذا (! isobstacleright ()) {المحرك (السرعة) ؛ // استدر للعثور على الزر} else {تجنب_obstacle (تذكير) ؛ } تذكير = 2 ؛ } else if (reminder == 2 && lost == 1) {stoppeed ()؛ إذا (! isobstacleleft ()) {moveleft (speed)؛ // كنا نتجه يمينًا} وإلا {تجنب_obstacle (تذكير) ؛ } تذكير = 1 ؛ } else if (lost == 0) {if (reminder == 1) {// كنا نتجه يسارًا إذا (! isobstacleleft ()) {moveleft (speed)؛ // كنا نتجه يمينًا} else {stoppeed ()؛ تجنب العائق (تذكير) ؛ } //} else if (note == 2) {if (! isobstacleright ()) {moveright (speed)؛ // استدر للعثور على الزر} else {stoppeed () ؛ تجنب العائق (تذكير) ؛ }}} تأخير (10)؛ خسر = 0 ؛ }} //}}

الآن ، يتم تقديم شرح بسيط لأكثر الإجرائين تعقيدًا:

تجنب الحواف

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

تجنب العقبات

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

الآن بعد أن فهمت الكود تمامًا ، يمكنك البدء في استخدامه!

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

موصى به: