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

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

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

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

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

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

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

📝 ملخص الصفحة

📚 إعدادات القفل الذكي

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

دالة `setup()`: دالة تُنفَّذ مرة واحدة عند بدء تشغيل النظام لتهيئة المكونات.

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

```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 مفاتيح من لوحة المفاتيح وتخزينها في المصفوفة.
```

نقاط مهمة

  • وظيفة `setup()` هي تهيئة المكونات (السيرفو، شاشة LCD) وجمع كلمة المرور الأساسية من المستخدم.
  • يتم تخزين كلمة المرور في مصفوفة `password[4]` باستخدام حلقة `for`.
  • في بداية دالة `loop()`، يتم مسح شاشة LCD وطباعة رسالة جديدة لطلب كلمة المرور.
  • يتم تعريف متغير منطقي `correctPass` في `loop()` لاستخدامه لاحقاً في التحقق من صحة كلمة المرور المدخلة.

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

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

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

char password[4]; void setup() { // servo setup servo.attach(11); servo.write(0); // lcd setup lcd.begin(16, 2); // lcd print 1st line lcd.setCursor(0, 0); lcd.print("Set 4 character"); // lcd print 2nd line lcd.setCursor(0, 1); lcd.print("password:"); // gets and stores the password for(int i = 0; i < 4; i++){ password[i] = keypad.waitKey(); } } void loop() { // clear the screen and display the new message lcd.clear(); lcd.setCursor(0, 0); lcd.print("Enter password:"); bool correctPass = true; char buttonPressed; }

نوع: METADATA

255 Ministry of Education 2025 - 1447

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

char password[4]; void setup() { // servo setup servo.attach(11); servo.write(0); // lcd setup lcd.begin(16, 2); // lcd print 1st line lcd.setCursor(0, 0); lcd.print("Set 4 character"); // lcd print 2nd line lcd.setCursor(0, 1); lcd.print("password:"); // gets and stores the password for(int i = 0; i < 4; i++){ password[i] = keypad.waitKey(); } } void loop() { // clear the screen and display the new message lcd.clear(); lcd.setCursor(0, 0); lcd.print("Enter password:"); bool correctPass = true; char buttonPressed; } 255 Ministry of Education 2025 - 1447

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

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

في برمجة لوحة Arduino مع لوحة المفاتيح، ما الغرض من استخدام دالة `keypad.waitKey()` كما في الكود `password[i] = keypad.waitKey();`؟

  • أ) لإرسال إشارة إلى شاشة LCD لعرض حرف.
  • ب) لتنشيط محرك السيرفو (Servo) وتدويره.
  • ج) لانتظار ضغط المستخدم على مفتاح من لوحة المفاتيح وتخزين القيمة.
  • د) لمسح شاشة LCD وإعدادها لعرض رسالة جديدة.

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

الإجابة: لانتظار ضغط المستخدم على مفتاح من لوحة المفاتيح وتخزين القيمة.

الشرح: 1. دالة `waitKey()` هي جزء من مكتبة لوحة المفاتيح (Keypad). 2. وظيفتها هي الانتظار حتى يقوم المستخدم بالضغط على أي مفتاح. 3. عند الضغط، تُرجع الدالة قيمة الحرف أو الرقم الذي تم الضغط عليه. 4. في الكود، تُستخدم داخل حلقة لتخزين هذه القيمة في مصفوفة `password`.

تلميح: تتعلق هذه الدالة بالتفاعل مع المستخدم وإدخال البيانات.

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

في سياق برمجة نظام قفل إلكتروني باستخدام Arduino، ما هو الغرض الأساسي من استخدام مصفوفة `char password[4];` في بداية الكود؟

  • أ) لتعريف متغير يحوي قيمة رقمية تمثل وقت الانتظار.
  • ب) لتخصيص مساحة في الذاكرة لتخزين كلمة المرور المكونة من 4 أحرف.
  • ج) لإنشاء دالة (function) جديدة اسمها `password`.
  • د) لطباعة كلمة 'password' على شاشة LCD.

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

الإجابة: لتخصيص مساحة في الذاكرة لتخزين كلمة المرور المكونة من 4 أحرف.

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

تلميح: المصفوفة (Array) تُستخدم لتخزين مجموعة من البيانات من نفس النوع.

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

في دالة `setup()` في كود Arduino الموضح، ما هو تسلسل الإجراءات المتبع لإعداد النظام؟

  • أ) قراءة كلمة المرور أولاً، ثم إعداد شاشة LCD، وأخيراً إعداد محرك السيرفو.
  • ب) إعداد محرك السيرفو، ثم إعداد شاشة LCD وعرض رسالة عليها، ثم قراءة كلمة المرور من المستخدم.
  • ج) إعداد شاشة LCD فقط، ثم الانتقال مباشرة إلى دالة `loop()`.
  • د) مسح شاشة LCD أولاً، ثم إعداد محرك السيرفو، ثم قراءة كلمة المرور.

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

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

الشرح: 1. أولاً: `servo.attach(11);` و `servo.write(0);` لإعداد محرك السيرفو ووضعه في موضع البداية. 2. ثانياً: `lcd.begin()`, `lcd.setCursor()`, و `lcd.print()` لإعداد شاشة LCD وعرض رسالة 'Set 4 character password:'. 3. ثالثاً: استخدام حلقة `for` مع `keypad.waitKey()` لقراءة 4 أحرف من لوحة المفاتيح وتخزينها في المصفوفة `password`.

تلميح: يتم تنفيذ التعليمات في دالة `setup()` مرة واحدة عند بدء التشغيل، وتبعاً لترتيب كتابتها.

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