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

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

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

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

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

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

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

📝 ملخص الصفحة

📚 استكشاف الأخطاء وإصلاحها في برمجة المستشعرات

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

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

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

```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`
    ##### معالجة وتحويل البيانات

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

    نقاط مهمة

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

    المعادلات

    voltage = \frac{temperature\_value}{1024} \times 5

    temperature = (voltage - 0.5) \times 100

    moisture = (1.0 - moisture\_value) \times 100

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

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

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

    while True: # write your code here

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

    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

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

    تحويل درجة الحرارة إلى درجات مئوية، وتحويل مستوى الرطوبة إلى نسبة مئوية.

    نوع: METADATA

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

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

    while True: # write your code here 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 تحويل درجة الحرارة إلى درجات مئوية، وتحويل مستوى الرطوبة إلى نسبة مئوية. وزارة التعليم Ministry of Education 2025 - 1447

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

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

    لماذا يجب إضافة تحقق من القيم المستلمة من المستشعرات في برنامج إنترنت الأشياء قبل معالجتها؟

    • أ) لزيادة سرعة معالجة البيانات من المستشعرات.
    • ب) لتحسين دقة قراءات المستشعرات.
    • ج) لتجنب حدوث أخطاء في البرنامج عند استقبال قيم فارغة من المستشعرات.
    • د) لتقليل استهلاك الطاقة في جهاز التحكم الدقيق.

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

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

    الشرح: 1. مستشعرات الأجهزة الدقيقة قد ترسل قيماً فارغة (None) في بعض الأحيان. 2. معالجة هذه القيم الفارغة مباشرة (مثل تحويلها إلى أرقام) ستتسبب في توقف البرنامج أو إعطاء نتائج خاطئة. 3. لذلك، يجب التحقق من أن القيم ليست فارغة قبل أي عملية معالجة.

    تلميح: فكر في سلوك المستشعرات في العالم الحقيقي وموثوقية البيانات.

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

    ما الهدف من التحقق الشرطي `if (temperature_value is not None) and (moisture_value is not None):` في الكود البرمجي؟

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

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

    الإجابة: التأكد من أن كلا القيمتين المستلمتين من مستشعر الحرارة ومستشعر الرطوبة ليستا فارغتين قبل معالجتهما.

    الشرح: 1. تقوم هذه الجملة الشرطية بالتحقق من شرطين. 2. الشرط الأول: `temperature_value is not None` للتأكد من أن قيمة مستشعر الحرارة ليست فارغة. 3. الشرط الثاني: `moisture_value is not None` للتأكد من أن قيمة مستشعر الرطوبة ليست فارغة. 4. يتم تنفيذ الكود داخل الشرط فقط إذا تحقق كلا الشرطين، مما يضمن معالجة بيانات صالحة فقط.

    تلميح: ما الذي يحدث إذا حاول البرنامج إجراء عمليات حسابية على قيمة 'لا شيء'؟

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

    ما الغرض من تحويل قراءة مستوى الرطوبة إلى نسبة مئوية باستخدام الصيغة `moisture = (1.0 - float(moisture_value)) * 100`؟

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

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

    الإجابة: لتحويل القراءة التناظرية من المستشعر (مثلاً بين 0 و 1) إلى نسبة مئوية مفهومة تمثل مستوى الرطوبة.

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

    تلميح: فكر في أن المستشعرات التناظرية تخرج قيماً رقمية تحتاج تفسيراً.

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