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

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

الاستمرار في بناء المشروع
- استمر في العمل في مشروع Unit8Lesson3.
-
أضف أمر turn_to_ heading بعد التعليق الثالث. اضبط المعلمة على 180 درجة، بحيث يبدو المشروع الآن على النحو التالي:
def main (): #1. محرك الأقراص إلى القرص الأول في حين لاdown_eye.near_object (): drivetrain.drive (إلى الأمام) انتظر(5، مللي ثانية )drivetrain.stop () # 2. التقط أول مغناطيس للقرص. قم بتنشيط (تعزيز) # 3. انطلق إلى المرمى drivetrain.turn_to_heading(180 درجة) # 4. أسقط القرص في المرمى -
الآن بعد أن تم توجيه روبوت الواقع الافتراضي نحو الهدف، سيحتاج روبوت الواقع الافتراضي إلى العودة إلى الهدف. أضف حلقة while أسفل الأمر turn_to_heading ، بحيث يبدو القسم الثالث من المشروع كما يلي:
# 3. القيادة إلى المرمى drivetrain.turn_to_heading(180 درجة) أثناء الحالة: انتظر(5 ثوانٍ) - للعودة إلى الهدف، سيستخدم روبوت الواقع الافتراضي بيانات من مستشعر المسافة لتحديد متى
يكون روبوت الواقع الافتراضي داخل الهدف. كما تمت مناقشته في الدرس السابق، يبلغ قياس كل
مربع شبكي على ساحة اللعب Disk Mover 200 مليمتر (مم) في 200 مليمتر
(مم).

-
باستخدام هذه القياسات، يمكن تحديد مركز الهدف ليكون حوالي 200 ملليمتر (مم) من جدار الملعب.

-
يجب أن يتحرك روبوت الواقع الافتراضي مسافة بينما يبلغ مستشعر المسافة أن روبوت الواقع الافتراضي يبعد مسافة أكبر من 200 مليمتر (مم) عن جدار ساحة اللعب. قم بضبط شرط حلقة while على الأمر get_distance باستخدام معلمة المليمترات (mm). ثم أضف عامل المقارنة إلى أكبر من>() 200. يجب أن يبدو القسم الثالث من المشروع الآن كما يلي:
# 3. القيادة إلى المرمى drivetrain.turn_to_heading (180 درجة) بينما front_distance.get_distance (MM) > 200: انتظر(5، مللي ثانية) -
أضف الأمر drive إلى حلقة while هذه، حتى يبدو القسم الثالث من المشروع بهذا الشكل. سيؤدي هذا إلى توجيه روبوت الواقع الافتراضي للقيادة للأمام بينما يبلغ مستشعر المسافة عن مسافة أكبر من 200 ملليمتر (مم).
# 3. القيادة إلى المرمى drivetrain.turn_to_heading (180 درجة) بينما front_distance.get_distance (MM) > 200: drivetrain.drive (للأمام) انتظر(5، مللي ثانية) -
بمجرد وصول روبوت الواقع الافتراضي إلى الهدف (200 مم من الحائط)، سيحتاج روبوت الواقع الافتراضي إلى التوقف عن القيادة. أضف أمرًا stop خارج حلقة while ، بحيث يبدو القسم الثالث من المشروع كما يلي:
# 3. القيادة إلى المرمى drivetrain.turn_to_heading(180 درجة) بينما front_distance.get_distance (MM) > 200: drivetrain.drive(للأمام) انتظر(5 مللي ثانية )drivetrain.stop () -
الآن بعد أن تم إيقاف روبوت الواقع الافتراضي في الهدف، يمكنه إسقاط القرص. أضف الأمر energize أسفل التعليق الرابع واضبط المعلمة على 'DROP'. يجب أن يبدو القسم الرابع من المشروع الآن كما يلي:
# 4. إسقاط القرص في مغناطيس الهدف. تنشيط(إسقاط) -
سيحتاج روبوت الواقع الافتراضي إلى القيادة في الاتجاه المعاكس لمسافة قصيرة لتجنب السقوط أو الاصطدام بأي أقراص. من المحتمل أن يؤدي الاصطدام بقرص إلى إخراج روبوت الواقع الافتراضي عن مساره. سيحتاج روبوت الواقع الافتراضي بعد ذلك إلى الدوران بحيث يواجه الأقراص مرة أخرى. أضف الأوامر التالية بعد الأمر النهائي energize كما هو موضح، لتوجيه روبوت الواقع الافتراضي للقيادة في الاتجاه المعاكس لمسافة 100 مليمتر (مم) والعودة إلى اتجاه 0 درجة. تأكد من وضع المسافة البادئة للأوامر بشكل صحيح في مشروعك.
# 4. إسقاط القرص في مغناطيس الهدف. تنشيط(إسقاط) drivetrain.drive_for(عكس، 100، مم) drivetrain.turn_to_heading(0، درجة) - افتح Disk Mover Playground إذا لم يكن مفتوحًا بالفعل وقم بتشغيل المشروع.
-
يتحرك روبوت الواقع الافتراضي للأمام، ويلتقط القرص الأول، ثم يتحول إلى اتجاه 180 درجة لمواجهة الهدف. ثم يستخدم روبوت الواقع الافتراضي القيم من مستشعر المسافة لتحديد وقت التوقف عن القيادة وإسقاط القرص.

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