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

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

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

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

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

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

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

📝 ملخص الصفحة

📚 كود التحقق من كلمة المرور وتنفيذ الإجراء

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

الكود الشرطي (if-else): يُستخدم لتنفيذ إجراءات مختلفة بناءً على ما إذا كانت كلمة المرور صحيحة أم خاطئة.

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

```markmap

تمارين برمجة C++ لإنترنت الأشياء

المشروع: إنشاء قفل باب ذكي

البرمجة

#### دالة loop()

##### التحقق من كلمة المرور

###### آلية المقارنة

  • مقارنة كل مفتاح مضغوط مع الرقم المقابل في مصفوفة `password` بالتتابع.
  • مثال: كلمة مرور مضبوطة "5456" وكلمة مدخلة "5453".
- 5 مقارنة مع 5 (صحيحة)

- 4 مقارنة مع 4 (صحيحة)

- 5 مقارنة مع 5 (صحيحة)

- 3 مقارنة مع 6 (خاطئة) ← كلمة المرور بأكملها خاطئة.

###### استخدام متغير منطقي (Boolean)

  • `bool correctPass = true;`: يتم تهيئته على `true`.
  • عند اكتشاف أي مفتاح خاطئ، تتغير قيمته إلى `false`.
  • بعد انتهاء المقارنة، تشير القيمة `true` إلى صحة المرور، و`false` إلى خطئه.
###### تنفيذ الدالة (مثال كود)

  • `for (int i = 0; i < 4; i++) {`
- `buttonPressed = keypad.waitKeyFor();`

- `if(password[i] != buttonPressed){ correctPass = false; }`

- `lcd.setCursor(i, 1);`

- `lcd.print(buttonPressed);`

  • `}`
##### تنفيذ فتح/غلق القفل

###### إذا كانت كلمة المرور صحيحة

  • مسح شاشة LCD.
  • طباعة رسالة "Correct password!" و "Unlocking...".
  • تدوير محرك السيرفو إلى زاوية 180 درجة لفتح القفل.
  • الانتظار لمدة 5 ثوانٍ.
  • إعادة تدوير محرك السيرفو إلى زاوية 0 درجة لإغلاق القفل.
###### إذا كانت كلمة المرور خاطئة

  • مسح شاشة LCD.
  • طباعة رسالة "Wrong password!".
#### الإعدادات الأولية (Setup)

##### تضمين المكتبات

  • `#include `: مكتبة التحكم بشاشة LCD.
  • `#include `: مكتبة التعامل مع لوحة المفاتيح.
  • `#include `: مكتبة التحكم بمحرك السيرفو.
##### تعريف المتغيرات والكائنات

  • `Adafruit_LiquidCrystal lcd(0);`: إنشاء كائن للتحكم بشاشة LCD.
  • `Servo servo;`: إنشاء كائن للتحكم بمحرك السيرفو.
  • `const byte numRows = 4;`: عدد صفوف لوحة المفاتيح.
  • `const byte numCols = 4;`: عدد أعمدة لوحة المفاتيح.
##### تعيين خرائط المفاتيح والتوصيلات

  • `char keymap[numRows][numCols]`: مصفوفة تحدد شكل المفاتيح على اللوحة (من 1 إلى D).
  • `byte rowPins[numRows] = {9,8,7,6};`: تحديد منافذ الأردوينو المتصلة بصفوف اللوحة.
  • `byte colPins[numCols] = {5,4,3,2};`: تحديد منافذ الأردوينو المتصلة بأعمدة اللوحة.
  • `Keypad keypad = Keypad(...);`: تهيئة كائن لوحة المفاتيح باستخدام الخريطة والتوصيلات المحددة.
##### تهيئة المكونات في `setup()`

###### تهيئة محرك السيرفو

  • `servo.attach(11);`: توصيل محرك السيرفو بالمنفذ 11.
  • `servo.write(0);`: ضبط زاوية السيرفو على 0 درجة (وضع الإغلاق).
###### تهيئة شاشة LCD

  • `lcd.begin(16, 2);`: تهيئة شاشة LCD بحجم 16 عمود وصفين.
  • `lcd.setCursor(0, 0);`: ضبط مؤشر الكتابة على العمود 0، الصف 0.
  • `lcd.print("Set 4 character");`: طباعة رسالة "Set 4 character" على السطر الأول.
  • `lcd.setCursor(0, 1);`: ضبط مؤشر الكتابة على العمود 0، الصف 1.
  • `lcd.print("password:");`: طباعة رسالة "password:" على السطر الثاني.
###### تخزين كلمة المرور

  • `char password[4];`: تعريف مصفوفة لتخزين 4 أحرف لكلمة المرور.
  • `for(int i = 0; i < 4; i++){ password[i] = keypad.waitKey(); }`: حلقة لجمع 4 مفاتيح من لوحة المفاتيح وتخزينها في المصفوفة.
```

نقاط مهمة

  • بعد التحقق من كلمة المرور، يتم استخدام الكود الشرطي `if (correctPass)` لتنفيذ إجراءين مختلفين.
  • الإجراء عند صحة المرور: مسح شاشة LCD، طباعة رسائل تأكيد، تدوير السيرفو لفتح القفل، الانتظار 5 ثوانٍ، ثم إعادة السيرفو لإغلاق القفل.
  • الإجراء عند خطأ المرور: تمت الإشارة إليه في الكود (`else`) لكن لم يتم تفصيله في هذه الصفحة.

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

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

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

// this code checks each button pressed against the corresponding password digit // e.g. it will check the 1st button pressed against the first digit of the // password and so on for(int i = 0; i < 4; i++) { buttonPressed = keypad.waitKeyFor(); if(password[i] != buttonPressed) { correctPass = false; } lcd.setCursor(i, 1); lcd.print(buttonPressed); } delay(1000); //this code will be executed if the password is correct if (correctPass){ // clear the lcd screen lcd.clear(); // set the cursor to the beginning of the 1st line lcd.setCursor(0, 0); lcd.print("Correct password!"); // set the cursor to the beginning of the 2nd line lcd.setCursor(0, 1); lcd.print("Unlocking..."); // write the angle by which the servo will rotate servo.write(180); // wait 5 sec and then rotate the servo to its original angle delay(5000); servo.write(0); } else { //this code will be executed if the password is wrong }

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

// this code checks each button pressed against the corresponding password digit // e.g. it will check the 1st button pressed against the first digit of the // password and so on for(int i = 0; i < 4; i++) { buttonPressed = keypad.waitKeyFor(); if(password[i] != buttonPressed) { correctPass = false; } lcd.setCursor(i, 1); lcd.print(buttonPressed); } delay(1000); //this code will be executed if the password is correct if (correctPass){ // clear the lcd screen lcd.clear(); // set the cursor to the beginning of the 1st line lcd.setCursor(0, 0); lcd.print("Correct password!"); // set the cursor to the beginning of the 2nd line lcd.setCursor(0, 1); lcd.print("Unlocking..."); // write the angle by which the servo will rotate servo.write(180); // wait 5 sec and then rotate the servo to its original angle delay(5000); servo.write(0); } else { //this code will be executed if the password is wrong }

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

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

في كود التحقق من كلمة المرور باستخدام لوحة المفاتيح، ما هو الشرط الذي يحدد ما إذا كانت كلمة المرور صحيحة أم خاطئة؟

  • أ) يتم تعيين المتغير correctPass إلى true فقط إذا تطابقت جميع الأحرف المدخلة مع كلمة المرور المخزنة.
  • ب) يتم تعيين المتغير correctPass إلى false إذا كان أي حرف من الأحرف المدخلة لا يتطابق مع الحرف المقابل في كلمة المرور المخزنة.
  • ج) يتم مقارنة كلمة المرور المدخلة كاملة مرة واحدة بعد إدخال الرقم الرابع.
  • د) يتم تعيين المتغير correctPass إلى false فقط إذا فشلت جميع المقارنات الأربع.

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

الإجابة: يتم تعيين المتغير correctPass إلى false إذا كان أي حرف من الأحرف المدخلة لا يتطابق مع الحرف المقابل في كلمة المرور المخزنة.

الشرح: 1. الكود يفحص كلمة المرور رقمًا برقم باستخدام حلقة for. 2. لكل ضغطة زر (buttonPressed)، تتم مقارنتها بالرقم المقابل في مصفوفة كلمة المرور (password[i]). 3. إذا كانت المقارنة غير متطابقة لأي رقم، يتم تعيين المتغير المنطقي correctPass إلى false. 4. إذا ظل correctPass صحيحًا (true) بعد فحص جميع الأرقام الأربعة، فهذا يعني أن كلمة المرور صحيحة.

تلميح: فكر في كيفية تعامل الكود مع كل ضغطة زر مقارنةً بالرقم السري المخزن.

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

ما هو الغرض من استخدام الأمر delay(5000); في جزء الكود الخاص بكلمة المرور الصحيحة؟

  • أ) لإعطاء المستخدم وقتًا إضافيًا لإدخال كلمة المرور.
  • ب) لتأخير ظهور رسالة 'Unlocking...' على الشاشة.
  • ج) لجعل القفل يبقى مفتوحًا لمدة 5 ثوانٍ قبل أن يعود إلى حالة الإغلاق.
  • د) لتهيئة محرك السيرفو قبل بدء الدوران.

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

الإجابة: لجعل القفل يبقى مفتوحًا لمدة 5 ثوانٍ قبل أن يعود إلى حالة الإغلاق.

الشرح: 1. بعد فتح القفل (servo.write(180);)، يأتي الأمر delay(5000); 2. الأمر delay() يوقف تنفيذ البرنامج لفترة زمنية محددة بالميلي ثانية. 3. القيمة 5000 تعني 5000 ميلي ثانية، أي 5 ثوانٍ. 4. خلال هذه الخمس ثوانٍ، يبقى القفل في حالة الفتح (الزاوية 180 درجة). 5. بعد انتهاء المهلة، ينفذ الأمر servo.write(0); لإعادة القفل إلى حالة الإغلاق.

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

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

في الكود البرمجي لنظام القفل الذكي باستخدام Arduino، ما الأمر المسؤول عن تغيير الحالة الميكانيكية للمحرك لفتح القفل عند تحقق شرط صحة كلمة المرور؟

  • أ) lcd.print("Unlocking...");
  • ب) servo.write(180);
  • ج) keypad.waitKeyFor();
  • د) delay(5000);

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

الإجابة: servo.write(180);

الشرح: 1. يبدأ الكود بالتحقق من صحة كلمة المرور عبر مقارنة كل رقم مدخل بالمخزن مسبقاً. 2. عند تطابق كلمة المرور، يتم تنفيذ الأوامر داخل جملة الشرط (if). 3. الأمر servo.write(180) هو المسؤول عن إرسال إشارة للمحرك الدوراني للتحرك بزاوية 180 درجة، وهي الحركة التي تفتح القفل ميكانيكياً. 4. يستخدم الأمر delay(5000) لإبقاء القفل مفتوحاً لمدة 5 ثوانٍ قبل إعادة إغلاقه.

تلميح: ابحث عن الأمر الذي يرسل زاوية دوران محددة للمحرك الدوراني (Servo).

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