جولة حول الأوامر البرمجية

 

يتواصل البشر فيما بينهم بلغات مختلفة مثل العربية والانجليزية وغيرها
وللتواصل مع الروبوتات نحتاج كذلك إلى لغات برمجة ومن أبسط لغات البرمجة المرئية هي لغة سكراتش Scratch التي سنستخدمها في برنامج mBlock لبرمجة روبوتات MakeBlock.

 

mblock-programming-blocks

 

في هذا الدرس سنأخذ جولة على الأوامر البرمجية الأكثر استخداما في بناء الروبوتات والمشاريع المختلفة.

 

الأوامر البرمجية

تنقسم الأوامر البرمجية في برنامج mBlock  إلى عدة أقسام منها ما هو متعلق بالحركة أو الأصوات أو التحكم وغيرها

والتي تمكننا من برمجة الرسوم المتحركة والألعاب التفاعلية.

mblock-programming-blocks

لكن عند كتابة برنامج والرغبة في رفعه على لوحة الروبوت فإن 4 أقسام فقط من الأوامر البرمجية يمكن استخدامها
وهي المتعلقة بالبيانات والتحكم والعمليات والروبوت كما هو موضح في الصورة.

mblock-programming-blocks

سنستعرض الآن كل قسم وأكثر الأوامر البرمجية استخدامًا.

 

القسم الأول: البيانات Data and Blocks

 

mblock-programming-blocks

 

mblock-programming-blocks
mblock-programming-blocks
يستخدم هذا الأمر لإنشاء المتغيرات  وتعيين قيمة المتغير

والمتغير يمكن تشبيهه بوعاء لتخزين البيانات مثل إنشاء متغير باسم  Light يقوم بتخزين قراءة مستشعر الضوء

mblock-programming-blocks
تعيين قيمة للمتغير
mblock-programming-blocks
تغيير قيمة المتغير بمقدار معيّن
mblock-programming-blocks
إظهار أو إخفاء قيمة المتغير

 

 

القسم الثاني: أوامر التحكم Control

mblock-programming-blocks

 

mblock-programming-blocks
يستخدم الأمر البرمجي wait لإضافة تاخير زمني بين أمرين برمجين
mblock-programming-blocks
يقوم هذا الأمر بتكرار الأوامر البرمجية التي توضع داخله عدد محدد من المرات
mblock-programming-blocks
 If.. then
يقوم هذا الأمر بالتحقق من الشرط، إذا كان الشرط صحيحا، سيتم تنفيذ التعليمات البرمجية داخل  هذا الـ Block ، وإذا لم يتحقق الشرط لن يتم تنفيذها.If.. then.. else
يقوم هذا الأمر بالتحقق من الشرط، إذا كان الشرط صحيحا، سيتم تنفيذ التعليمات البرمجية داخل  Block if ، وإذا لم يتحقق الشرط يتم تنفيذ  التعليمات البرمجية داخل else Block .
mblock-programming-blocks
 يتوقف البرنامج عند الأمر البرمجي wait until حتى يتحقق الشرط الذي تم تحديده داخل الأمر Block
عند تحقق الشرط يكمل البرنامج تنفيذ الأوامر التالية في الكود
mblock-programming-blocks
 يتم تكرار الأوامر البرمجية التي توضع بداخل الأمر Repeat until حتى يتحقق الشرط الذي تم تحديده
عند تحقق الشرط ينتقل لتنفيذ الأوامر التالية في الكود

 

القسم الثالث: أوامر العمليات Operators

mblock-programming-blocks

 

mblock-programming-blocks
مجموعة الأوامر المتعلقة بالعمليات الحسابية
(الجمع، الطرح ، الضرب، القسمة)
mblock-programming-blocks
Pick a random
لاختيار رقم عشوائي من بين قيمتين
مثلا بين 1 و 10
سيختار البرنامج كل مرة رقما مختلفا بين هاتين القيمتين
mblock-programming-blocks
أكبر من .. أصغر من .. يساوي
تستخدم الأوامر البرمجية للمقارنة بين قيمتين مختلفتين
mblock-programming-blocks
عند استخدام And
يتم تنفيذ الكود البرمجي التالي إذا تحقق كلا الشرطين
mblock-programming-blocks
عند استخدام or
يتم تنفيذ الكود البرمجي التالي إذا كان أحد الشرطين صحيحا
mblock-programming-blocks
يتم استخدامه لعكس الحالة المنطقية للمعامل
إذا كان الشرط صحيحا فإن العامل المنطقي not يجعله خاطئا

القسم الرابع: أوامر الروبوت Robot

في هذا القسم تظهر الأوامر وفق نوع الروبوت الذي تم اختيار من قائمة Boards

ونوع الامتداد من قائمة Extensions

mblock-programming-blocks

 

 

mblock-programming-blocks
يشير هذا الأمر البرمجي Block إلى أن البرنامج سيتم ترجمته
إلى كود أردوينو وتحميله على لوحة mCoreعند اختيار نوع الروبوت mBot.
ويختلف مسمى هذا الأمر Block وفقًا لنوع لوحة الروبوت التي تستخدمها وتقوم باختيارها من قائمة Board.
mblock-programming-blocks
يقوم هذا الأمر البرمجي بإعطاء الأمر لجميع محركات الروبوت بالحركة إما للأمام أو الخلف أو لليمين أو اليسار
وكذلك تحديد السرعة
mblock-programming-blocks
يستخدم لتحديد اتجاه وسرعة أحد المحركات M1 المحرك الأول M2المحرك الثاني
عند اختيار السرعة قيمة موجبة (100)
يتحرك للأمام
عند اختيار قيمة سالبة ( -100 ) يتحرك للخلف
mblock-programming-blocks
يتم عبر هذا الأمر البرمجي التحكم بالإضاءة RGB LED المدمجة في اللوحة الرئيسية وشدة الإضاءة ودمج الألوان
mblock-programming-blocks يستخدم هذا الأمر البرمجي عند توصيل RGB LED خارجية باللوحة الرئيسية ويتم تحديد رقم منفذ التوصيل
mblock-programming-blocks
يستخدم الأمر البرمجي play note لإصدار الأصوات مثل التنبيهات والنغمات عبر الطنان الكهربائي (Buzzer)المدمج في اللوحة الرئيسية
mblock-programming-blocks
يستخدم لقراءة مستشعر الضوء المدمج في اللوحة الرئيسية
mblock-programming-blocks
يستخدم عند توصيل مستشعر ضوء خارجي باللوحة الرئيسية بأحد المنافذ
وتحديد وضع التشغيل إما On أو Off لإغلاقه
mblock-programming-blocks
يستخدم لبرمجة المفتاح (push button) المدمج في اللوحة الرئيسية
تحت هذا الأمر يتم وضع الأوامر البرمجية التي يطلب من البرنامج تنفيذها عند ضغط المفتاح
mblock-programming-blocks
يستخدم هذا الأمر لقراءة مستشعر الموجات فوق الصوتية
ويتم تحديد المنفذ الذي تم توصيل المستشعربه
mblock-programming-blocks
يستخدم هذا الأمرلقراءة مستشعر تتبع المسار وتحديد منفذ توصيل المستشعر

 

 

رفع الكود على لوحة الروبوت

 

عند الانتهاء من بناء الكود البرمجي الخاص بك قم بتوصيل الروبوت عبر كيبل USB واختيار رقم المنفذ الخاص بالروبوت

mblock-programming-blocks

 

قم باختيار القائمة Edit ثم Arduino mode

mblock-programming-blocks

سيظهر الكود بلغة الأردوينو في يمين الشاشة، قم باختيار Upload to Arduino  لرفع الكود على الروبوت

mblock-programming-blocks



روبوت السومو

 

مصارعة السومو من الفنون القتالية اليابانية القديمة، سنقوم في هذا المشروع ببرمجة الروبوت ليكون جاهزًا للمشاركة بحيث يقوم الروبوت بالبحث عن الخصم في مساحة محددة بواسطة مستشعر الموجات فوق الصوتية وعندما يجده يقوم بالهجوم على الروبوت الخصم.

sumo-mbot

الأدوات المطلوبة:

 

sumo-mbot

mBot Kit (عدد 2)

 

فكرة المشروع

سنقوم في هذا المشروع باستخدام مستشعر الموجات فوق الصوتية ووحدة تتبع المسار. بحيث يتحرك الروبوت على ساحة المعركة دون الخروج من الحدود المرسومة باللون الأسود باستخدام مستشعر تتبع المسار.

 

sumo-mbot

 

يعطي المستشعر قراءة تساوي 3 إذا كان على سطح أبيض وقراءة تساوي 0 إذا كان على سطح أسود، وقيم تساوي 1 أو 2 إذا كانت إحدى جهتي المستشعر على اللون الأسود والأخرى على الأبيض.  لفهم كيفية عمل مستشعر وحدة المسار راجع مشروع روبوت تفادي السقوط

خلال حركة الروبوت على الطاولة يقوم بالبحث عن الخصم باستخدام مستشعر الموجات فوق الصوتية
عندما يكون الخصم على مسافة قريبة تصطدم به الموجات فوق الصوتية  وترتد إلى الروبوت فيتم رصد الخصم والهجوم عليه بزيادة السرعة.
لفهم كيفية عمل مستشعر الموجات فوق الصوتية راجع مشرع الروبوت متتبع الكائنات

رصد حافة الطاولة رصد الخصم الفعل
نعم نعم الانعطاف يمينًا أو يسارًا
نعم لا الانعطاف يمينًا أو يسارًا
لا نعم زيادة السرعة (هجوم)
لا لا التحرك للأمام

 

 

الكود البرمجي

 

سنحتاج عند برمجة روبوت السومو إلى وضع الأوامر باعتبار قراءة مستشعر تتبع المسار ومستشعر الموجات فوق الصوتية.

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

sumo-mbot

 

الأوامر التي بداخل حلقة repeat until ستعتمد على المسافة على قراءة مستشعر الموجات فوق الصوتية ، أي إذا كان الروبوت يسير على السطح الأبيض سننتقل لاختبار شرط المسافة
وهو إذا كانت المسافة بين الروبوت والخصم أقل من 12 سم سيقوم بالهجوم عليه عن طريق زيادة السرعة إلى 255،  وإن لم تكن المسافة كذلك يستمر الروبوت في الحركة للأمام بسرعة متوسطة

 

sumo-mbot

نعود إلى شرط مستشعر تتبع المسار
إذا تحقق الشرط أن القراءة أصغر من 3، فذلك يعني أن الروبوت لم يعد على السطح الأبيض أي وصل إلى حافة ساحة القتال
فهنا يتم تنفيذ الأوامر بعد else،  وهي الحركة للخلف لمدة ثانيتين وفائدة الأمر wait  أن يسمح له بالرجوع مسافة كافية تمكنه من الانعطاف

sumo-mbot

 

بعد أن يعود الروبوت للخلف هل ينعطف يمينا أو يسارًا؟
ليتمكن الروبوت من اتخاذ القرار
سنستخدم الأمر pick random من 1 إلى 10

sumo-mbot

 

وهذا الأمر يقوم في كل مرة بأخذ رقم عشوائي بين العددين اللذان تم اختيارهما
وتبعا لهذا الرقم قمنا بوضع شرط إذا كان الرقم أقل من 5 ينعطف الروبوت لليمين
وإلا فينعطف لليسار

sumo-mbot

قمنا بوضع أمر التأخير الزمني.wait ليكون لدى الروبوت زمن كافي للانعطاف

الكود البرمجي

 

sumo-mbot

بذلك سيكون الروبوت جاهزًا للمشاركة في مسابقة السومو قم بتنزيل الكود على روبوت آخر لتبدأ المنافسة.
لمزيد من المعلومات حول الأوامر البرمجية الأخرى يمكنك مراجعة درس جولة حول الأوامر البرمجية.