شرح درس التحكم في الروبوت ثاني متوسط الفصل الثاني
المستشعر يمكّن الروبوت من الإحساس بما حوله، فنكتب برنامجًا يقرأ قيمته ويقرر باستخدام الشرط if أو الحلقة while ما يفعله الروبوت.

أهداف الدرس
- يراجع أوامر الحركة والدوران ويضبط سرعة الروبوت.
- يتعرف مستشعرات الروبوت (المسافة واللون أسفل الروبوت والمصد).
- يستخدم if مع قيمة المستشعر لاتخاذ قرار.
- يستخدم الحلقة while لتكرار الحركة حتى يتحقق شرط.
- يوقف الروبوت عند لون معين أو عند اقتراب جدار.
المفهوم الأساسي
المستشعر يمكّن الروبوت من الإحساس بما حوله، فنكتب برنامجًا يقرأ قيمته ويقرر باستخدام الشرط if أو الحلقة while ما يفعله الروبوت.
شرح الدرس
في الصف الأول المتوسط حركنا الروبوت الافتراضي في بيئة VEXcode VR بلغة بايثون بأوامر ثابتة، فكان ينفذ ما نكتب دون أن يرى ما أمامه. اليوم نعطيه عيونًا، فيقرأ المستشعرات ويتخذ قراره بنفسه.
الأوامر قد تختلف قليلًا بين إصدارات المنصة، فإن ظهر لك خطأ في اسم أمر فراجع قائمة الأوامر في المنصة.
مراجعة الحركة والسرعة
- الحركة للأمام: الأمر drivetrain.drive_for(FORWARD, 200, MM) يحرك الروبوت مسافة ٢٠٠ ملم.
- الدوران: الأمر drivetrain.turn_for(RIGHT, 90, DEGREES) يدير الروبوت ٩٠ درجة يمينًا.
- السرعة: الأمر drivetrain.set_drive_velocity(50, PERCENT) يضبط السرعة على نصف أقصى سرعة.
- الحركة المستمرة: الأمر drivetrain.drive(FORWARD) يحرك الروبوت دون توقف حتى نوقفه بالأمر drivetrain.stop().
- الانتظار: الأمر wait(1, SECONDS) يجعل البرنامج ينتظر ثانية.
# نص
drivetrain.set_drive_velocity(50, PERCENT)
drivetrain.drive_for(FORWARD, 200, MM)
drivetrain.turn_for(RIGHT, 90, DEGREES)
drivetrain.drive_for(FORWARD, 200, MM)المستشعرات
- مستشعر المسافة: يقيس بعد أقرب جسم أمام الروبوت، ونقرأه بالأمر front_distance.get_distance(MM) فيعيد رقمًا بالملمترات.
- مستشعر اللون أسفل الروبوت: يرى لون الأرض تحته، والأمر down_eye.detect(RED) يعيد True إذا كان تحته اللون الأحمر، وإلا يعيد False.
- المصد (Bumper): يحس بالاصطدام عند ملامسة جسم، ويفيد حين لا يكفي مستشعر المسافة.
«المستشعر عين الروبوت، والشرط عقله الذي يقرر»
المستشعرات مع if
نستعمل if لنجعل الروبوت يختار فعلًا بحسب قراءة المستشعر. في المثال يتحرك الروبوت قليلًا ثم يفحص الجدار:
# نص
drivetrain.drive_for(FORWARD, 200, MM)
if front_distance.get_distance(MM) < 300:
drivetrain.turn_for(RIGHT, 90, DEGREES)
else:
drivetrain.drive_for(FORWARD, 200, MM)إذا كان الجدار أقرب من ٣٠٠ ملم فيدور الروبوت يمينًا، وإلا يتقدم مسافة أخرى.
الفحص بـ if يحدث مرة واحدة فقط عند وصول البرنامج إليه.
الحلقة while
نريد أن يتحرك الروبوت ويفحص باستمرار. هنا نستخدم while التي تكرر الأسطر المزاحة ما دام الشرط صحيحًا:
# نص
drivetrain.set_drive_velocity(50, PERCENT)
drivetrain.drive(FORWARD)
while front_distance.get_distance(MM) > 300:
wait(1, SECONDS)
drivetrain.stop()يتحرك الروبوت إلى الأمام ويفحص كل ثانية: هل المسافة أكبر من ٣٠٠ ملم؟ فإن صارت أقل أو تساوي ٣٠٠ خرج من الحلقة ونفذ الأمر drivetrain.stop().
التوقف عند لون معين
نرسم على أرض الملعب الافتراضي خطًّا أحمر عند حدود المرمى، ونريد أن يتوقف الروبوت فوقه:
# نص
drivetrain.drive(FORWARD)
while not down_eye.detect(RED):
wait(1, SECONDS)
drivetrain.stop()الكلمة not تعكس القيمة، فمعنى الشرط: ما دام لم يرَ الروبوت اللون الأحمر فليواصل الحركة.
تأكد أن شرط while سيصير خطأ في النهاية، وإلا بقي الروبوت في حلقة لا تنتهي.
نشاط تعليمي
التطبيق الأول
اكتب برنامجًا يحرك الروبوت إلى الأمام حتى يقترب من الجدار على بعد ٢٠٠ ملم أو أقل ثم يتوقف.
نستعمل drivetrain.drive(FORWARD) ثم while front_distance.get_distance(MM) > 200: ثم drivetrain.stop().
أن يوظف الطالب الحلقة مع مستشعر المسافة.
المسألة الثانية
ماذا يفعل الروبوت في البرنامج الذي يستعمل if front_distance.get_distance(MM) < 300: إذا كان الجدار على بعد ٥٠٠ ملم؟
لا ينفذ كتلة if بل ينفذ كتلة else إن وجدت.
أن يتتبع الطالب البرنامج.
الموقف الثالث
تريد أن يتوقف الروبوت عند اللون الأحمر ثم يدور يمينًا ٩٠ درجة.
بعد الحلقة التي تنتظر اللون الأحمر نكتب drivetrain.stop() ثم drivetrain.turn_for(RIGHT, 90, DEGREES).
أن يجمع الطالب بين الحلقة والدوران.
ملاحظات مهمة
- 1الشرط ينتهي بنقطتين، وأسطر الكتلة تزاح ٤ مسافات.
- 2while تكرر ما دام الشرط صحيحًا، وif تفحص مرة واحدة.
- 3نضبط السرعة قبل بدء الحركة.
- 4نختبر البرنامج في المحاكي ونعدّل الأرقام حتى يعمل كما نريد.
أخطاء شائعة
- ✗ خطأكتابة = بدل == في المقارنة.✓ الصواب: نستعمل == للمساواة و< أو > للمقارنة.
- ✗ خطأنسيان drivetrain.stop() بعد حلقة while.✓ الصواب: نكتب أمر التوقف بعد الحلقة ليقف الروبوت.
+عرض جميع الأخطاء (3) ←إخفاء الأخطاء الإضافية
- ✗ خطأعدم إزاحة سطر الحلقة.✓ الصواب: نزيح الأسطر التابعة للحلقة والشرط ٤ مسافات.
ملخص الدرس
- نحرك الروبوت بالأمرين drive_for وturn_for ونضبط سرعته.
- المستشعرات: المسافة واللون والمصد.
- if تفحص مرة واحدة، وwhile تكرر الفحص ما دام الشرط صحيحًا.
- نوقف الروبوت بالأمر drivetrain.stop() عند تحقق الشرط.
هل أتقنت الدرس؟اختبر نفسك من خلال اختبار قصير من عدة أسئلة.