( انشاء بلوك خاص بي /العمليات على البيانات )
Lego mindestrom ev3
اعداد :مريم باعوين
١
كيفية انشاء بلوك جديد :
بعض الأحيان يكون لديك امر مكرر طوال البرنامج و يتكون من عدد من البلوكات و العمليات
و تحب ان تختصر هذا الامر في بلوك جديد تستدعيه كلما اردت تكرار الامر في البرنامج
الكامل للروبوت .
مثال تريد تصميم بلوك لتعيين زوايا اللف في كل مرة و ان يلتف الروبوت بعد عمليات
حسابية تجعل الالتفاف دقيقا سنرى هذا المثال بعد شرح العمليات الحسابية .
مثال اخر ربما الروبوت في أماكن معينة من عمله ينتظهر ظهور لون معين ليلتف ثم يتوقف
عن الحركة كلون اسود سيكون البرمجة للتحرك الى ان نرى لون اسود كالتالي :
اذا اردنا حفظ هذه البرمجة كبلوك واحد سنحدد البلوكات ماعدا بلوك التشغيل :
ستصبح مظللة بلون ازرق فاتح عندما تحددها معا ثم نذهب للقائمة toolsو نختار الامر
.my block builder
٢
من ثم سيظهر لنا التالي :
تحديد اسم إضافة متغيير
للبلوك للبلوك
٣ وصف للبلوك
اختيار
صورة تمثل
البلوك
لن نضيف الان المتغير فقط قم بالتسمية ليكن mblackاسما للبلوك
ستتحول الأوامر التي ظللتها للبلوك فالصوره أعلاه و اذا ضغطت عليه مرتين ستجد بداخله
الأوامر التي ظللتها سابقا .و يمكنك تعديلها من هناك و سيكون هذا التعديل لكل مكان تضع
فيه البلوك الأزرق المختصر الجديد.
واذا ذهبت الى القائمة الأخيرة و التي تكون في بدء تشغيل البرنامج فارغة ستجده هناك و
بامكانك سحبه لوضعه في أي مكان من البرنامج عندما تكمل البرمجة
مثال :لنجعل الربوت ينتظر 5ثواني ثم يتحرك الروبوت بشكل مستمر الى ان يجد لونا اسود
فيلتف عنده ثم يصدر صوتا ستكون البرمجة كالتالي :
الغرض في المثال بسيط و لكن عندما يكون برنامجك طويلا و يتكرر هذا الامر فيه كثيرا
ستجد ان البلوك مفيد لجعل الكود مختصرا و غير ممل في المراجعة و التعديل .
٤
ماذا لو اضفنا بارامترا او لنقل متغيرا على ذات الأوامر السابقة ماذا سيحصل فالواقع عند
الضغط على +سيظهر لك اول متغير اسمه aيمكنك إضافة أي عدد تحتاجه منها
و يمكنك تحديد خواص هذا المتغير و طريقة التحكم بقيمته :
الضغط هنا
سيتيح لك
اختيار رمز
للمتغير
٥
اعداد خواص
المتغير
اسم للمتغير
هل هو مدخل ليكون مشابها
لمتغير تحديد الطاقة في بلوك
التحريك أو هل هو مخرج
كمتغير نتائج العمليات في
العمليات الحسابية
نوع المتغير هل تريده رقما ام طرق عرض
نصا ام متغيرا منطقيا ام المتغير
مصفوفة عددية ام مصفوفة
منطقية .
القيمة المبدئية
للمتغير
سأجعل المتغيير aمن نوع عددي و سيكون مدخلا و سأتحكم من خلالة بطاقة التحرك في
كل مرة اضع فيها البلوك في أماكن مختلفة من البرنامج :
سيظهر لنا المتغيير هكذا و سنققل القيم داخل المتغيير منه
لتكون طاقة التحرك في البلوك الأول
٦
تم ربط القيمة بالموضع المطلوب لها داخل البلوك
اما شكل البلوك عندما تستخدمه فالبرنامج من القائمة الأخيرة سيكون كالتالي :
لان aكان من نوع مدخل بامكانك تغيير القيمة كما تغييرها في البلوكات الأساسية سواء
بوضع القيمة مباشرة فيه او سحبها من بلوك اخر اليه كاحدى الطرق التالية:
٧
ماذا لو جعلنا المتغيير مخرجا :
لنقل باننا سنقوم دوما بطرح 10من قراءه حساس المسافة و نجعل هذه العمليه في بلوك
واحد و ناتج الطرح سيكون متغيرا مخرجا نربطه لاحقا بما نشاء فالبرنامج :
سيظهر لنا المتغيير في نهاية البرمجة لندخل له القيمة داخل البلوك كالتالي
و سيكون شكل البلوك كالتالي :
*لاحظت الفرق بين المتغيرات في حالة كانت مدخلا اومخرجا للقيم ( ) input / output؟
٨
الحالة المدخلات و نوعها النتيجة و نوعها دائما منطقي العمليات ( القائمة الحمراء ):
رقمية المقارنة :
Equal To
Not Equal To صح اذا كان ) (A = Bوالا خطأ A, B مثال :
Greater Than A, B
Less Than صح ) (A ≠ Bو الا فالناتج خطأ
Greater Than or Equal اذا كان
To
Less Than or Equal To صح اذا كان) (A > Bوالا خطأ A, B
صح اذا كان) (A < Bوالا خطأ A, B
صح اذا كان) (A ≥ Bوالا خطأ A, B
صح اذا كان ) (A ≤ Bو الاخطأ A, B
٩
الناتج المدخلات الأمر العمليات المنطقية ( المجموعات ):
نوعها and
صواب اذا كان a ,bكلاهما منطقي
صواب و الا سيكون الناتج خطأ aوb or
Xor
صواب اذا كان aاو bاو كلاهما b aو
صواب و يكون الناتج خطأ اذا
كان aو bكلاهما خطأ aو b
صواب اذا كان aاو bصواب .
خطأ اذا كان aو bكلاهما صواب
.
خطأ اذا كان aو bكلاهما خطأ .
خطأ اذا كان aصواب a not
صواب اذا كان aخطأ
بطبيعة الحال مدخلات و ناتج هذه العملية بيانات منطقية ( صواب /
خطأ ) ( ) true /false
امثلة :تتبع الخط بحساسي لون الحساسان مركبان بحيث لا تفصل بينهما مسافة و استخدام
أوامر منطقية (لاتنسى وضع الأوامر داخل لوب تكراري):
هل يمكنك تفسير الأوامر السابقة و هل يمكن ان تكمل على نفس الوتيرة بأربعة حساسات
؟؟؟؟
١٠
مثال ( لا تنسى و ضع الأوامر داخل لوب تكراري):
مثال :جعل الروبوت يلتف 90درجة يسارا و يتباطئ في اللف كلما اقترب من اكمال اللف
الى ان يتوقف .
فكر لمذا الأرقام التالية اللف 90يمينا :
و مادورها ؟
١١
الثوابت و المتغيرات :
لإجراءات العمليات الحسابية و المنطقية نحتاج بادئا لوجود بيانات سواء كانت ثابتة او
متغيرة او مصفوفات ...ستكون هذه الأرقام و العمليات فيما بعد طريقتك للجعل الروبوت اكثر
ذكاءا و اكثر كفاءه .
كما نعلم في الرياضيات ( مثلا باي عدد ثابت ،و س متغير ) كذلك الامر في البرمجة
فسيكون لدينا اما ثوابت لن يحدث تغيير في قيمتها طوال البرنامج أو متغيرات تقبل التعديل
في قيمها اثناء البرنامج .
أنواع البيانات في البرنامج ( ارقام ،حروف (او نصوص) ،منطق (صح او خطا))
في القائمة الحمراء بالبرنامج نجد البلوكات التالية :
الثابت :
قيمة لن يتم تغيرها طوال البرنامج كالقيمة المعروفة لباي مثلا لذلك بعد تحديد القيمة لن يكون
لديك خيار سوى قراءة هذه القيمة و نقلها لاماكن أخرى فالبرنامج يأتي العمل كالتالي :
هنا يدرج قيمة الثابت
هنا تختار نوع الثابت ( نص ،رقم ،
منطقي ،مصفوفة ارقام ،او مصفوفة
منطقية )
١٢
اسم المتغيير المتغيرات :
قيم المستشعرات تتغير حول الروبوت و هذا اهم تطبيق لمعالجة
هذه القيم او تخزينها .
ادخال او اخراج القيم
وكتابتها للمتغيير
بالنقر هنا ستظهر إمكانية إضافة تغيير و بالنقر عليها يمكنك تسمية هذا
المتغيير ليصبح لديك القدر الذي تشاء من المتغيرات
ستجد ان لديك خيارين هما قراءه قيمة المتغير او كتابة قيمة جديدة للمتغير
تحديد وضعية المتغير ( هل سنقرأ قيمة مخزنه به ،ام سنغيير قيمته )
الوضع writeلتغيير قيمة المتغيير بالكتابة مباشرة فيه او عن طريق
نقل قيمة من مستشعر او عملية حسابية بالاسلاك اليه
الوضع Readلقراءه المتغيير و نقلها عبر سلك او عملية حسابية او
إخراجها في الشاشة او عبر الموتور
هنا تختار نوع المتغيير ( نص ،رقم
،منطقي ،مصفوفة ارقام ،او
مصفوفة منطقية )
١٣
العمليات الحسابية :
تجرى العمليات فالوضع المباشر للبلوك على عددين بحد اقصى و العمليات المتاحة فالوضع
المباشر للبلوك هي ( الجمع و الطرح و الضرب و مطلق العدد و الجذر التربيعي للعدد و رفع
العدد لقوة معينة ) و تجد اخر خيار خيار ADVأي العمليات المتقدمة بالضغط عليه سيصبح
بامكانك تنفيذ عمليات أخرى غير السابقة و العمليات السابقةولكن على 4اعداد و ليس
عددين :
بالضغط هنا تظهر قائمة
العمليات المباشرة و في اسفلها
اختيار العمليات المتقدمة ADV
ستكون عملية الجمع المباشرة منها و الطرح و القسمة و الضرب بين عددين هما a, b
و يمكنك اخذ الناتج وربطه بالموتورات او المتغيرات بشكل عادي
١٤
حساب الجذر التربيعي لعدد حساب مطلق العدد
ضع هنا القيمة التي اخراج الناتج ضع هنا اخراج الناتج
تريد حساب الجذر القيمة التي
تريد حساب
التربيعي لها
مطلقها
رفع عدد لقوة معينة
ضع هنا قيمة الأساس اخراج الناتج
ضع هنا قيمة الأس
تمارين :
-1اعرض على الشاشة مربع العدد 4باستخدام بلوك العمليات الحسابية .
-2اعرض عل الشاشة ناتج اجراء عملية الجذر التربيعي للعدد 81باستخدام العمليات الحسابية داخل الروبوت .
-3اعرض على الشاشة حاصل الفرق بين قرائتي سنسرين مسافة احدهم في مقدمة الروبوت و الآخر في جهته
الخلفية .
١٥
العمليات في الوضع المتقدم ( :) adv
الميزة كما ذكرت سابقا سيصبح لديك 4اعداد لاجراء العمليات عليها في ذات البلوك و تتيح
لك عمليات حسابية أخرى بالإضافة للموجود في الوضع المباشر للبلوك .
Add العمليات المتاحة في الوضع المتقدم ( :) adv
subtract جمع
Multiply طرح
ضرب
divide قسمة
modulo
exponent باقي القسمة
negate أس
floor عكس
ceil تقريب للاسفل (صحيح العدد)
round تقريب للاعلى
absolute تقريب
مطلق
log
ln لوغاريتم
sin لوغاريتم طبيعي
cos
tan جيب الزاوية
Asin جيب تمام الزاوية
Acos
Atan مماس
Square root معكوس جيب الزاوية
معكوس جيب التمام
معكوس الظل
جذر
١٦
أمثلة على اجراء العمليات و استخدام المتغيرات :
مثال :
من اشهر الطرق لتصحيح سير الروبوت في خط مستقيم استخدام العمليات الحسابية مع
حساس الجايرو و ذلك بالطبع بعد ان تتأكد بان حساس الجايرو موضوع في مركز الروبوت و
بأن الروبوت متزن تماما حول هذا المركز .
لاحظ باننا بدأنا بعملية تصفير حساس الجايرو و من ثم نقل قيمة القراءه فيه لتكون هي
قيمة bفي العملية الحسابية و ضربها في العدد ( 0.8قد تحتاج لتعديل هذا الرقم حسب
روبوتك بالزياده او النقصان ) و من ثم جعل ناتج العملية هو القيمة المحدده لاتجاه سير
الروبوت في البلوك الأخير .
مثال :لاستخدام المتغيرات مع العمليات الحسابي:
سنعرف 3متغيرات و نضع لها قيم ( بالإمكان ان تكون هذه القيم قادمة من قراءه احد
الحساسات ) و من ثم ندخل هذه المتغيرات داخل بلوك العمليات الحسابية في الوضع المتقدم
و ننفذ عليها العمليات التي نشاء و ناخذ الناتج ليكون مخرجا في احد المحركات او ناتجا على
شاشة العرض و ربما اذا اردنا تخزينه في متغير اخر .هنا نخزنه في متغير ثم نعرض
المتغيير على الشاشة .
١٧
مثال :
تحديد زاوية معينة للالتفاف بدقة و ببلوك واحد وعملية واحده سواء يمينا او يسارا
قبل هذا نحتاج لمعرفة مقدار الخطأ في حساس الجايرو الخاص بنا عند اللف لليمين او لليسار
سنجعل الروبوت مقترنا الكمبيوتر لقراءه قيمة الحساس فالبرنامج و نطبق البرمجية البسيطة
التالية :
عند تطبيقها وجدت ان الروبوت توقف فعليا عند قيمة الزاوية 106ما يعني وجود مقدار
خطا 16درجة مع التكرار وجدتها 124في مرة تالية لذا سأقدر مقدار الخطأ ب 20و
استخدم البرنامج التالي و في اتجاه اللف الاخر قدرتها 10وهذا الرقم ستقدره بنفسك بناء
على روبوتك:
(مطلق b+ (a
bتمثل مقدار الخطأ لحساس
الجايرو في حالة اللف
١٨
اخراج قيمة عشوائية :
اما ان تقوم بعملية الاختيار العشوائي من بين ارقام صحيحة او قيم منطقية ( صواب و خطأ)
في حالة الإخراج من بين قيم رقمية ستحدد اعلى قيمة و ادنى قيمة يتم سحب القيمة
العشوائية من بينها
التهيئة التلقائية لهذا الامر هي الاختيار لعدد صحيح من بين 1و 10و تكون احتمالية
ظهور عدد ما من بينها هي ( ُ ) 10/1عشر ( احتمال ظهور حدث ما = (عدد عناصر الحدث
/عدد عناصر فضاء الإمكانات ) و هكذا فالامر التلقائي فالبرنامج سيكون فيه احتمالية ظهور
أي عدد من بين 1الى 10متساوية حيث لا تكرار بين القيمة الواحدة ،و لو وضعنا المدى
من 1الى 6لاصبح الاختيار العشوائي مطابق لعملية القاء حجر نرد منتظم ذو ستة أوجه.
الخيار الاخر و هو اخراج قيمة عشوائية من نوع منطقي
الامر يشبه القاء قطعة نقد لها وجهان ( صورة و كتابة ) فالامر التلقائي ستكون احتمالية
ظهور احدهما % 50و هذا ما يمثله الرقم 50في البلوك و يقصد به فعليا نسبة ظهور
الصواب فلو اردت ان يتم السحب من بين المجموعة ( صواب /خطأ) سيكون الرقم 50
المكتوب تلقائيا هو النسبة الصحيحة ،اما اذا اردت السحب مثلا من بين ( صواب ،صواب ،
صواب ،خطأ) هنا نسبة الصواب % 75عليك بالتالي تغيير الرقم الى القيمة 75كالتالي :
١٩
مثال :لابد انك قد شاهدت فاليوتيوب الروبوت الذ يلعب معك (حجره ورقة مقص )
سنستخدم حساس مسافة ليتعرف الروبوت على انك اخترت احد خياراتك (حجرة ورقة او
مقص ) و 3موتورات على كل موتور سنثبت بيم عليه صورة احداها ( حجرة ورقة قص )
عندما يشعر الروبوت بوجود يدك يقوم بتحريك احد الموتورات عشوائيا
ستكون البرمجة كالتالي :
ليكن الاختيار العشوائي من 1الى 3و ليكن الرقم واحد لتحريك الموتور Aو الرقم 2
لتحريك الموتور Bو ليكن 3لتحريك الموتور C
السلسلة النصية :
يمكنك ترتيب عدد من المتغيرات داخل السلسلة النصية و عرضها في شاشة الروبوت مترتبه سترى هذا
فالمثال التالي لعرض نتائج بلوك التقريب ،منظمة و على الترتيب اذا فهذا الامر سيسمح لك بعرض 3
متغيرات في نفس اللحظة على الشاشة دون ان يستدعي منك الامر ترتيب مواقع العرض لكل متغيير منها .
بلوك التقريب :استخراج قيم الحساسات و اجراء عمليات حسابية عليها يعطيك نواتج تكون في حاجة الى
التقريب او تقليل الأرقام العشرية بعد الفاصلة سيتيح لك هذا البلوك العملية حسب الخيارات التالية :
التقريب للعدد الصحيح بغض عملية التقريب العادية
النظر عن قيمة الأرقام بعد
الفواصل ( صحيح العدد)
٢٠
عدد الخانات العشرية التي تريد الإبقاء عليها التقريب للعدد الصحيح الأكبر التالي
(صفر تعني ان الناتج سيكون 4فقط و لو كتبنا بغض النظر عن قيمة الأرقام بعد
بدل 0العدد 1سيكون الناتج الرقم 4.7و لو
الفاصلة
كتبنا بدل 0العدد 2سيبقى الرقم 4.75
مثال :سنعرض على الشاشه سلسلة البيانات تمثل نواتج عملية التقرييب في 3طرق .
البرنامج كالتالي ( :هل يمكنك توقع الأرقام المعروضه على الشاشه ؟)
٢١