وزارة التعليم - كتاب إنترنت الأشياء - الصف 11 - الفصل 1 - المملكة العربية السعودية

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

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

الدرس: وزارة التعليم

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

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

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

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

📝 ملخص الصفحة

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

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

لا توجد مصطلحات جديدة معرّفة في هذه الصفحة.

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

القرار: هذه الصفحة هي استكمال مباشر لنفس الموضوع في الخريطة السابقة (CONTINUE). سيتم إضافة الفروع الجديدة تحت الفرع الحالي "برمجة مركبة التفتيش".

```markmap

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

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

مشروع محاكاة: نظام تخزين مصنع آلي (تابع)

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

##### المكتبات والتهيئة

  • استيراد مكتبة `time`.
  • طباعة نص فارغ `node.print("")` لمسح النصوص السابقة.
##### برمجة حاويات المواد القابلة للتلف

  • بث رسالة تحتوي على:
- المحتويات: "CONSUMABLES".

- معرف الحاوية (ID) بعد تحويله إلى نص.

- فصل المعلومات بمسافة.

  • استخدام دالة `node.send()` للإرسال.
##### استقبال الأوامر والاستجابة

  • قراءة الرسالة الواردة `node.read()`.
  • إذا كانت الرسالة "1": طباعة "PICK" (الالتقاط).
  • إذا كانت الرسالة "2": طباعة "DO NOT PICK" (لا تلتقط).
  • السكون لمدة ثانية `time.sleep(1)`.
##### برمجة حاويات المواد طويلة الأمد

  • بث رسالة تحتوي على:
- المحتويات: "NONCONSUMABLES".

- معرف الحاوية (ID) بعد تحويله إلى نص.

- فصل المعلومات بمسافة.

  • استخدام دالة `node.send()` للإرسال.
##### استقبال الأوامر والاستجابة

  • قراءة الرسالة الواردة `node.read()`.
  • إذا كانت الرسالة "1": طباعة "PICK" (الالتقاط).
  • إذا كانت الرسالة "2": طباعة "DO NOT PICK" (لا تلتقط).
  • السكون لمدة ثانية `time.sleep(1)`.
##### برمجة مركبة التفتيش

###### تهيئة وإدارة البطارية

  • `node.battery.setMax(100.0)`: ضبط أقصى طاقة.
  • `node.battery.init()`: شحن البطارية إلى الحد الأقصى.
  • `node.battery.consume(1.0)`: محاكاة استهلاك الطاقة.
###### اكتشاف محطات الشحن

  • `node.isSensorDetecting()`: التحقق من وجود محطة شحن في النطاق.
  • عند الاكتشاف: استخدام `node.battery.init()` لإعادة الشحن.
###### معالجة رسائل الحاويات والرد

  • قراءة جميع الرسائل في المخزن المؤقت: `for n in range(node.bufferSize())`.
  • فصل نص الرسالة: `recvMsg.split()`.
  • الرد على الحاوية المرسلة:
- إذا كان المحتوى "CONSUMABLES": إرسال النص "1".

- إذا كان المحتوى "NONCONSUMABLES": إرسال النص "2".

  • `time.sleep(0.2)`: السكون لمدة 200 مللي ثانية لتحقيق استجابة أفضل.
###### المقطع البرمجي النهائي

  • يدمج المقطع الكود الخاص بإدارة البطارية واكتشاف الشحن ومعالجة الرسائل في حلقة `while` رئيسية.
  • يتم وضع كود الرد على الرسائل (`if/elif`) داخل الحلقة الرئيسية بعد قراءة كل رسالة.
```

نقاط مهمة

* تحتوي هذه الصفحة على المقطع البرمجي النهائي الكامل لبرمجة مركبة التفتيش (`inspector.py`).

* يظهر الكود النهائي كيفية تنظيم الوظائف (إدارة البطارية، اكتشاف الشحن، معالجة الرسائل) داخل حلقة `while node.loop():` رئيسية واحدة.

* يتم استدعاء دالة `time.sleep(0.2)` في نهاية كل تكرار للحلقة لتحسين أداء المحاكاة.

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

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

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

if splitMsg[0] == "CONSUMABLES": node.send("1", int(splitMsg[1])) elif splitMsg[0] == "NONCONSUMABLES": node.send("2", int(splitMsg[1])) time.sleep(0.2)

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

import time node.battery.setMax(100.0) node.battery.init() while node.loop(): node.battery.consume(1.0) if node.isSensorDetecting(): node.battery.init() for n in range(node.bufferSize()): recvMsg = node.read() splitMsg = recvMsg.split() if splitMsg[0] == "CONSUMABLES": node.send("1", int(splitMsg[1])) elif splitMsg[0] == "NONCONSUMABLES": node.send("2", int(splitMsg[1])) time.sleep(0.2)

وزارة التعليم

نوع: NON_EDUCATIONAL

345 Ministry of Education 2025 - 1447

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

if splitMsg[0] == "CONSUMABLES": node.send("1", int(splitMsg[1])) elif splitMsg[0] == "NONCONSUMABLES": node.send("2", int(splitMsg[1])) time.sleep(0.2) import time node.battery.setMax(100.0) node.battery.init() while node.loop(): node.battery.consume(1.0) if node.isSensorDetecting(): node.battery.init() for n in range(node.bufferSize()): recvMsg = node.read() splitMsg = recvMsg.split() if splitMsg[0] == "CONSUMABLES": node.send("1", int(splitMsg[1])) elif splitMsg[0] == "NONCONSUMABLES": node.send("2", int(splitMsg[1])) time.sleep(0.2) --- SECTION: وزارة التعليم --- 345 Ministry of Education 2025 - 1447

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

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

في سياق برمجة عقدة (Node) في إنترنت الأشياء، ما الغرض من استخدام الأمر `node.battery.init()` داخل حلقة `while`؟

  • أ) إيقاف استهلاك البطارية مؤقتًا لتوفير الطاقة.
  • ب) إعادة شحن البطارية إلى قيمتها القصوى (100.0) عند اكتشاف المستشعر لشيء ما.
  • ج) إرسال إشارة إلى العقدة الرئيسية بأن البطارية منخفضة.
  • د) تهيئة المستشعر للبدء في عملية الاكتشاف من جديد.

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

الإجابة: إعادة شحن البطارية إلى قيمتها القصوى (100.0) عند اكتشاف المستشعر لشيء ما.

الشرح: 1. يتم استهلاك طاقة البطارية باستمرار داخل الحلقة بـ `node.battery.consume(1.0)`. 2. الشرط `if node.isSensorDetecting():` يتحقق من نشاط المستشعر. 3. إذا تم اكتشاف شيء، يتم استدعاء `node.battery.init()` لإعادة تعيين مستوى البطارية إلى الحد الأقصى (100.0) كما تم ضبطه مسبقًا.

تلميح: انظر إلى الشرط الذي يسبق هذا الأمر مباشرة داخل الحلقة.

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

في الكود البرمجي المعطى، ما الوظيفة الأساسية للحلقة `for n in range(node.bufferSize()):`؟

  • أ) إرسال رسائل متعددة إلى العقد المجاورة في نفس الوقت.
  • ب) انتظار وصول رسائل جديدة إلى العقدة لفترة زمنية محددة.
  • ج) معالجة جميع الرسائل المخزنة مؤقتًا (في الـ buffer) للعقدة واحدة تلو الأخرى.
  • د) زيادة سعة الذاكرة المؤقتة للعقدة ديناميكيًا.

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

الإجابة: معالجة جميع الرسائل المخزنة مؤقتًا (في الـ buffer) للعقدة واحدة تلو الأخرى.

الشرح: 1. `node.bufferSize()` يُرجع عدد الرسائل المخزنة في ذاكرة العقدة المؤقتة (buffer). 2. الحلقة `for` تتكرر بعدد هذه الرسائل. 3. في كل تكرار، تُقرأ رسالة واحدة باستخدام `node.read()` وتُعالج (تُقسم وتُرسل بناءً على نوعها).

تلميح: يتم استخدام `node.read()` داخل هذه الحلقة لقراءة الرسائل.

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

ما نوع الرسالة التي، عند استقبالها، ستتسبب في إرسال العقدة للرقم "1" باستخدام الأمر `node.send("1", int(splitMsg[1]))`؟

  • أ) رسالة تبدأ بكلمة "NONCONSUMABLES".
  • ب) رسالة تبدأ بكلمة "CONSUMABLES".
  • ج) أي رسالة تحتوي على الرقم 1.
  • د) رسالة تأتي بعد تفريغ الذاكرة المؤقتة بالكامل.

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

الإجابة: رسالة تبدأ بكلمة "CONSUMABLES".

الشرح: 1. بعد قراءة الرسالة وتقسيمها، يتم فحص الكلمة الأولى `splitMsg[0]`. 2. الشرط `if splitMsg[0] == "CONSUMABLES":` يتحقق مما إذا كانت الرسالة تتعلق بالمواد الاستهلاكية. 3. إذا تحقق الشرط، يتم تنفيذ `node.send("1", int(splitMsg[1]))` حيث `splitMsg[1]` هو الرقم المرسل مع الرسالة الأصلية.

تلميح: انظر إلى هيكل جملة `if` التي تسبق أمر الإرسال هذا.

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