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

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

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

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

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

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

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

📝 ملخص الصفحة

📚 برمجة مشروع الحديقة الذكية (الجزء النهائي)

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

دالة `send_data`: دالة في البايثون لإرسال قراءات المستشعرات (اسم المستخدم، كلمة المرور، درجة الحرارة، الرطوبة، التاريخ والوقت) إلى خدمة ويب سحابية عبر رابط API محدد.

دالة `water_plant`: دالة في البايثون للتحكم في تشغيل محرك الري (محرك التيار المستمر) لفترة زمنية محددة (5 ثوانٍ).

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

```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)` في نهاية الحلقة

    التفاعل مع خدمات الويب السحابية

    #### تطوير المشروع

    • إرسال البيانات عبر خدمة الويب السحابية من منصة Binary IoT Cloud
    #### عرض البيانات على المنصة

    • عرض البيانات البيئية المجمعة بواسطة الأردوينو
    • مثال: جدول ورسوم بيانية لقراءات درجة الحرارة والرطوبة
    ##### بيانات مثال من المنصة

    • درجة الحرارة: تتراوح بين 25.36°C و 25.43°C
    • الرطوبة: تتراوح بين 39.39% و 42.84%
    #### التسجيل في المنصة السحابية

    ##### خطوات التسجيل

  • الانتقال إلى موقع المنصة: https://ksa-iot.azurewebsites.net/Login.aspx
  • الضغط على "تسجيل" من صفحة الترحيب.
  • تعبئة بيانات الحساب:
  • - اسم المستخدم (Username)

    - كلمة المرور (Password)

    - رقم التعريف الشخصي (PIN): 174563

  • الضغط على زر "Register" (تسجيل).
  • ##### واجهة التسجيل (شكل 4.26)

    • تحتوي على رمز QR للوصول.
    • نموذج يحتوي على حقول:
    - Username

    - Password

    - Confirm Password

    - Pin

    - زر Register

    • أرقام مرقمة (1-5) تشير إلى تسلسل الإجراءات.
    #### استدعاء واجهة برمجة تطبيقات الويب (Web API) باستخدام البايثون

    ##### مفهوم Web API و JSON

    • Web API: نقطة وصل للتواصل بين برنامج وخادم على الإنترنت.
    • JSON: تنسيق مفتوح لنقل البيانات (مفتاح - قيمة).
    ##### خطوات البرمجة

  • تثبيت حزمة `requests`:
  • ```

    pip install requests

    ```

  • استيراد المكتبات المطلوبة (`requests`, `datetime`)
  • إعداد الأطراف والمتغيرات:
  • - إنشاء Iterator للوحة الأردوينو

    - تعريف أطراف محرك DC والمستشعرات

    - تخزين اسم المستخدم وكلمة المرور

  • كتابة دالة `send_data` لإرسال القراءات إلى API السحابي
  • كتابة دالة `water_plant` للتحكم في الري
  • استخدام حلقة لا نهائية (`while True`) لقراءة قيمة مستشعر الحرارة بشكل مستمر
  • ```

    نقاط مهمة

    • تحتوي الصفحة على أكواد برمجية تكمل برمجة مشروع الحديقة الذكية.
    • يتم تعريف دالة `send_data` لإرسال البيانات إلى رابط API محدد (`https://ksa-iot-api.azurewebsites.net/api/readings`) باستخدام تنسيق JSON.
    • يتم تعريف دالة `water_plant` لتنفيذ عملية الري عن طريق تشغيل محرك DC لمدة 5 ثوانٍ.
    • تبدأ الحلقة الرئيسية (`while True`) بقراءة قيمة مستشعر درجة الحرارة (`temperature_sensor_pin.read()`).

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

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

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

    it = pyfirmata.util.Iterator(board) it.start() dc_motor_pin = board.get_pin('d:3:o') temperature_sensor_pin = board.get_pin('a:2:i') moisture_sensor_pin = board.get_pin('a:4:i') username = "your_username_here" password = "your_password_here" def send_data(username, password, temperature, moisture): api_url = "https://ksa-iot-api.azurewebsites.net/api/readings" date_time = str(datetime.now()) reading = { "username": username, "password": password, "temperature": temperature, "moisture": moisture, "datetime": date_time } response = requests.post(api_url, json=reading) 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()

    نوع: METADATA

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

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

    it = pyfirmata.util.Iterator(board) it.start() dc_motor_pin = board.get_pin('d:3:o') temperature_sensor_pin = board.get_pin('a:2:i') moisture_sensor_pin = board.get_pin('a:4:i') username = "your_username_here" password = "your_password_here" def send_data(username, password, temperature, moisture): api_url = "https://ksa-iot-api.azurewebsites.net/api/readings" date_time = str(datetime.now()) reading = { "username": username, "password": password, "temperature": temperature, "moisture": moisture, "datetime": date_time } response = requests.post(api_url, json=reading) 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() وزارة التعليم Ministry of Education 2025 - 1447

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

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

    في سياق برمجة مشروع إنترنت الأشياء باستخدام Arduino و Python، ما هي وظيفة الأمر `board.get_pin('d:3:o')`؟

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

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

    الإجابة: تحديد دبوس رقمي رقم 3 كمخرج (Output) للتحكم في جهاز مثل محرك تيار مستمر.

    الشرح: 1. الأمر `board.get_pin()` يستخدم لتكوين دبوس معين على لوحة Arduino. 2. المعلمة `'d:3:o'` تحدد: 'd' (رقمي)، '3' (رقم الدبوس)، 'o' (مخرج). 3. النتيجة: يتم إعداد الدبوس رقم 3 لإرسال إشارات خرج، مثل تشغيل وإيقاف محرك.

    تلميح: يرمز الحرف 'd' إلى النوع الرقمي، والرقم 3 هو رقم الدبوس، والحرف 'o' يحدد وضع التشغيل.

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

    في دالة `send_data` الموضحة في الكود، ما هو الغرض الرئيسي من استخدام مكتبة `requests` مع الأمر `post`؟

    • أ) تنزيل مكتبات برمجية إضافية لتشغيل المستشعرات من الإنترنت.
    • ب) تشغيل محرك الري لفترة زمنية محددة بناءً على قراءة المستشعر.
    • ج) إرسال بيانات القراءة (مثل درجة الحرارة والرطوبة) إلى عنوان URL محدد لخادم API.
    • د) تهيئة لوحة Arduino والبدء في التفاعل مع دبابيس الإدخال والإخراج.

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

    الإجابة: إرسال بيانات القراءة (مثل درجة الحرارة والرطوبة) إلى عنوان URL محدد لخادم API.

    الشرح: 1. تُجمع قراءات المستشعرات وبيانات المستخدم في كائن `reading`. 2. تُستخدم الدالة `requests.post()` لإرسال طلب HTTP من نوع POST. 3. الوجهة هي `api_url` الذي يمثل عنوان خادم الويب (API). 4. الهدف: تخزين البيانات عن بُعد لمراقبتها وتحليلها.

    تلميح: يتم تجميع البيانات في قاموس (JSON) قبل إرسالها.

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

    في دالة `water_plant`، ما الذي يفعله الأمر `dc_motor_pin.write(1)`؟

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

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

    الإجابة: إرسال إشارة كهربائية عالية (HIGH) إلى الدبوس للبدء في تشغيل محرك الري.

    الشرح: 1. `dc_motor_pin` تم تكوينه كمخرج رقمي. 2. الأمر `.write(1)` يغير حالة هذا المخرج إلى القيمة المنطقية 1 (HIGH). 3. يؤدي هذا عادةً إلى توصيل الطاقة إلى المحرك الكهربائي أو مرحل التحكم، مما يبدأ عملية الري.

    تلميح: في المنطق الرقمي، القيمة 1 تمثل حالة التشغيل (ON) أو الجهد العالي.

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

    ما هو الدور الرئيسي للكائن `Iterator` الذي يتم إنشاؤه بـ `pyfirmata.util.Iterator(board)` في هذا السياق؟

    • أ) تشفير كلمات مرور المستخدم قبل إرسالها إلى خادم API لحماية البيانات.
    • ب) تمكين القراءة التلقائية والمستمرة للقيم من دبابيس الإدخال التناظرية دون حجب البرنامج الرئيسي.
    • ج) ترجمة أوامر Python إلى لغة يفهمها متحكم Arduino.
    • د) إدارة اتصال Wi-Fi بين لوحة Arduino وشبكة الإنترنت.

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

    الإجابة: تمكين القراءة التلقائية والمستمرة للقيم من دبابيس الإدخال التناظرية دون حجب البرنامج الرئيسي.

    الشرح: 1. `Iterator` هو أداة من مكتبة `pyFirmata` للتعامل مع Arduino. 2. وظيفته: إنشاء دورة (loop) في الخلفية تقرأ باستمرار من الدبابيس التناظرية المكونة كمدخلات. 3. النتيجة: يمكن للبرنامج الرئيسي استدعاء `.read()` في أي وقت للحصول على أحدث قيمة للمستشعر دون انتظار.

    تلميح: يبدأ عمله باستخدام الأمر `.start()` ويعمل في الخلفية.

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