مشهد كلاسيكي في الورشة: يكتب الطالب كودا جيدا، يستدعي goForward()، ويتوقع أن ينطلق الروبوت كالسهم. وما إن يعمل حتى ينحني يمينا أو يسارا كأن إحدى ساقيه أقصر.
الكود سليم. والعجلات غير عالقة. فما المشكلة؟
الحقيقة المرة: لا محركان توأمان
هذه حرب بين أوامر رقمية مثالية وفيزياء غير مثالية. في الكود تعطي المحركين نفس قيمة PWM (مثال: 255). في الواقع حتى محركي DC من المصنع نفسه ليسا متطابقين.
- قد يكون لف النحاس في أحدهما أضيق بقليل
- قد يكون زيت علبة التروس في الآخر أكثر قليلا
- قد يختلف احتكاك العجلة أو تماسها مع الأرض
تقول لكليهما اركض بقوة 100; أحدهما يركض بـ 100 والآخر بـ 95. فينعطف الروبوت نحو الجانب الأبطأ.
النصيحة: هذّب العتاد بالبرمجيات
صانع الروبوت الجيد يقبل عيوب العتاد ويصلحها بالبرمجيات. هذا هو معايرة المحركات.
1) لا تذهب بأقصى سرعة
لا تعطِ المحركات القيمة القصوى مباشرة (مثال: 255). اترك هامشا (مثال: 200) لتستطيع خفض أو رفع طرف.
2) استخدم متغيرات للسرعة
int leftSpeed = 200;
int rightSpeed = 200;
3) ضبط دقيق بالتجربة
ضع الروبوت على أرض مستوية وسر إلى الأمام.
- ينحرف يسارا: المحرك الأيمن أسرع. اخفض
rightSpeedقليلا (مثال: 190). - ينحرف يمينا: المحرك الأيسر أسرع. اخفض
leftSpeedقليلا.
عدّل بخطوات صغيرة حتى يسير مستقيما. أحيانا فرق 5 يكفي.
void goForward() {
motorLeft(leftSpeed);
motorRight(rightSpeed);
}
ملاحظة الورشة: عاير على أرضية مضمار المسابقة. اختلاف الاحتكاك يغيّر النتيجة. انخفاض البطارية قد يزيد الانحراف; اختبر أيضا ببطارية ممتلئة.
خلاصة
صنع الروبوت ليس تجميع القطع فقط; بل جعلها تعمل بتناغم. غطِّ عيب المحرك بالبرمجيات. سرعات يمين/يسار صحيحة = روبوت يسير مستقيما.