توجد الكثير من النباتات التي تتحرك تبعا للشمس مثل زهور تباع الشمس وقد استفاد العلماء من محاكاة الطبيعة في الكثير من الاختراعات مثل الألواح الشمسية التي تتبع الشمس لتحقيق أقصى استفادة ممكنة من الطاقة الشمسية.
في هذا المشروع سنستخدم روبوت Ranger الذي يحتوي على مستشعرين للضوء لبرمجة روبوت يتتبع مصدر الضوء .
الأدوات المطلوبة
فكرة المشروع
تحتوي اللوحة الرئيسية Auriga على مستشعرين للضوء
ومستشعر الضوء عبارة عن قطعة الكترونية تصنع من مادة شبه موصلة للكهرباء عندما يتعرض المستشعر للضوء فإن قدرته على توصيل الكهرباء تصبح أعلى فيعطى إشارة كهربائية أكبر
في هذا المشروع سنقوم بكتابة برنامج يقوم بمقارنة كمية الضوء الساقطة على المستشعرين
إذا كان المستشعر الأول (الأيمن) يتعرض للضوء أكثر من المستشعر الثاني (الأيسر) فإن الروبوت ينعطف باتجاه شدة الإضاءة الأعلى (اليمين .في هذه الحالة) وإذا تعرض المستشعرين لنفس الكمية من الضوء يتحرك الروبوت للأمام
اختبار المستشعر
قد تختلف دقة المستشعرات الالكترونية بنسب بسيطة تعود إلى عوامل في التصنيع
سنقوم بعمل اختبار لمستشعري الضوء الموجودين في لوحة Auriga لمعرفة الفرق في دقة القياس بين المستشعرين
أولا قم بإنشاء متغيرين Light1 و Light2 مثلا
قم بتعيين المتغير الأول لقراءة المستشعر الأول on board 1
والمتغير الثاني لقراءة المستشعر الثاني on board 2
نلاحظ قيم القراءات على الشاشة
قم بتسليط ضوء على المستشعرين أو حجبهما عن الضوء بيدك لملاحظة الفرق
من خلال الملاحظة يمكن أن نجد نسبة الاختلاف بين قراءة المستشعرين في هذا الاختبار وجدنا أنها يمكن أن تصل إلى 5 أرقام عند تعرضهما لنفس شدة الإضاءة (قد تختلف من لوحة إلى لوحة أخرى).
سنستفيد من هذه القيمة عند كتابة الكود في الخطوة التالية.
برمجة الروبوت
سنقوم في البداية بإنشاء متغيرين Light 1 وتعيينه لقراءة المستشعر الأيسر (كما هو مكتوب على اللوحة الرئيسية)
ومتغير Light2 وتعيينه لقراءة المستشعر الأيمن في اللوحة
داخل حلقة Forever
سنستخدم ثلاث جمل شرطية if لتمثل لنا ثلاث حالات مختلفة
الأولى إذا تعرض المستشعرين لنفس شدة الضوء والحالتين الأخرى إذا كانت شدة الضوء على أحدهما أكبر من الآخر
الشرط الذي يمثل حالة أن تكون قراءة المستشعر الأول = الثاني
لكن بما أننا وجدنا اختلافا في قراءة المستشعرين تصل إلى 5 أرقام عن اختبارهما في الخطوة السابقة سنعيد كتابة الشرط كالتالي
وهذا يعني أنه إذا كان الفرق بين قيمة المستشعر الأول والثاني أقل من 6 فسيتم اعتبار أنهما متساويان ويتحرك الروبوت للأمام
أضفنا abs القيمة المطلقة لتعطي ناتج الطرح قيمة موجبة دائمًا سواء كانت قيمة Light1 أكبر من Light2 أو العكس.
إذا لم يتحقق الشرط الأول أي إذا كان الفرق بين القراءتين 6 أو أكبر يتم تنفيذ الأوامر بعد else
حيث سنضيف الشروط المتعلقة بالحالتين الأخرى
الحالة الثانية
إذا كانت قراءة المستشعر الأيسر Light1 أكبر من قراءة المستشعر الأيمن Light2
ينعطف الروبوت باتجاه اليسار أي باتجاه شدة الإضاءة الأعلى
الحالة الثالثة
إذا كانت قراءة المستشعر الأيسر Light2 أقل من قيمة المستشعر الأيمن Light1
ينعطف الروبوت لليمين أي باتجاه شدة الإضاءة الأعلى.
الكود البرمجي
لمزيد من المعلومات حول الأوامر البرمجية الأخرى قم بالرجوع لدرس جولة حولة الأوامر البرمجية