المقطع البرمجي النهائي (edge.py) - كتاب إنترنت الأشياء - الصف 11 - الفصل 1 - المملكة العربية السعودية

الكتاب: كتاب إنترنت الأشياء - الصف 11 - الفصل 1 | المادة: إنترنت الأشياء | المرحلة: الصف 11 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

الدرس: المقطع البرمجي النهائي (edge.py)

📚 معلومات الصفحة

الكتاب: كتاب إنترنت الأشياء - الصف 11 - الفصل 1 | المادة: إنترنت الأشياء | المرحلة: الصف 11 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

نوع المحتوى: درس تعليمي

📝 ملخص الصفحة

📚 البرمجة: منطق المحاكاة (العقد الطرفية)

المفاهيم الأساسية

دالة `uniform()`: تعمل مثل دالة `randint()` ولكنها تنتج أعداداً حقيقية وليس فقط أعداداً صحيحة.

خريطة المفاهيم

```markmap

أدوات محاكاة إنترنت الأشياء

برنامج كاب كاربون (CupCarbon)

إنشاء مشروع محاكاة جديد

#### الخطوة 1: بدء مشروع جديد

  • اضغط على أيقونة "New Project" (مشروع جديد) من شريط الأدوات.
#### الخطوة 2: حفظ المشروع

  • اختر الموقع المراد حفظ المشروع فيه.
  • اكتب اسم الملف: "My First CupCarbon Simulation".
#### الخطوة 3: تأكيد الحفظ

  • اضغط على زر "Save" (حفظ).

مشروع محاكاة: مراقبة الحريق والتحذيرات

#### إنشاء مشروع جديد للمراقبة

##### الخطوة 1: بدء مشروع جديد

  • اضغط على New Project (مشروع جديد) من شريط الأدوات.
##### الخطوة 2: تسمية المشروع وحفظه

  • اختر الموقع الذي تريد تخزين المشروع فيه.
  • اكتب "Fire Surveillance and Notification" في حقل File name (اسم الملف).
  • اضغط على Save (حفظ).

إنشاء شبكة العقدة بوحدة التحكم الرئيسية والوسطي

#### الخطوة 1: إدراج العقد

  • اضغط على "عقدة إنترنت أشياء (IoT) Node" من شريط Toolbar.
  • اضغط على الخريطة لإضافة العقدة.
  • اضغط على "All" من شريط State.
  • ضع عقدتين أخريين داخل الدائرة الخارجية للعقدة الأولى.
  • اضغط على Esc.
#### الخطوة 2: التعرف على العقد

  • العقدة الأولى المضافة هي وحدة التحكم الرئيسية.
  • العقدتان الأخريان هما عقد الوسطي.
#### الخطوة 3: ضمان الاتصال

  • يجب وضع العقد داخل نصف قطر اتصال وحدة التحكم.
  • إذا لم تكن داخل النطاق، اسحبها وأقلتها بالقرب حتى يظهر سهم اتصال ثنائي الاتجاه.

تابع إضافة العقد الطرفية

#### لإدراج العقد الطرفية:

##### الخطوة 1

  • اضغط على Node IoT (عقدة إنترنت الأشياء) من شريط Toolbar (الأدوات).
##### الخطوة 2

  • ضع عقدتين كل node proxy (عقدة وسطى)، وذلك داخل دائرتها الأخرى.
##### الخطوة 3

  • اضغط على All (الكل) من شريط الحالة.
##### الخطوة 4

  • اضغط على Esc في لوحة المفاتيح.

إنشاء المقاطع البرمجية

#### المكتبات اللازمة

  • `import time`
  • `import random`
#### منطق المحاكاة (العقد الطرفية)

##### توليد حدث حريق عشوائي

  • داخل حلقة `while node.loop():`
  • `fire = random.randint(1, 6)` لتحديد القطاع الذي قد يحدث فيه الحريق.
##### التحقق من وقوع الحريق وإرسال التحذير

  • إذا كانت `fire == 1` (اندلع حريق في القطاع 1):
- `node.print("FIRE!")`

- إنشاء رسالة: `message = "FIRE IN SECTOR " + str(node.id())`

- إرسال الرسالة: `node.send(message)`

##### حالة عدم وجود حريق

  • إذا أنتجت دالة التوليد أي رقم آخر (من 2 إلى 6):
- لا يوجد حريق في القطاع.

- تقوم العقدة بطباعة نص ذاتي فارغ: `node.print("")` لمسح أي نص مطبوع سابقاً.

##### فترة السكون العشوائية

  • تهدف إلى محاكاة الأحداث في الحياة الواقعية.
  • تستخدم الدالة `time.sleep(random.uniform(1, 4))`.
  • فترة السكون تتراوح بين 1 و 4 ثوانٍ.
#### المقطع البرمجي النهائي (edge.py)

```python

import time

import random

while node.loop():

fire = random.randint(1, 6)

if fire == 1:

node.print("FIRE!")

message = "FIRE IN SECTOR " + str(node.id())

node.send(message)

else:

node.print("")

time.sleep(random.uniform(1, 4))

```

نقاط مهمة

  • إذا لم يتم توليد الرقم 1 (أي تم توليد رقم من 2 إلى 6)، فهذا يعني عدم وجود حريق، وتقوم العقدة بمسح الشاشة السابقة.
  • فترة السكون العشوائية بين 1-4 ثانية تُستخدم لمحاكاة التوقيت غير المنتظم للأحداث الواقعية.
  • الكود الكامل للعقدة الطرفية يجمع بين توليد الحدث، والتحقق منه، وفترة الانتظار في حلقة مستمرة.

📋 المحتوى المنظم

📖 محتوى تعليمي مفصّل

نوع: محتوى تعليمي

إذا أنتجت دالة توليد الأرقام العشوائية أي عدد صحيح آخر (في حالتنا أي رقم من 2 إلى 6)، فلا يوجد حريق في القطاع، ويتعين على العقدة ببساطة طباعة نص ذاتي فارغ لمسح أي نص مطبوع سابقاً.

نوع: محتوى تعليمي

else: node.print("")

نوع: محتوى تعليمي

في الختام، ستسكن العقدة لفترة زمنية عشوائية، وذلك لمحاكاة الأحداث في الحياة الواقعية. سيت تحقق ذلك باستخدام الدالة (uniform( ) التي تعمل مثل دالة (randint( ، ولكنها تنتج أعداداً حقيقية وليس فقط أعداداً صحيحة. ستتراوح فترة السكون في مشروعك بين 1-4 ثوانٍ.

نوع: محتوى تعليمي

time.sleep(random.uniform(1, 4))

المقطع البرمجي النهائي (edge.py)

نوع: محتوى تعليمي

Complete Code (edge.py)

نوع: محتوى تعليمي

import time import random while node.loop(): fire = random.randint(1, 6) if fire == 1: node.print("FIRE!") message = "FIRE IN SECTOR " + str(node.id()) node.send(message) else: node.print("") time.sleep(random.uniform(1, 4))

نوع: METADATA

وزارة التعليم Ministry of Education 2025 - 1447

نوع: METADATA

328

📄 النص الكامل للصفحة

إذا أنتجت دالة توليد الأرقام العشوائية أي عدد صحيح آخر (في حالتنا أي رقم من 2 إلى 6)، فلا يوجد حريق في القطاع، ويتعين على العقدة ببساطة طباعة نص ذاتي فارغ لمسح أي نص مطبوع سابقاً. else: node.print("") في الختام، ستسكن العقدة لفترة زمنية عشوائية، وذلك لمحاكاة الأحداث في الحياة الواقعية. سيت تحقق ذلك باستخدام الدالة (uniform( ) التي تعمل مثل دالة (randint( ، ولكنها تنتج أعداداً حقيقية وليس فقط أعداداً صحيحة. ستتراوح فترة السكون في مشروعك بين 1-4 ثوانٍ. time.sleep(random.uniform(1, 4)) --- SECTION: المقطع البرمجي النهائي (edge.py) --- Complete Code (edge.py) import time import random while node.loop(): fire = random.randint(1, 6) if fire == 1: node.print("FIRE!") message = "FIRE IN SECTOR " + str(node.id()) node.send(message) else: node.print("") time.sleep(random.uniform(1, 4)) وزارة التعليم Ministry of Education 2025 - 1447 328

🎴 بطاقات تعليمية للمراجعة

عدد البطاقات: 3 بطاقة لهذه الصفحة

في برنامج محاكاة إنذار الحريق باستخدام إنترنت الأشياء، ما الغرض من استخدام الدالة `random.uniform(1, 4)` في نهاية حلقة البرنامج؟

  • أ) لتوليد رقم عشوائي صحيح يمثل حالة الحريق (1 يعني حريق، 2-6 يعني لا يوجد حريق).
  • ب) لتوليد فترة زمنية عشوائية (بين 1 و4 ثوانٍ) لتوقف العقدة (السكون) لمحاكاة الأحداث في الحياة الواقعية.
  • ج) لإرسال رسالة إنذار الحريق إلى العقد الأخرى في الشبكة بعد تأخير عشوائي.
  • د) لطباعة رسالة فارغة على شاشة العقدة لمسح أي نصوص سابقة بعد فترة انتظار عشوائية.

الإجابة الصحيحة: b

الإجابة: لتوليد فترة زمنية عشوائية (بين 1 و4 ثوانٍ) لتوقف العقدة (السكون) لمحاكاة الأحداث في الحياة الواقعية.

الشرح: 1. الدالة `uniform(a, b)` من مكتبة `random` تولد أعداداً حقيقية عشوائية في المدى [a, b]. 2. في هذا السياق، المدى هو [1, 4]. 3. الدالة `time.sleep()` توقف تنفيذ البرنامج لعدد محدد من الثواني. 4. استخدام القيمة العشوائية الناتجة مع `time.sleep()` يحاكي الفترات الزمنية غير المنتظمة بين عمليات فحص الحريق في العالم الحقيقي.

تلميح: تذكر أن البرنامج يحاكي نظام إنذار حريق، وأن الأحداث في الواقع لا تحدث بانتظام تام.

التصنيف: مفهوم جوهري | المستوى: متوسط

في المقطع البرمجي لمحاكاة مستشعر حريق، ماذا يحدث إذا أنتجت الدالة `random.randint(1, 6)` الرقم 1؟

  • أ) تتوقف العقدة عن العمل وتنتظر إعادة التشغيل.
  • ب) تطبع العقدة رسالة فارغة لمسح الشاشة وتنام لفترة عشوائية.
  • ج) تطبع العقدة كلمة "FIRE!" على شاشتها المحلية وترسل رسالة نصية تحتوي على معرف القطاع إلى العقد الأخرى.
  • د) تغير العقدة معرفها (ID) وتعيد الاتصال بالشبكة.

الإجابة الصحيحة: c

الإجابة: تطبع العقدة كلمة "FIRE!" على شاشتها المحلية وترسل رسالة نصية تحتوي على معرف القطاع إلى العقد الأخرى.

الشرح: 1. الدالة `random.randint(1, 6)` تولد عدداً صحيحاً عشوائياً بين 1 و6. 2. الشرط `if fire == 1:` يتحقق مما إذا كان الرقم المسحوب هو 1. 3. إذا تحقق الشرط (fire == 1)، ينفذ كتلة الأوامر التالية: أ. `node.print("FIRE!")` لطباعة إنذار محلي. ب. `node.send(message)` حيث message = "FIRE IN SECTOR " + str(node.id()) لإرسال إنذار للعقد الأخرى.

تلميح: انظر إلى الشرط `if fire == 1:` في الكود. ماذا يوجد داخل هذا الشرط؟

التصنيف: خطوات | المستوى: سهل

ما الفرق الرئيسي بين الدالة `random.randint(a, b)` والدالة `random.uniform(a, b)` كما ورد استخدامهما في المثال البرمجي؟

  • أ) `randint` تُستخدم للتحكم في وقت السكون، بينما `uniform` تُستخدم لكشف الحريق.
  • ب) `randint` تُرجع عدداً صحيحاً عشوائياً ضمن المدى المغلق [a, b]، بينما `uniform` تُرجع عدداً حقيقياً (عشرياً) عشوائياً ضمن المدى [a, b].
  • ج) `randint` تُرجع قيمة بين 0 و1، بينما `uniform` تُرجع قيمة ضمن أي مدى محدد.
  • د) لا يوجد فرق، كلاهما يؤديان نفس الغرض ولكن بكفاءات مختلفة.

الإجابة الصحيحة: b

الإجابة: `randint` تُرجع عدداً صحيحاً عشوائياً ضمن المدى المغلق [a, b]، بينما `uniform` تُرجع عدداً حقيقياً (عشرياً) عشوائياً ضمن المدى [a, b].

الشرح: 1. الدالة `random.randint(1, 6)`: - الغرض: توليد رقم يمثل حالة الحريق. - الناتج: عدد صحيح (مثل 1, 2, 3, 4, 5, 6). 2. الدالة `random.uniform(1, 4)`: - الغرض: توليد فترة سكون. - الناتج: عدد حقيقي/عشري (مثل 1.5, 2.78, 3.1). 3. الفرق الجوهري هو في نوع البيانات الناتجة (صحيح مقابل حقيقي)، مما يحدد ملاءمة كل دالة للغرض المطلوب.

تلميح: فكر في نوع البيانات التي تنتجها كل دالة. انظر إلى النص الذي يصف `uniform`.

التصنيف: فرق بين مفهومين | المستوى: متوسط