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

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

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

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

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

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

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

📝 ملخص الصفحة

📚 برمجة نظام ري النباتات الآلي

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

قراءة المستشعرات التناظرية: استخدام `board.get_pin('a:2:i')` لقراءة قيمة من منفذ تناظري (مثل A2) كمدخل.

دالة التحكم: إنشاء دالة (مثل `water_plant`) تحتوي على سلسلة أوامر لتنفيذ مهمة محددة (تشغيل محرك لفترة زمنية).

الحلقة اللانهائية (`while True`): هيكل برمجي لتكرار تنفيذ مجموعة من الأوامر باستمرار.

معالجة بيانات المستشعر: تحويل القيم الرقمية الخام من المستشعرات إلى وحدات قياس مفهومة (مثل الدرجة المئوية والنسبة المئوية).

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

```markmap

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

مشروع الحديقة الذكية بالأردوينو

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

  • مستشعر الحرارة (Temperature Sensor)

توصيل المكونات

#### توصيل مستشعر درجة الحرارة

  • توصيل طرف Power (الطاقة) للمستشعر بالعمود الموجب في لوحة التوصيل (سلك أحمر).
  • توصيل طرف Vout (الجهد) للمستشعر بالطرف التناظري A2 في الأردوينو (سلك أخضر).
  • توصيل طرف GND (الأرضي) للمستشعر بالعمود السالب في لوحة التوصيل (سلك أسود).
  • #### توصيل مستشعر رطوبة التربة

  • توصيل طرف Power (الطاقة) للمستشعر بالعمود الموجب في لوحة التوصيل (سلك أحمر).
  • توصيل طرف GND (الأرضي) للمستشعر بالعمود السالب في لوحة التوصيل (سلك أسود).
  • توصيل طرف Signal (الإشارة) للمستشعر بالطرف التناظري A4 في الأردوينو (سلك أخضر).
  • #### الدائرة بصورتها النهائية

    • توصيل الأطراف بالمكونات
    • المكونات المتصلة:
    - مستشعر رطوبة التربة (Soil Moisture Sensor)

    - ترانزستور (TMP)

    - محرك (Motor)

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

    • صورة الدائرة بمكوناتها المادية
    • المكونات الظاهرة:
    - مستشعر رطوبة التربة (Capacitive Soil Moisture Sensor v1.2)

    - لوحة الأردوينو (Arduino Uno R3)

    - لوحة التوصيل (Breadboard)

    - محرك التيار المستمر (DC Motor)

    برمجة المكونات

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

  • استدعاء المكتبات المطلوبة (pyfirmata, time)
  • تكوين منفذ الاتصال والأطراف (COM4، محرك DC، مستشعر درجة الحرارة، مستشعر الرطوبة)
  • إعداد الاتصال بين PyFirmata ولوحة الأردوينو
  • تنفيذ دالة التحكم في محرك التيار المستمر (water_plant)
  • #### استكشاف الأخطاء وإصلاحها

    ##### التحقق من صحة بيانات المستشعر

    • استخدام حلقة تكرار لا نهائية (`while True`)
    • قراءة القيم غير المعالجة من الأطراف التناظرية
    • إضافة شرط `if` للتحقق من أن القيم ليست `None`
    ##### معالجة وتحويل البيانات

    • تحويل قيمة درجة الحرارة إلى درجات مئوية
    • تحويل مستوى الرطوبة إلى نسبة مئوية
    ##### إدخال شروط الري

    • كتابة شرط التحكم في الري:
    - إذا كانت `(temperature >= 24.0) and (moisture <= 40.0)`

    - استدعاء دالة `water_plant(dc_motor_pin)`

    ##### عرض التقارير

    • طباعة تقرير درجة الحرارة: `"Temperature : " + str(temperature) + " C"`
    • طباعة تقرير الرطوبة: `"Moisture : " + str(round(moisture, 2)) + "%"`
    • إضافة `time.sleep(10)` في نهاية الحلقة
    ```

    نقاط مهمة

    • يتم تعريف أطراف المستشعرات باستخدام `board.get_pin('a:2:i')` للمستشعر التناظري في المنفذ A2، و`board.get_pin('a:4:i')` للمستشعر في المنفذ A4.
    • دالة `water_plant` تقوم بتشغيل المحرك (`dc_motor_pin.write(1)`) لمدة 5 ثوانٍ (`time.sleep(5)`) ثم إيقافه (`dc_motor_pin.write(0)`).
    • في الحلقة الرئيسية، تتم قراءة القيم الخام ومعالجتها:
    - لدرجة الحرارة: `temperature = (voltage - 0.5) * 100`

    - للرطوبة: `moisture = (1.0 - float(moisture_value)) * 100`

    • يتم تنفيذ الري تلقائياً فقط عند استيفاء الشرط: درجة حرارة ≥ 24 مئوية و رطوبة ≤ 40%.
    • البرنامج ينتظر 10 ثوانٍ (`time.sleep(10)`) بين كل دورة قراءة ومعالجة.

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

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

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

    temperature_sensor_pin = board.get_pin('a:2:i') moisture_sensor_pin = board.get_pin('a:4:i')

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

    def water_plant(dc_motor_pin): print("--- Watering plant ---") dc_motor_pin.write(1) time.sleep(5) dc_motor_pin.write(0)

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

    while True: temperature_value = temperature_sensor_pin.read() moisture_value = moisture_sensor_pin.read() if (temperature_value is not None) and (moisture_value is not None): temperature_value = float(temperature_value) * 1000 voltage = (temperature_value / 1024) * 5 temperature = (voltage - 0.5) * 100 moisture = (1.0 - float(moisture_value)) * 100 if (temperature >= 24.0) and (moisture <= 40.0): water_plant(dc_motor_pin) temperature_report = "Temperature : " + str(temperature) + " C" moisture_report = "Moisture : " + str(round(moisture, 2)) + "%" print(temperature_report) print(moisture_report) time.sleep(10)

    نوع: METADATA

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

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

    temperature_sensor_pin = board.get_pin('a:2:i') moisture_sensor_pin = board.get_pin('a:4:i') def water_plant(dc_motor_pin): print("--- Watering plant ---") dc_motor_pin.write(1) time.sleep(5) dc_motor_pin.write(0) while True: temperature_value = temperature_sensor_pin.read() moisture_value = moisture_sensor_pin.read() if (temperature_value is not None) and (moisture_value is not None): temperature_value = float(temperature_value) * 1000 voltage = (temperature_value / 1024) * 5 temperature = (voltage - 0.5) * 100 moisture = (1.0 - float(moisture_value)) * 100 if (temperature >= 24.0) and (moisture <= 40.0): water_plant(dc_motor_pin) temperature_report = "Temperature : " + str(temperature) + " C" moisture_report = "Moisture : " + str(round(moisture, 2)) + "%" print(temperature_report) print(moisture_report) time.sleep(10) وزارة التعليم Ministry of Education 2025 - 1447

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

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

    كيف يتم تحويل القيمة المقروءة من مستشعر الرطوبة (moisture_value) إلى نسبة مئوية في الكود؟

    • أ) باستخدام الصيغة: float(moisture_value) * 100
    • ب) باستخدام الصيغة: (float(moisture_value) / 1024) * 100
    • ج) باستخدام الصيغة: (1.0 - float(moisture_value)) * 100
    • د) باستخدام الصيغة: (float(moisture_value) * 5.0) / 100

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

    الإجابة: باستخدام الصيغة: (1.0 - float(moisture_value)) * 100

    الشرح: 1. `moisture_value` هي قراءة تناظرية بين 0 و 1 (حيث 1 تعني مبتلاً تماماً في بعض المستشعرات). 2. `float(moisture_value)` تحول القراءة إلى رقم عشري. 3. `1.0 - float(moisture_value)` تعكس القيمة إذا كان المستشعر يعطي 1 للجاف و0 للرطب. 4. الضرب في 100 يحول الناتج إلى نسبة مئوية.

    تلميح: ابحث عن السطر الذي يحسب متغير `moisture`.

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

    في برنامج ري النباتات الآلي، ما الشرط الذي يؤدي إلى تشغيل مضخة الماء (DC Motor)؟

    • أ) عندما تكون درجة الحرارة ≤ 24 درجة مئوية ومستوى الرطوبة ≥ 40%
    • ب) عندما تكون درجة الحرارة ≥ 24 درجة مئوية ومستوى الرطوبة ≤ 40%
    • ج) عندما تكون درجة الحرارة < 24 درجة مئوية ومستوى الرطوبة > 40%
    • د) عندما تكون درجة الحرارة > 30 درجة مئوية فقط بغض النظر عن الرطوبة

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

    الإجابة: عندما تكون درجة الحرارة ≥ 24 درجة مئوية ومستوى الرطوبة ≤ 40%

    الشرح: 1. يقرأ البرنامج قيمتي الحرارة والرطوبة باستمرار. 2. يحول القيم المقروءة إلى درجات مئوية ونسبة مئوية. 3. يتحقق من الشرط: `if (temperature >= 24.0) and (moisture <= 40.0):`. 4. إذا تحقق الشرط (حرارة مرتفعة ورطوبة منخفضة)، يتم استدعاء دالة الري.

    تلميح: ابحث عن جملة الشرط `if` التي تستدعي دالة `water_plant`.

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

    في الكود المعطى، ما الغرض من السطر `time.sleep(10)` داخل الحلقة `while True:`؟

    • أ) إيقاف تشغيل المضخة بعد 10 ثوانٍ من بدء الري.
    • ب) تسريع عملية قراءة المستشعرات لتصبح كل ميلي ثانية.
    • ج) إيقاف تنفيذ البرنامج لمدة 10 ثوانٍ قبل قراءة قيم المستشعرات مرة أخرى، مما يوفر استهلاك الطاقة ويقلل الحمل على المعالج.
    • د) إعادة تشغيل لوحة Arduino كل 10 ثوانٍ.

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

    الإجابة: إيقاف تنفيذ البرنامج لمدة 10 ثوانٍ قبل قراءة قيم المستشعرات مرة أخرى، مما يوفر استهلاك الطاقة ويقلل الحمل على المعالج.

    الشرح: 1. الحلقة `while True:` تجعل البرنامج يعمل إلى ما لا نهاية. 2. بدون `time.sleep()`، ستكون القراءات مستمرة بسرعة هائلة. 3. `time.sleep(10)` توقف التنفيذ لمدة 10 ثوانٍ. 4. هذا يمنع إغراق وحدة المعالجة بالطلبات غير الضرورية ويحاكي فترات المراقبة الواقعية.

    تلميح: فكر في سبب وجود فاصل زمني بين قراءات المستشعرات في نظام يعمل باستمرار.

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