الكود يبدو جيدا والوصلات مكتملة، لكن الروبوت يفوت الخط الأبيض بإصرار؟ هل يعتبر الخط الأبيض أرضية سوداء فيمر فوقه، أو يعتبر الأرضية السوداء خطا فيتوقف / يلتف خطأ؟
لا داعي للذعر; قد لا يكون الكود معطوبا. المشكلة غالبا غياب ضبط العين أي المعايرة.
كيف مضاميرنا؟
كثير من الشروحات على الإنترنت تتحدث عن أرضية بيضاء + خط أسود. في مسابقاتنا وورشنا العكس: أرضية سوداء وعليها خط أبيض. الفكرة واحدة; يتغير فقط أي لون تعتبره الخط.
ما المشكلة؟ ألعاب الضوء
حساسات الخط (خصوصا حساسات الانعكاس بالأشعة تحت الحمراء) تتأثر بضوء المكان. ضوء الورشة ليس كضوء قاعة المسابقة. القيم التي قستها في المنزل قد تتغير في قاعة أخرى.
لذلك لا تكتب رقما ثابتا في الكود وتنتظر معجزة:
if (sensor < 500) {
// I assume I am on the line
}
قد يكون 500 صحيحا في ورشتك وخاطئا على مضمار المسابقة.
ماذا يقرأ الحساس؟ (قياسنا)
- الأبيض (الخط): قريب من 0 (انعكاس قوي)
- الأسود (الأرضية): قريب من 1023 (انعكاس ضعيف)
إذن عندنا: الخط = قيمة منخفضة، والأرضية = قيمة مرتفعة.
النصيحة: عرّف الروبوت بالمكان
في كل بيئة جديدة (قاعة جديدة، مضمار جديد، إضاءة مختلفة) قِس الأرضية والخط من جديد.
1) قِس الخط الأبيض
ضع الحساسات فوق الخط الأبيض تماما. سجّل القيمة عبر Serial. مثال: 50 (قريبة من 0).
2) قِس الأرضية السوداء
ضع الروبوت على الأرضية السوداء (خارج الخط). سجّل القيمة. مثال: 1000 (قريبة من 1023).
3) أوجد الوسط (قيمة العتبة)
threshold = (white + black) / 2
// Example: (50 + 1000) / 2 = 525
هذه عتبتك الحقيقية لتلك اللحظة وذلك المكان. في الكود:
if (sensor < threshold) {
// on the white line (low value)
} else {
// on black floor (high value)
}
ملاحظة الورشة: استخدم
Serial.println(sensor)أثناء المعايرة; وأغلق Serial قبل المضمار (testMode = 0).
متى تعيد المعايرة؟
- عند الانتقال إلى قاعة أو مضمار مختلف
- عند تغير الإضاءة (شمس، سبوت، مكان خافت)
- عند تغير ارتفاع الحساس أو زاويته
- عند تغير لون الأرضية أو الشريط
خلاصة
مضمارنا: أرضية سوداء، خط أبيض. قِس الأبيض والأسود، اجعل المتوسط عتبة، وابحث عن الخط عند القيم المنخفضة. العتبة الصحيحة = روبوت يرى بوضوح.
قائمة تحقق: هل قِيس الخط الأبيض (قرب 0)؟ هل قِيست الأرضية السوداء (قرب 1023)؟ هل العتبة من المتوسط؟ هل أُعيدت المعايرة في القاعة الجديدة؟