- المواد المطلوبة:
- مفهوم تجنب عقبة الروبوت:
- مخطط الدائرة وشرحها:
- برمجة PIC Microcontroller:
- روبوت متجنب عقبة في العمل:
Obstacle Avoider Robot هو روبوت مشهور آخر يعمل على تنشيط المشاريع المدمجة. بالنسبة لأولئك الذين يتجنبون العقبات الجديدة ، فهو مجرد روبوت عادي بعجلات يمكنه التنقل في طريقه دون الاصطدام بأي عقبات. هناك العديد من الطرق لبناء روبوت متجنب عقبة في المشروع ، سنستخدم مستشعرًا واحدًا بالموجات فوق الصوتية (أمامي) واثنين من مستشعر الأشعة تحت الحمراء (يسار / يمين) بحيث يكون لدى الروبوت الخاص بنا عيون في جميع الاتجاهات الثلاثة. بهذه الطريقة يمكنك جعله أكثر ذكاءً وأسرع من خلال اكتشاف الأشياء من جميع الجوانب الثلاثة والمناورة وفقًا لذلك. نحن هنا نقاضي PIC Microcontroller PIC16F877A لهذه العقبة التي تتجنب الروبوت.
يمكن ملاحظة تشغيل عقبة تتجنب الروبوت من منتج في الوقت الفعلي يسمى روبوتات تنظيف المنزل. على الرغم من أن التكنولوجيا وأجهزة الاستشعار المستخدمة في هذه معقدة للغاية ، إلا أن المفهوم يظل كما هو. دعونا نرى ما يمكننا إنجازه باستخدام أجهزة الاستشعار العادية ووحدات التحكم الدقيقة PIC.
تحقق أيضًا من عقبة تجنب الروبوتات الأخرى لدينا:
- عقبة Raspberry Pi القائمة على تجنب الروبوت
- روبوت تنظيف الفراغ الذكي DIY باستخدام Arduino
المواد المطلوبة:
- PIC16F877A
- مستشعر الأشعة تحت الحمراء (2Nos)
- جهاز استشعار بالموجات فوق الصوتية (عدد 1)
- محرك تروس DC (عدد 2)
- سائق محرك L293D
- مقاعد (يمكنك أيضًا بناء كرسي خاص بك باستخدام الورق المقوى)
- بنك الطاقة (أي مصدر طاقة متاح)
مفهوم تجنب عقبة الروبوت:
مفهوم تجنب عقبة الروبوت بسيط للغاية. نستخدم أجهزة استشعار لاكتشاف وجود كائنات حول الروبوت ونستخدم هذه البيانات لعدم اصطدام الروبوت بهذه الأشياء. لاكتشاف كائن يمكننا استخدام أي مستشعرات استخدام مثل مستشعر الأشعة تحت الحمراء ومستشعر الموجات فوق الصوتية.
في روبوتنا ، استخدمنا المستشعر الأمريكي كمستشعر أمامي واثنين من مستشعر الأشعة تحت الحمراء للجهازين الأيسر والأيمن على التوالي. سيتحرك الروبوت للأمام عندما لا يكون هناك كائن أمامه لذلك سوف يتحرك الروبوت للأمام حتى يكتشف مستشعر الموجات فوق الصوتية (الولايات المتحدة) أي شيء.
عندما يكتشف جهاز الاستشعار الأمريكي شيئًا ما ، فقد حان الوقت لتغيير اتجاه الروبوت. يمكننا إما الاستدارة إلى اليسار أو اليمين ، لتحديد اتجاه الدوران ، نستخدم مساعدة مستشعر الأشعة تحت الحمراء للتحقق مما إذا كان هناك أي كائن موجود بالقرب من الجانب الأيسر أو الأيمن من الروبوت.
إذا تم اكتشاف اعتراض على الجانب الأمامي والأيمن من الروبوت ، فسيعود الروبوت ويستدير لليسار. نجعل الروبوت يركض للخلف لمسافة معينة حتى لا يصطدم بالجسم أثناء الدوران.
إذا تم اكتشاف اعتراض على الجانب الأمامي والأيسر من الروبوت ، فسيعود الروبوت ويستدير لليمين.
إذا وصل الروبوت إلى ركن من الغرفة ، فسوف يشعر بوجود جسم في الأربعة. في هذه الحالة ، يتعين علينا دفع الروبوت للخلف حتى يتحرر أي جانب.
هناك حالة أخرى محتملة تتمثل في أنه سيكون هناك كائن في المقدمة ولكن قد لا يكون هناك أي كائن لا في الجانب الأيسر ولا في الجانب الأيمن ، وفي هذه الحالة يتعين علينا الدوران بشكل عشوائي في أي اتجاه.
آمل أن يكون هذا قد أعطى فكرة تقريبية عن كيفية عمل متجنب العقبات ، فلننتقل الآن إلى مخطط الدائرة لبناء هذا الروبوت والاستمتاع به في العمل.
مخطط الدائرة وشرحها:
يظهر الرسم التخطيطي الكامل للدائرة للروبوت الذي يتجنب العائق القائم على الموافقة المسبقة عن علم في الصورة أعلاه كما ترون ، فقد استخدمنا مستشعرين يعملان بالأشعة تحت الحمراء للكشف عن الأشياء على يسار ويمين الروبوت على التوالي ومستشعر بالموجات فوق الصوتية لقياس مسافة الجسم الموجود أمام الروبوت. لقد استخدمنا أيضًا وحدة L293D Motor Driver لتشغيل المحركين الموجودين في هذا المشروع. هذه مجرد محركات تروس عادية للتيار المستمر للعجلات ، وبالتالي يمكن اشتقاقها بسهولة بالغة. سيساعدك الجدول التالي في الاتصالات.
لا |
متصل من |
متصلا |
1 |
مستشعر الأشعة تحت الحمراء غادر دبوس |
RD2 (دبوس 21) |
2 |
مستشعر الأشعة تحت الحمراء الحق خارج دبوس |
RD3 (دبوس 22) |
4 |
المحرك 1 قناة دبوس |
RC4 (دبوس 23) |
5 |
المحرك 1 قناة ب دبوس |
RC5 (دبوس 25) |
6 |
محرك 2 قناة دبوس |
RC6 (دبوس 26) |
7 |
المحرك 2 قناة ب دبوس |
RC7 (دبوس 27) |
8 |
دبوس الزناد الأمريكي |
RB1 (دبوس 34) |
9 |
US Echo Pin |
RB2 (دبوس 35) |
تعد وحدة تشغيل المحرك مثل L293D إلزامية لأن مقدار التيار المطلوب لتشغيل محرك تروس التيار المستمر لا يمكن الحصول عليه بواسطة دبوس الإدخال / الإخراج الخاص بالمتحكم الدقيق PIC. يتم تشغيل المستشعرات والوحدة عن طريق الإمداد + 5V الذي يتم تنظيمه بواسطة 7805. يمكن تشغيل وحدة محرك المحرك حتى باستخدام + 12V ، ولكن بالنسبة لهذا المشروع ، فقد تمسكت للتو مع + 5V المتاح.
الروبوت الكامل مدعوم من بنك الطاقة في حالتي. يمكنك أيضًا استخدام أي بنك طاقة عادي ومن خلال تمرير قسم المنظم أو استخدام الدائرة المذكورة أعلاه واستخدام أي بطارية 9 فولت أو 12 فولت للروبوت كما هو موضح في مخطط الدائرة أعلاه. بمجرد الانتهاء من اتصالاتك ، سيبدو مثل هذا أدناه
برمجة PIC Microcontroller:
إن برمجة الموافقة المسبقة عن علم للعمل من أجل تجنب العقبات أمر سهل حقًا. علينا فقط قراءة قيمة هذه المستشعرات الثلاثة وقيادة المحركات وفقًا لذلك. في هذا المشروع ، نستخدم جهاز استشعار بالموجات فوق الصوتية. لقد تعلمنا بالفعل كيفية التعامل مع الموجات فوق الصوتية مع متحكم PIC ، إذا كنت جديدًا هنا ، فيرجى الرجوع إلى هذا البرنامج التعليمي لفهم كيفية عمل مستشعر الولايات المتحدة مع PIC ، حيث أنني سأتخطى التفاصيل المتعلقة به هنا لتجنب التكرار.
يتم تقديم البرنامج الكامل أو هذا الروبوت في نهاية هذه الصفحة ، وقد قمت بشرح الأجزاء المهمة من البرنامج أدناه.
كما نعلم ، تبدأ جميع البرامج بإعلانات الإدخال والإخراج. هنا تكون الدبابيس الأربعة لوحدة Motor Driver ودبابيس Trigger هي دبابيس الإخراج ، بينما سيتم إدخال دبوس Echo واثنين من دبابيس IR. يجب أن نقوم بتهيئة وحدة Timer 1 لاستخدامها مع مستشعر Ultrasonic.
TRISD = 0x00 ؛ / أعلن PORTD كناتج للتفاعل مع شاشة LCD TRISB1 = 0 ؛ // يتم إرسال دبوس الزناد لجهاز الاستشعار الأمريكي كدبوس إخراج TRISB2 = 1 ؛ // تم تعيين دبوس الصدى لمستشعر الولايات المتحدة كدبوس إدخال TRISB3 = 0 ؛ // RB3 هو طرف الإخراج لـ LED TRISD2 = 1 ؛ TRISD3 = 1 ، // تم الإعلان عن كل من دبابيس مستشعر الأشعة تحت الحمراء كمدخلات TRISC4 = 0 ؛ TRISC5 = 0 ؛ // تم إعلان دبابيس المحرك 1 كناتج TRISC6 = 0 ؛ TRISC7 = 0 ؛ // تم إعلان دبابيس المحرك 2 كإخراج T1CON = 0x20 ؛
في هذا البرنامج ، سيتعين علينا التحقق من المسافة بين المستشعر والكائن كثيرًا ، لذلك أنشأنا وظيفة تسمى calculate_distance () والتي سنقوم بداخلها بقياس المسافة بالطريقة التي تمت مناقشتها في البرنامج التعليمي الأمريكي لتفاعل المستشعر. يظهر رمز أدناه
باطل calculate_distance () // وظيفة لحساب المسافة من الولايات المتحدة {TMR1H = 0 ؛ TMR1L = 0 ؛ // امسح المؤقت بتات الزناد = 1 ؛ __delay_us (10) ؛ الزناد = 0 ؛ بينما (صدى == 0) ؛ TMR1ON = 1 ؛ بينما (صدى == 1) ؛ TMR1ON = 0 ؛ time_taken = (TMR1L - (TMR1H << 8)) ؛ المسافة = (0.0272 * time_taken) / 2 ؛ }
ستكون الخطوة التالية هي مقارنة قيم مستشعر الموجات فوق الصوتية ومستشعر الأشعة تحت الحمراء وتحريك الروبوت وفقًا لذلك. هنا في هذا البرنامج ، استخدمت قيمة cm كمسافة حرجة يجب أن يبدأ الروبوت تحتها في إجراء تغييرات على الاتجاه. يمكنك استخدام القيم المفضلة لديك. إذا لم يكن هناك شيء ، فإن الروبوت يتحرك للأمام
إذا (المسافة> 5) {RC4 = 0 ؛ RC5 = 1 ؛ // المحرك 1 إلى الأمام RC6 = 1 ؛ RC7 = 0 ؛ // المحرك 2 إلى الأمام}
إذا تم اكتشاف جسم ما ، فستقل المسافة عن سم. في هذه الحالة ، نعتبر قيم مستشعر الموجات فوق الصوتية الأيمن والأيسر. بناءً على هذه القيمة ، قررنا إما الاتجاه يسارًا أو يمينًا. يتم استخدام تأخير بالمللي ثانية بحيث يكون الاتجاه مرئيًا.
إذا (RD2 == 0 && RD3 == 1 && مسافة <= 5) // تم حظر المستشعر الأيسر {back_off () ؛ RC4 = 1 ؛ RC5 = 1 ؛ // المحرك 1 توقف RC6 = 1 ؛ RC7 = 0 ؛ // المحرك 2 إلى الأمام __delay_ms (500) ؛ } calculate_distance () ؛ إذا (RD2 == 1 && RD3 == 0 && مسافة <= 5) // تم حظر المستشعر الأيمن {back_off () ؛ RC4 = 0 ؛ RC5 = 1 ؛ // المحرك 1 إلى الأمام RC6 = 1 ؛ RC7 = 1 ؛ // المحرك 2 توقف __delay_ms (500) ؛ }
في بعض الأحيان ، يكتشف مستشعر الموجات فوق الصوتية شيئًا ما ، ولكن لن يتم اكتشاف أي كائن بواسطة مستشعرات الأشعة تحت الحمراء. في هذه الحالة ، يستدير الروبوت إلى اليسار افتراضيًا. يمكنك أيضًا جعله يمينًا أو في اتجاه عشوائي بناءً على تفضيلاتك. إذا كانت هناك أشياء على كلا الجانبين ، فإننا نجعلها تتراجع. رمز القيام بالشيء نفسه موضح أدناه.
حساب المسافة () ، إذا (RD2 == 0 && RD3 == 0 && مسافة <= 5) // كلا المستشعران مفتوحان {back_off () ؛ RC4 = 0 ؛ RC5 = 1 ؛ // المحرك 1 إلى الأمام RC6 = 1 ؛ RC7 = 1 ؛ // المحرك 2 توقف __delay_ms (500) ؛ } calculate_distance () ؛ إذا (RD2 == 1 && RD3 == 1 && مسافة <= 5) // تم حظر كلا المستشعرين {back_off () ؛ RC4 = 1 ؛ RC5 = 0 ؛ // المحرك 1 عكس RC6 = 1 ؛ RC7 = 1 ؛ // المحرك 2 توقف __delay_ms (1000) ؛ }
روبوت متجنب عقبة في العمل:
عمل المشروع ممتع للغاية وممتع للمشاهدة. بمجرد الانتهاء من استخدام الدائرة والرمز ، ما عليك سوى تشغيل الروبوت واتركه على الأرض. يجب أن تكون قادرة على تحديد العقبات وتجنبها بذكاء. ولكن هنا يأتي الجزء الممتع. يمكنك تعديل الكود وجعله يفعل المزيد من الأشياء مثل جعله يتجنب الدرج ، مما يجعله أكثر ذكاءً من خلال تخزين المنعطفات الثمينة وماذا لا؟
سيساعدك هذا الروبوت على فهم أساسيات البرمجة ومعرفة كيفية استجابة الأجهزة الفعلية للكود الخاص بك. من الممتع دائمًا برمجة هذا الروبوت ومشاهدة كيف يتصرف مع الكود في العالم الحقيقي.
هنا استخدمنا نفس لوحة أداء PIC التي صنعناها من أجل وميض LED باستخدام متحكم PIC واستخدمنا هذا اللوحة في مشاريع أخرى من سلسلة دروس PIC.
يجب أن يبدو الروبوت الخاص بك مشابهًا لذلك الموضح في الصورة أعلاه. يظهر العمل الكامل لهذا المشروع في الفيديو أدناه.
آمل أن تكون قد فهمت المشروع واستمتعت ببناء واحد. إذا كانت لديك أي شكوك أو تعثرت ، يمكنك استخدام قسم التعليقات لنشر أسئلتك وسأبذل قصارى جهدي في الإجابة عليها.