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

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

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

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

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

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

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

📝 ملخص الصفحة

📚 تهيئة الاتصال وبرمجة متغيرات المشروع

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

متغيرات الاتصال بـ MQTT: متغيرات برمجية تُستخدم لتكوين اتصال بروتوكول MQTT بين العميل والوسيط.

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

```markmap

7. الرسائل في إنترنت الأشياء

تصميم وبرمجة جهاز ذكي (صفحة 273)

مشروع: إدارة النفايات الذكية

#### المشكلة: اكتظاظ سكاني يؤدي لتراكم النفايات

#### الحل: استخدام حاويات نفايات ذكية

##### ترسل تنبيه عند الامتلاء

##### تحلل البيانات لتحسين العملية

#### التنفيذ: نموذج أولي لحاوية ذكية

##### يحسب متوسط مرات الاستخدام للوصول للسعة الكاملة

##### يرسل رسالة إلى وسيط (MQTT) عند كل استخدام

##### يرسل رسالة عند الامتلاء إلى متحكم النظام

#### التقنيات المستخدمة

##### متحكم أردوينو (Arduino)

##### برمجة باستخدام بروتوكول Firmata ولغة بايثون

##### منصة MQTT (مثل EMQX) لتوزيع الرسائل

مكونات وأدوات المشروع (صفحة 274)

الترانزستور الضوئي (Phototransistor)

#### الوظيفة: كشف الضوء وتحويله لإشارات كهربائية

#### الرمز التخطيطي: رمز ترانزستور مع سهمين باتجاه القاعدة

#### المظهر الفعلي: جسم بلاستيكي صغير بثلاثة أطراف ونافذة شفافة

مستشعر الإمالة (Tilt Sensor)

#### الوظيفة: قياس درجة الميل بالنسبة للجاذبية

#### الرمز التخطيطي: دائرة تحتوي على دوائر صغيرة تمثل آلية الكرة أو الزئبق

#### المظهر الفعلي: مكون مستطيل أسود بثلاثة أطراف

النموذج الأولي باستخدام الأردوينو (صفحة 275)

آلية عمل النموذج

#### مستشعر الإمالة: يسجل حدث الفتح/الإمالة في كل مرة.

#### الترانزستور الضوئي: يعمل كمستشعر عند الوصول إلى حد معين (يعني أن الحاوية مليئة).

المكونات المطلوبة

#### لوحة أردوينو أونو R3

#### لوحة توصيل الدوائر الصغيرة (Breadboard)

#### ترانزستور ضوئي

#### مستشعر إمالة

#### مقاومتان (1 كيلو أوم)

الاتصال ببسيط EMXQ العام (صفحة 276)

خطوات التثبيت والاتصال

#### 1. تثبيت تطبيق MQTTX

##### زيارة موقع: https://mqttx.app/

##### تنزيل أحدث إصدار وتشغيل المثبت

#### 2. تكوين الاتصال بالوسيط (EMQX)

##### فتح تطبيق MQTTX وإنشاء اتصال جديد

##### إدخال بيانات الاتصال:

###### الاسم (Name): مثال: desktop_connection

###### المضيف (Host): mqtt://broker.emqx.io

###### المنفذ (Port): 1883

دائرة الأردوينو (صفحة 277)

تثبيت المكونات

#### 1. لوحة أردوينو أونو R3

#### 2. لوحة توصيل الدوائر الصغيرة (Breadboard)

#### 3. مستشعر الضوء (Phototransistor)

#### 4. مستشعر الإمالة بأربعة أطراف (4-pin Tilt Sensor)

#### 5. مقاومتان (Resistor)

توصيل المكونات (صفحة 278)

توصيل الترانزستور الضوئي

#### 1. الباعث (Emitter) → الطرف التناظري A0 (سلك أصفر)

#### 2. المقاومة: طرف مع الباعث، والطرف الآخر → العمود السالب للوحة

#### 3. 5V من الأردوينو → المقاومة الموجبة للوحة (سلك أحمر)

#### 4. GND من الأردوينو → العمود السالب للوحة (سلك أسود)

#### 5. المجمع (Collector) → العمود الموجب للوحة

توصيل مستشعر الإمالة

#### 1. المقاومة الثانية → الطرف الثاني للمستشعر

#### 2. الطرف الثاني للمستشعر → الطرف الرقمي 3 للأردوينو (سلك أحمر)

#### 3. الطرف الرابع للمستشعر → العمود الموجب للوحة (سلك أحمر)

#### 4. المقاومة: طرف → العمود السالب للوحة (سلك أسود)

الدائرة بشكلها النهائي (صفحة 279)

الشكل النهائي للدائرة

#### شكل 7.16: مخطط تخطيطي للدائرة الكاملة

##### يوضح لوحة أردوينو أونو متصلة بلوحة توصيل

##### يظهر المكونات: مقاومة، LED، ترانزستور

##### يظهر أسلاك التوصيل (أحمر، أصفر، أخضر، أسود، برتقالي)

#### شكل 7.17: صورة فعلية للدائرة

##### تمثل الشكل الحقيقي للدائرة عند بنائها

##### تظهر المكونات نفسها في الواقع

#### شكل 7.18: توصيل الأطراف بالمكونات

##### يوضح كيفية توصيل مكونات محددة بأطراف الأردوينو

##### يظهر مكونًا مربعًا أسود

##### يظهر مكونًا دائريًا موصولًا بالطرف D3

##### يظهر مكونًا دائريًا موصولًا بالطرف A0

برمجة الأردوينو (صفحة 280)

إعداد بيئة البرمجة

#### 1. تشغيل بروتوكول StandardFirmata على الأردوينو

#### 2. تثبيت حزمة paho-mqtt في بايثون

##### الأمر: pip install paho-mqtt

#### 3. إنشاء ملف بايثون جديد (mqtt_arduino.py)

#### 4. استيراد المكتبات المطلوبة

##### datetime: لإنشاء طوابع زمنية

##### time: للتحكم في سير البرنامج

##### json: للعمل مع كائنات JSON

##### pyfirmata: للتواصل مع الأردوينو

##### paho.mqtt.client: لإنشاء عميل MQTT

#### 5. تعريف متغيرات عميل MQTT

##### CLIENT_ID: معرف العميل (مثال: "PUBLISHER_01")

##### MQTT_BROKER: عنوان الوسيط (مثال: "broker.emqx.io")

##### TOPIC: اسم الموضوع (مثال: "waste/drops")

##### PORT: منفذ الخادم الافتراضي (1883)

##### FLAG_CONNECTED: متغير إشارة للاتصال

تهيئة الاتصال وبرمجة المتغيرات (صفحة 281)

تهيئة الاتصال بالأردوينو

#### استخدام مكتبة pyfirmata للاتصال عبر منفذ معين (مثل COM4)

#### تحديد أطراف المستشعرات:

##### مستشعر الإضاءة: الطرف التناظري A0

##### مستشعر الإمالة: الطرف الرقمي 3

إنشاء متغيرات المشروع

#### can_full: متغير منطقي (True/False) يحدد ما إذا كانت الحاوية ممتلئة.

#### garbage_drops: عداد لتتبع عدد مرات الاستخدام (الإمالة).

إنشاء دالة لإعادة التعيين

#### reset_can(): تعيد تعيين متغيري can_full و garbage_drops إلى القيم الافتراضية عند امتلاء الحاوية.

```

نقاط مهمة

  • متغيرات MQTT الأساسية هي: `CLIENT_ID`، `MQTT_BROKER`، `TOPIC`، `PORT`، `FLAG_CONNECTED`.
  • يتم تهيئة الاتصال بالأردوينو باستخدام `pyfirmata.Arduino()` وتحديد منفذ الاتصال.
  • يتم تعريف متغيرين رئيسيين لتتبع حالة الحاوية: `can_full` (علم) و `garbage_drops` (عداد).
  • تُستخدم الدالة `reset_can()` لإعادة تعيين حالة الحاوية بعد تفريغها.

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

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

نوع: METADATA

جدول 3.3: متغيرات الاتصال بـ MQTT

نوع: METADATA

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

أضف الأسطر الآتية، والتي مهمتها تهيئة الاتصال بالأردوينو باستخدام بروتوكول (Firmata) وكذلك تكوين الأطراف الخاصة بمستشعر الإضاءة ومستشعر الإمالة المستخدمين للحصول على البيانات.

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

board = pyfirmata.Arduino('COM4') # Specify communication port it = pyfirmata.util.Iterator(board) # Select the board to connect it.start() # Connect to board # Selecting the sensor pins light_sensor_pin = board.get_pin('a:0:i') tilt_sensor_pin = board.get_pin('d:3:i')

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

أنشئ المتغيرات الآتية بالأسماء الآتية: can_full وهو مُسمًّى يُحدِّد ما إذا كانت حاوية القمامة قد مُلئت أم لا، و garbage_drops وهو عداد لتتبع عدد مرات الاستخدام لتعبئة الحاوية بالكامل.

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

can_full = False # Flag to indicate whether the can is full garbage_drops = 0 # Counter for the garbage drops

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

قم بإنشاء الدالة الآتية التي تعيد تعيين متغيري can_full و garbage_drops في كل مرة تكون فيها الحاوية ممتلئة.

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

def reset_can(): global garbage_drops # Access the garbage_drops variable global can_full # Access the can_full variable garbage_drops = 0 # Reset the counter to 0 can_full = False # Clear the can

نوع: METADATA

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

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

جدول 3.3: متغيرات الاتصال بـ MQTT أضف الأسطر الآتية، والتي مهمتها تهيئة الاتصال بالأردوينو باستخدام بروتوكول (Firmata) وكذلك تكوين الأطراف الخاصة بمستشعر الإضاءة ومستشعر الإمالة المستخدمين للحصول على البيانات. board = pyfirmata.Arduino('COM4') # Specify communication port it = pyfirmata.util.Iterator(board) # Select the board to connect it.start() # Connect to board # Selecting the sensor pins light_sensor_pin = board.get_pin('a:0:i') tilt_sensor_pin = board.get_pin('d:3:i') أنشئ المتغيرات الآتية بالأسماء الآتية: can_full وهو مُسمًّى يُحدِّد ما إذا كانت حاوية القمامة قد مُلئت أم لا، و garbage_drops وهو عداد لتتبع عدد مرات الاستخدام لتعبئة الحاوية بالكامل. can_full = False # Flag to indicate whether the can is full garbage_drops = 0 # Counter for the garbage drops قم بإنشاء الدالة الآتية التي تعيد تعيين متغيري can_full و garbage_drops في كل مرة تكون فيها الحاوية ممتلئة. def reset_can(): global garbage_drops # Access the garbage_drops variable global can_full # Access the can_full variable garbage_drops = 0 # Reset the counter to 0 can_full = False # Clear the can وزارة التعليم Ministry of Education 2025 - 1447

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

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

ما الغرض من المتغير `can_full` في كود مراقبة حاوية القمامة باستخدام إنترنت الأشياء؟

  • أ) هو عداد لحساب عدد مرات فتح الحاوية.
  • ب) هو مُسمًّى (flag) يُحدِّد ما إذا كانت حاوية القمامة قد مُلئت أم لا.
  • ج) هو متغير يخزن قيمة الإضاءة المسجلة من المستشعر.
  • د) هو مؤقت (timer) لحساب المدة منذ آخر تفريغ للحاوية.

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

الإجابة: هو مُسمًّى (flag) يُحدِّد ما إذا كانت حاوية القمامة قد مُلئت أم لا.

الشرح: يُستخدم المتغير `can_full` كعلم (flag) منطقي (boolean) لتتبع حالة امتلاء الحاوية. عندما تكون قيمته `True` فهذا يعني أن الحاوية ممتلئة، وعندما تكون `False` فهذا يعني أنها ليست ممتلئة. هذا يسمح للبرنامج باتخاذ قرارات بناءً على هذه الحالة.

تلميح: فكر في متغير يستخدم للإشارة إلى حالة معينة (نعم/لا).

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

ما الوظيفة الأساسية للدالة `reset_can()` في مثال مراقبة حاوية القمامة؟

  • أ) إرسال إشعار إلى المستخدم بأن الحاوية ممتلئة.
  • ب) قراءة البيانات من مستشعر الإمالة وتحديث المتغيرات.
  • ج) إعادة تعيين متغيري `can_full` و `garbage_drops` إلى قيمهم الابتدائية عندما تكون الحاوية ممتلئة.
  • د) إيقاف تشغيل لوحة الأردوينو.

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

الإجابة: إعادة تعيين متغيري `can_full` و `garbage_drops` إلى قيمهم الابتدائية عندما تكون الحاوية ممتلئة.

الشرح: تقوم الدالة `reset_can()` بإعادة ضبط حالة النظام بعد امتلاء الحاوية. 1. تُعيد تعيين عداد القمامة `garbage_drops` إلى الصفر. 2. تُعيد تعيين علم الامتلاء `can_full` إلى `False` للإشارة إلى أن الحاوية أصبحت فارغة وجاهزة للاستخدام من جديد.

تلميح: ما الذي تفعله الدالة بالمتغيرات `garbage_drops` و `can_full`؟

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

في سياق برمجة إنترنت الأشياء مع الأردوينو، ما الغرض من استخدام الكلمة المفتاحية `global` داخل الدالة `reset_can()`؟

  • أ) لتعريف متغيرات جديدة داخل الدالة.
  • ب) لجعل الدالة تعمل بشكل أسرع.
  • ج) للسماح للدالة بالوصول إلى المتغيرات `garbage_drops` و `can_full` المعدلة خارج نطاقها المحلي وتغيير قيمتها.
  • د) لإغلاق الاتصال بلوحة الأردوينو.

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

الإجابة: للسماح للدالة بالوصول إلى المتغيرات `garbage_drops` و `can_full` المعدلة خارج نطاقها المحلي وتغيير قيمتها.

الشرح: في بايثون، المتغيرات المعرفة خارج الدالة لها نطاق عام (global). لتعديل قيمتها من داخل دالة، يجب الإعلان عنها باستخدام `global`. بدون ذلك، ستُنشئ الدالة متغيراً محلياً جديداً بنفس الاسم، ولن تؤثر على المتغير العام الأصلي.

تلميح: ماذا يحدث إذا حاولت دالة تغيير قيمة متغير عرف خارجها دون استخدام `global`؟

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