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

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

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

الدرس: شكل 4.16

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

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

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

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

📝 ملخص الصفحة

📚 البرنامج بشكله النهائي (وميض LED)

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

البرنامج بشكله النهائي (Complete Code): الكود البرمجي الكامل لتنفيذ مشروع وميض دايودين مشعين للضوء باستخدام الأردوينو ومكتبة `pyfirmata` في لغة بايثون.

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

```markmap

تطبيقات على المتحكمات الدقيقة

إنشاء تطبيق سحابي لإنترنت الأشياء

أهداف التعلم

#### • استخدام البايثون وبروتوكول PyFirmata لبرمجة الأردوينو.

برمجة الأردوينو بالبايثون (pyfirmata)

الخطوات البرمجية الأساسية

#### 1. تثبيت حزمة pyfirmata

##### • الأمر في Terminal: pip install pyfirmata

#### 2. استدعاء المكتبة في الكود

##### • import pyfirmata

#### 3. تحديد منفذ الاتصال

##### • communication_port = "COM4" (يختلف حسب الجهاز)

#### 4. إجراء الاتصال والوصول للأطراف

##### • board = pyfirmata.Arduino(communication_port)

##### • it = pyfirmata.util.Iterator(board)

##### • it.start()

#### 5. استخدام حلقة لا نهائية

##### • while True:

##### • # كتابة الأوامر هنا

ملاحظة تقنية

#### • يشغل البرنامج على الحاسوب، وليس على الأردوينو، مما يتيح الوصول إلى وظائف قد لا تتوفر في جهاز التحكم الدقيق.

الوظيفة الأساسية: board.get_pin()

#### • وظيفتها: قراءة وكتابة القيم للأطراف التناظرية والرقمية.

#### • معاملاتها: ثلاثة أحرف تفصل بينها نقطتان رأسيتان (a:d:5)

##### • المعامل الأول: نوع الطرف

###### • 'a': طرف تناظري (analog)

###### • 'd': طرف رقمي (digital)

##### • المعامل الثاني: رقم الطرف

###### • الأطراف الرقمية: من 0 إلى 12

###### • الأطراف التناظرية: من A0 إلى A5

##### • المعامل الثالث: طريقة التعامل

###### • للأطراف الرقمية:

####### • 'i': input (مدخلات)

####### • 'o': output (مخرجات)

###### • للأطراف التناظرية:

####### • 'i': input (مدخلات)

####### • 'p': Pulse Width Modulation (تضمين عرض النبضة)

تضمين عرض النبضة (PWM)

#### • تعريف: تعديل إشارة رقمية لمحاكاة إشارة تناظرية متغيرة القوة.

#### • دورة العمل (Duty Cycle): النسبة المئوية للزمن الذي تكون فيه الإشارة عالية (5v) خلال فترة زمنية واحدة.

##### • analogWrite(0): 0% دورة عمل (إشارة منخفضة دائمًا)

##### • analogWrite(64): 25% دورة عمل

##### • analogWrite(127): 50% دورة عمل

##### • analogWrite(191): 75% دورة عمل

##### • analogWrite(255): 100% دورة عمل (إشارة عالية دائمًا)

التفاعل مع الأطراف الرقمية

#### • قراءة قيمة من طرف رقمي (مثال: الطرف 10)

##### • digital_pin = board.get_pin("d:10:i")

##### • pin_value = digital_pin.read()

#### • كتابة قيمة إلى طرف رقمي (مثال: الطرف 10)

##### • digital_pin = board.get_pin("d:10:o")

##### • digital_pin.write(1) # قيمة HIGH

##### • digital_pin.write(0) # قيمة LOW

التفاعل مع الأطراف التناظرية

#### • قراءة قيمة من طرف تناظري (مثال: الطرف 4)

##### • analog_pin = board.get_pin("a:4:i")

##### • pin_value = analog_pin.read()

#### • كتابة قيمة إلى طرف تناظري (مثال: الطرف 4)

##### • analog_pin = board.get_pin("a:4:p")

##### • analog_pin.write(0.75)

ملاحظة عامة

#### • يتطلب كل مستشعر أو مشغل قيماً مختلفة ليعمل بصورة صحيحة.

مشروع تطبيقي: مشروع أردوينو مبسط مع PyFirmata

الهدف

#### • إنشاء مشروع مبسط لاستخدام مكتبة PyFirmata.

#### • برمجة دايود مشع للضوء خارجي وآخر مدمج ليومضا بالتناوب باستخدام بايثون.

خطوات التنفيذ

#### 1. محاكاة الدائرة في Tinkercad Circuits.

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

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

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

#### • دايود مشع للضوء (LED).

#### • مقاومة (Resistor).

تحميل المكونات في Tinkercad

#### 1. البحث عن "لوحة أردوينو أونو R3" في مكتبة المكونات (Components) وسحبها وإفلاتها في مساحة العمل.

#### 2. البحث عن "لوحة توصيل الدوائر الصغيرة" في مكتبة المكونات (Components) وسحبها وإفلاتها في مساحة العمل.

توصيل الأردوينو

#### • الخطوة 1: توصيل طرف GND (الأرضي) للأردوينو بالعمود السالب في لوحة التوصيل، باستخدام سلك أسود.

#### • الخطوة 2: وضع المقاومة (Resistor) من مكتبة المكونات على لوحة التوصيل.

#### • الخطوة 3: توصيل الطرف الرقمي 12 (pin 12) بالطرف 1 (Terminal 1) للمقاومة، باستخدام سلك أحمر.

توصيل الدايود المشع للضوء (LED)

#### 1. البحث عن LED من مكتبة المكونات ووضعه على لوحة التوصيل.

#### 2. توصيل الطرف 2 من المقاومة بالدايود مشع للضوء.

#### 3. توصيل هبوط الدايود المشع للضوء بالعمود السالب في لوحة التوصيل.

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

#### • يتم عرض الدائرة النهائية في شكلين:

##### • شكل 4.11: يوضح التوصيل الفعلي على لوحة التجارب مع الأردوينو.

##### • شكل 4.12: يوضح الدائرة النهائية في بيئة محاكاة Tinkercad.

الدائرة المادية (Physical Circuit)

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

##### • مكونات الدائرة:

###### • دايود مشع للخارج

###### • دايود مشع مدمج

##### • تفاصيل الصورة:

###### • LED أحمر موصل بالطرف الرقمي 13 في الأردوينو.

###### • مقاومة متصلة على التوالي مع الـ LED.

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

###### • لوحة توصيل (Breadboard) لتجميع الدائرة.

برمجة الأردوينو للومض

#### • الهدف: برمجة دايودين مشعين (داخلي وخارجي) ليومضا بالتناوب بفارق ثانية.

#### • توصيل الأطراف:

##### • الدايود المشع المدمج: الطرف الرقمي 13.

##### • الدايود المشع الخارجي: الطرف الرقمي 12.

#### • الخوارزمية: تكرار لانهائي لتبادل إشارات التشغيل والإيقاف بين الدايودين كل ثانية.

#### • الكود البرمجي:

##### • استيراد المكتبات:

###### • import pyfirmata

###### • import time

##### • إعداد منفذ الاتصال:

###### • communication_port = 'COM4'

##### • إعداد الاتصال:

###### • board = pyfirmata.Arduino(communication_port)

###### • it = pyfirmata.util.Iterator(board)

###### • it.start()

##### • تعيين الأطراف:

###### • external_led = board.get_pin("d:12:o")

###### • internal_led = board.get_pin("d:13:o")

#### • منطق الدائرة لتشغيل وميض الدايودات المشعة للضوء

##### • while True:

###### • external_led.write(1)

###### • internal_led.write(0)

###### • time.sleep(1)

###### • external_led.write(0)

###### • internal_led.write(1)

###### • time.sleep(1)

البرنامج بشكله النهائي (وميض LED)

الكود الكامل

#### • import pyfirmata

#### • import time

#### • communication_port = 'COM4'

#### • board = pyfirmata.Arduino(communication_port)

#### • it = pyfirmata.util.Iterator(board)

#### • it.start()

#### • external_led = board.get_pin("d:12:o")

#### • internal_led = board.get_pin("d:13:o")

#### • while True:

##### • external_led.write(1)

##### • internal_led.write(0)

##### • time.sleep(1)

##### • external_led.write(0)

##### • internal_led.write(1)

##### • time.sleep(1)

التطبيق العملي

#### • شكل 4.16: وميض الدايودات المشعة للضوء بالتقاون مع الأردوينو

##### • يوضح الدائرة الفعلية على لوحة التجارب (Breadboard) مع الأردوينو أونو.

##### • يوضح الكود البرمجي الكامل الذي ينفذ عملية الوميض.

```

نقاط مهمة

  • يظهر الكود البرمجي الكامل لتنفيذ مشروع وميض LED باستخدام `pyfirmata`.
  • يتم التحكم في دايودين: خارجي على الطرف الرقمي 12، ومدمج على الطرف الرقمي 13.
  • يعمل الكود في حلقة لا نهائية (`while True`) لتبديل حالة التشغيل بين الدايودين كل ثانية باستخدام `time.sleep(1)`.
  • يوضح الشكل 4.16 التوصيل الفعلي للدائرة على لوحة التجارب مع الأردوينو والكود البرمجي المسؤول عن تشغيلها.

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

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

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

import pyfirmata import time communication_port = 'COM4' board = pyfirmata.Arduino(communication_port) it = pyfirmata.util.Iterator(board) it.start() external_led = board.get_pin("d:12:o") internal_led = board.get_pin("d:13:o") while True: external_led.write(1) internal_led.write(0) time.sleep(1) external_led.write(0) internal_led.write(1) time.sleep(1)

شكل 4.16

نوع: FIGURE_REFERENCE

ومِيض الدايودات المشعة للضوء بالتقاون مع الأردوينو

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

Ministry of Education 2025 - 1447

🔍 عناصر مرئية

A breadboard setup connected to an Arduino Uno board. Two LEDs are visible, one red LED connected to pin 12 (external_led) and another red LED connected to pin 13 (internal_led). A resistor is connected in series with the external LED. The Arduino Uno board is shown with its digital pins labeled GND, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, and PWM pins. The code on the right controls these LEDs.

البرنامج بشكله النهائي Complete Code

Python code using the pyFirmata library to control two LEDs connected to an Arduino Uno. The code imports necessary libraries, establishes communication with the Arduino board on COM4, and then enters a loop. Inside the loop, it turns on the external LED (pin 12) and turns off the internal LED (pin 13) for one second, then switches their states (external off, internal on) for another second. This creates a blinking effect.

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

import pyfirmata import time communication_port = 'COM4' board = pyfirmata.Arduino(communication_port) it = pyfirmata.util.Iterator(board) it.start() external_led = board.get_pin("d:12:o") internal_led = board.get_pin("d:13:o") while True: external_led.write(1) internal_led.write(0) time.sleep(1) external_led.write(0) internal_led.write(1) time.sleep(1) --- SECTION: شكل 4.16 --- ومِيض الدايودات المشعة للضوء بالتقاون مع الأردوينو Ministry of Education 2025 - 1447 --- VISUAL CONTEXT --- **DIAGRAM**: Untitled Description: A breadboard setup connected to an Arduino Uno board. Two LEDs are visible, one red LED connected to pin 12 (external_led) and another red LED connected to pin 13 (internal_led). A resistor is connected in series with the external LED. The Arduino Uno board is shown with its digital pins labeled GND, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, and PWM pins. The code on the right controls these LEDs. Context: Illustrates the hardware setup for controlling LEDs using an Arduino Uno board and pyFirmata library. **CODE**: البرنامج بشكله النهائي Complete Code Description: Python code using the pyFirmata library to control two LEDs connected to an Arduino Uno. The code imports necessary libraries, establishes communication with the Arduino board on COM4, and then enters a loop. Inside the loop, it turns on the external LED (pin 12) and turns off the internal LED (pin 13) for one second, then switches their states (external off, internal on) for another second. This creates a blinking effect. Context: Provides the complete code to implement the LED blinking functionality shown in the diagram, demonstrating basic Arduino programming with pyFirmata.

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

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

ما الغرض الأساسي من استخدام المكتبة `pyfirmata` في برمجة الأردوينو بلغة بايثون؟

  • أ) توفير واجهة رسومية لبرمجة الأردوينو.
  • ب) تسهيل التواصل بين برنامج بايثون ولوحة الأردوينو عبر بروتوكول Firmata.
  • ج) استبدال لغة برمجة الأردوينو الأصلية (C++) بلغة بايثون.
  • د) توليد كود C++ تلقائياً من كود بايثون.

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

الإجابة: تسهيل التواصل بين برنامج بايثون ولوحة الأردوينو عبر بروتوكول Firmata.

الشرح: 1. `pyfirmata` هي مكتبة بايثون. 2. وظيفتها الرئيسية هي تنفيذ بروتوكول Firmata. 3. هذا البروتوكول يمكّن البرنامج من إرسال الأوامر واستقبال البيانات من لوحة الأردوينو عبر منفذ اتصال (مثل COM4).

تلميح: فكر في المكتبة التي تربط لغة البرمجة بالجهاز المادي.

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

في الكود المعطى، ما وظيفة الأمر `board.get_pin("d:12:o")`؟

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

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

الإجابة: تهيئة دبوس رقمي (رقم 12) على لوحة الأردوينو ليكون مخرجا (Output).

الشرح: 1. الوسيط `"d:12:o"` مقسم إلى أجزاء. 2. `d` تعني دبوس رقمي (Digital). 3. `12` هو رقم الدبوس. 4. `o` تعني أن الدبوس سيكون مخرجا (Output) لإرسال إشارة كهربائية.

تلميح: ركز على معنى الحروف في الوسيط (d, o).

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

ما التأثير الناتج عن تنفيذ حلقة `while True` في الكود المذكور؟

  • أ) إضاءة مصباحي LED معاً وإطفائهما معاً بشكل متزامن كل ثانيتين.
  • ب) إضاءة مصباح LED الخارجي فقط بشكل متقطع كل ثانيتين.
  • ج) تناوب في إضاءة وإطفاء مصباحي LED بحيث يكون أحدهما مضاءاً والآخر مطفأً في نفس الوقت، مع تبديل حالتهما كل ثانية.
  • د) إضاءة مصباح LED الداخلي فقط بشكل مستمر.

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

الإجابة: تناوب في إضاءة وإطفاء مصباحي LED بحيث يكون أحدهما مضاءاً والآخر مطفأً في نفس الوقت، مع تبديل حالتهما كل ثانية.

الشرح: 1. عند بدء الحلقة: `external_led.write(1)` (مضاء) و `internal_led.write(0)` (مطفأ). 2. الانتظار ثانية. 3. تبديل الحالتين: `external_led.write(0)` (مطفأ) و `internal_led.write(1)` (مضاء). 4. الانتظار ثانية أخرى. 5. تكرار الخطوات إلى ما لا نهاية.

تلميح: تتبع قيمتي `write(1)` و `write(0)` للمتغيرين `external_led` و `internal_led` مع مرور الوقت.

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

ما دور الأمر `time.sleep(1)` في الكود؟

  • أ) تسريع عمل المعالج.
  • ب) إيقاف تنفيذ البرنامج لمدة ثانية واحدة قبل تنفيذ السطر التالي.
  • ج) تشغيل مؤقت لحساب زمن تنفيذ البرنامج.
  • د) إرسال إشارة توقف إلى لوحة الأردوينو.

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

الإجابة: إيقاف تنفيذ البرنامج لمدة ثانية واحدة قبل تنفيذ السطر التالي.

الشرح: 1. الدالة `sleep()` جزء من مكتبة `time`. 2. الوسيط `1` يمثل عدد الثواني. 3. عند تنفيذها، يتوقف البرنامج عن العمل للمدة المحددة. 4. في هذا السياق، يتحكم هذا في مدة إضاءة أو إطفاء كل LED.

تلميح: كلمة `sleep` تعني نوم أو توقف.

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

ما الفرق بين الدبوس `d:12:o` والدبوس `d:13:o` في الكود المعطى؟

  • أ) أحدهما دبوس إدخال (Input) والآخر دبوس إخراج (Output).
  • ب) كلاهما مداخل مخرجة (Output) رقميّة، لكنهما مرتبطان بدبوسين مختلفين على لوحة الأردوينو (الدبوس 12 والدبوس 13) ويُتحكّم بهما عبر متغيرين مختلفين (`external_led` و `internal_led`).
  • ج) أحدهما تناظري (Analog) والآخر رقمي (Digital).
  • د) لا يوجد فرق، فهما يؤديان نفس الوظيفة لنفس الدبوس.

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

الإجابة: كلاهما مداخل مخرجة (Output) رقميّة، لكنهما مرتبطان بدبوسين مختلفين على لوحة الأردوينو (الدبوس 12 والدبوس 13) ويُتحكّم بهما عبر متغيرين مختلفين (`external_led` و `internal_led`).

الشرح: 1. التشابه: كلاهما من النوع `d` (رقمي) و `o` (مخرج). 2. الاختلاف الأساسي: رقم الدبوس المادي على لوحة الأردوينو (12 مقابل 13). 3. نتيجة الاختلاف: يتم التحكم بكل منهما بشكل مستقل في الكود، مما يسمح بحالات إضاءة مختلفة.

تلميح: ركز على الأرقام وأسماء المتغيرات.

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