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

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

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

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

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

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

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

📝 ملخص الصفحة

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

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

برمجة الأردوينو للومض: برمجة دايودين مشعين (داخلي وخارجي) ليومضا بالتناوب بفارق زمني ثانية واحدة باستخدام مكتبة `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")

```

نقاط مهمة

  • الهدف من المشروع: برمجة دايودين مشعين (داخلي على الطرف 13، وخارجي على الطرف 12) ليومضا بالتناوب كل ثانية.
  • الخوارزمية: استخدام حلقة تكرار لا نهائية لتبادل إشارات التشغيل (`HIGH`) والإيقاف (`LOW`) بين الدايودين.
  • الخطوات البرمجية الأساسية:
1. استيراد مكتبات `pyfirmata` و `time`.

2. تحديد منفذ الاتصال (مثل `'COM4'`).

3. إنشاء كائن `board` للاتصال وبدء المُكرِّر (`Iterator`).

4. تعيين الطرفين الرقميين 12 و 13 كمخرجات باستخدام `board.get_pin("d:رقم_الطرف:o")`.

  • التوصيل الفعلي: يوضح الشكل 4.14 توصيل الدايود الخارجي (الأنود) بالطرف 12 والكاثود بـ `GND`، بينما الدايود الداخلي موصل داخليًا بالطرف 13.

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

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

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

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

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

Programming the Arduino to Blink

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

ستبرمج الدايودين المشعّين ليومضا واحدًا تلو الآخر، وذلك بفارق زمني ثانية واحدة، وتُوصَل الدايود المشعّ المدمج في الأردوينو بالطرف الرقمي 13، وتُوصَل الدايود المشعّ الخارجي بالطرف الرقمي 12. ثم بواسطة تكرار لانهائي سترسل الدايود المشعّ للضوء الآخر، ستُعكس الإشارات بعد ثانية واحدة.

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

افتح باي تشارم، وأنشئ ملف بايثون جديد، واستورد المكتبات الضرورية.

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

import pyfirmata import time

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

قم بإعداد منفذ الاتصال.

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

communication_port = 'COM4'

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

قم بإعداد الاتصال بين PyFirmata ولوحة توصيل الدوائر الصغيرة.

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

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")

نوع: FIGURE_REFERENCE

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

نوع: METADATA

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

نوع: METADATA

130

🔍 عناصر مرئية

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

A breadboard setup showing an LED connected to digital pin 13 (internal) and pin 12 (external) of an Arduino board. Red wire connects LED anode to pin 12, black wire connects cathode to GND. A second LED (internal) is implied to be connected to pin 13.

A schematic representation of an Arduino board, highlighting digital pins D12 and D13, TX, RX, GND, AREF, and the main microcontroller. The label 'D13' is connected to the internal LED.

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

برمجة الأردوينو للومض Programming the Arduino to Blink ستبرمج الدايودين المشعّين ليومضا واحدًا تلو الآخر، وذلك بفارق زمني ثانية واحدة، وتُوصَل الدايود المشعّ المدمج في الأردوينو بالطرف الرقمي 13، وتُوصَل الدايود المشعّ الخارجي بالطرف الرقمي 12. ثم بواسطة تكرار لانهائي سترسل الدايود المشعّ للضوء الآخر، ستُعكس الإشارات بعد ثانية واحدة. افتح باي تشارم، وأنشئ ملف بايثون جديد، واستورد المكتبات الضرورية. import pyfirmata import time قم بإعداد منفذ الاتصال. communication_port = 'COM4' قم بإعداد الاتصال بين PyFirmata ولوحة توصيل الدوائر الصغيرة. 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") شكل 4.14: توصيل الأطراف بالملكونات وزارة التعليم 2025 - 1447 130 --- VISUAL CONTEXT --- **DIAGRAM**: شكل 4.14: توصيل الأطراف بالملكونات Description: A breadboard setup showing an LED connected to digital pin 13 (internal) and pin 12 (external) of an Arduino board. Red wire connects LED anode to pin 12, black wire connects cathode to GND. A second LED (internal) is implied to be connected to pin 13. X-axis: Breadboard columns (17-23) Y-axis: Breadboard rows (implied) Key Values: Pin 12 for external LED, Pin 13 for internal LED Context: Illustrates the physical connection of LEDs to Arduino digital pins for blinking. **DIAGRAM**: Untitled Description: A schematic representation of an Arduino board, highlighting digital pins D12 and D13, TX, RX, GND, AREF, and the main microcontroller. The label 'D13' is connected to the internal LED. Key Values: D12, D13, TX, RX, GND, AREF Context: Shows the physical layout of the Arduino board and the location of relevant pins for controlling LEDs.

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

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

ما الغرض من استخدام المكتبة `time` في برنامج وميض LED باستخدام PyFirmata؟

  • أ) لإدارة اتصال المنفذ التسلسلي (مثل COM4).
  • ب) لإضافة تأخير زمني (مثل ثانية واحدة) بين عمليات تشغيل وإطفاء الـ LED.
  • ج) للتحكم في شدة سطوع الـ LED.
  • د) لقراءة البيانات من مستشعرات الأردوينو.

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

الإجابة: لإضافة تأخير زمني (مثل ثانية واحدة) بين عمليات تشغيل وإطفاء الـ LED.

الشرح: تُستخدم مكتبة `time` في بايثون للتحكم في التوقيت. الوظيفة `time.sleep()` توقف تنفيذ البرنامج لفترة محددة (بالثواني)، مما يسمح بإنشاء فاصل زمني بين إضاءة وإطفاء الـ LED لتحقيق تأثير الوميض.

تلميح: تتعلق الوظيفة بالتحكم في توقيت تنفيذ الأوامر.

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

ما وظيفة الكائن `Iterator` المستورد من مكتبة `pyfirmata.util` في برنامج التحكم بالأردوينو؟

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

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

الإجابة: لبدء عملية قراءة مستمرة لقيم المدخلات من الأردوينو وتحديثها في الخلفية.

الشرح: يُنشئ كائن `Iterator` ويُشغَّل (`it.start()`) لإنشاء خيط (thread) في الخلفية يقوم بقراءة البيانات من الأردوينو باستمرار. هذا يمنع انسداد البرنامج ويضمن أن قيم المدخلات (مثل أزرار أو مستشعرات) تكون محدثة عند الحاجة إليها.

تلميح: يتعلق دوره بمعالجة البيانات القادمة من اللوحة.

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

ما الصيغة الصحيحة لتعيين طرف في الأردوينو كمخرج رقمي (Digital Output) للتحكم في LED باستخدام PyFirmata؟

  • أ) board.set_pin("a:12:output")
  • ب) board.get_pin("d:رقم_الطرف:o")
  • ج) board.define_pin(12, "DIGITAL", "OUT")
  • د) board.pin_mode(12, pyfirmata.OUTPUT)

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

الإجابة: board.get_pin("d:رقم_الطرف:o")

الشرح: تُستخدم الدالة `get_pin()` لتعريف وتكوين طرف معين على لوحة الأردوينو. الصيغة `"d:12:o"` تعني: طرف رقمي (d) رقم 12، مُهيَّأ كمخرج (o) للإرسال. مثال: `external_led = board.get_pin("d:12:o")`.

تلميح: يبدأ الترميز بالحرف 'd' يليه رقم الطرف ونمط التشغيل 'o'.

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

في برنامج وميض LED باستخدام الأردوينو، إذا أردنا أن يومض LED خارجي موصل بالطرف 12 و LED داخلي (موجود على اللوحة) بالطرف 13 بشكل متعاقب، ما التسلسل المنطقي للخطوات داخل الحلقة اللانهائية؟

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

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

الإجابة: تشغيل LED الأول، انتظار ثانية، إطفاء LED الأول وتشغيل LED الثاني، انتظار ثانية، ثم تكرار العملية.

الشرح: 1. تشغيل LED الأول (مثلاً الطرف 12) بقيمة HIGH. 2. استخدام `time.sleep(1)` للانتظار ثانية. 3. إطفاء LED الأول (قيمة LOW) وتشغيل LED الثاني (الطرف 13) بقيمة HIGH. 4. استخدام `time.sleep(1)` للانتظار ثانية أخرى. 5. العودة إلى الخطوة 1 لإنشاء حلقة لا نهائية.

تلميح: الفكرة هي أن يكون واحد مضيئاً بينما الآخر مطفأ، مع تبديل حالتهما بعد فترة.

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