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

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

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

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

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

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

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

📝 ملخص الصفحة

📚 تحديد المفاتيح وتوصيلها

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

مصفوفة `keymap`: مصفوفة ثنائية الأبعاد تحدد المفتاح المضغوط وفقًا لموقعه (الصف والعمود) على لوحة المفاتيح، تمامًا كما يظهر عليها.

كائن `Keypad`: كائن يتم إنشاؤه عن طريق استدعاء مُنشئه وتزويده بالوسائط اللازمة (مثل `keymap`، `rowPins`، `colPins`، `numRows`، `numCols`) للتحكم في لوحة المفاتيح.

متغير `password`: متغير من نوع مصفوفة أحرف (`char`) لتخزين كلمة مرور القفل، وهي عبارة عن مجموعة من الأحرف بطول 4.

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

```markmap

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

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

المكونات المستخدمة

  • لوحة أردوينو أونو R3 (Arduino Uno R3)
  • لوحة مفاتيح (مقياس 4x4)
#### توصيل لوحة المفاتيح

##### خطوات التوصيل

  • توصيل صفوف لوحة المفاتيح
###### الصف الأول: الطرف الرقمي 9

###### الصف الثاني: الطرف الرقمي 8

###### الصف الثالث: الطرف الرقمي 7

###### الصف الرابع: الطرف الرقمي 6

  • توصيل أعمدة لوحة المفاتيح
###### العمود الأول: الطرف الرقمي 5

###### العمود الثاني: الطرف الرقمي 4

###### العمود الثالث: الطرف الرقمي 3

###### العمود الرابع: الطرف الرقمي 2

##### ملاحظة

  • تغيير لون جميع أسلاك التوصيل إلى الأخضر (green)
  • شاشة LCD مقاس 16x2 (I2C)
#### توصيل شاشة LCD

##### خطوات التوصيل

  • توصيل الطرف GND (الأرضي) لشاشة LCD بطرف GND (الأرضي) الخاص بالأردوينو (سلك أسود)
  • توصيل طرف Power (الطاقة) لشاشة LCD بالطرف 5V (فولت) بالأردوينو (سلك أحمر)
  • توصيل طرف SDA لشاشة LCD بطرف SDA بالأردوينو (سلك أخضر)
  • توصيل طرف SCL لشاشة LCD بطرف SCL بالأردوينو (سلك أصفر)
  • محرك سيرفو مصغر (Micro Servo)
#### توصيل محرك السيرفو المصغر

##### خطوات التوصيل

  • توصيل الطرف GND (الأرضي) للمحرك بطرف GND (الأرضي) بالأردوينو (سلك أسود)
  • توصيل طرف Power (الطاقة) للمحرك بالطرف 5V (فولت) بالأردوينو (سلك أحمر)
  • توصيل طرف Signal (الإشارة) للمحرك بالطرف الرقمي 11 بالأردوينو (سلك برتقالي)

البرمجة

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

  • الصيغة العامة: #include
##### مكتبات المشروع الحالي

  • للوحة LCD: #include
  • للوحة المفاتيح: #include
  • للمحرك المؤازر: #include
#### إنشاء الكائنات

  • كائن لشاشة LCD.
  • كائن للمحرك المؤازر (Servo motor).
  • كائن للوحة المفاتيح.
##### كائن محرك السيرفو المصغر

###### الأمر: Servo servo;

  • `Servo`: نوع الكائن.
  • `servo`: اسم الكائن الفعلي المستخدم.
  • لا يحتاج إلى معاملات للتهيئة.
##### كائن شاشة LCD

###### الأمر: Adafruit_LiquidCrystal lcd(0);

  • `Adafruit_LiquidCrystal`: نوع الكائن.
  • `lcd`: اسم الكائن.
  • `(0)`: معامل التهيئة (عنوان الأردوينو الابتدائي، 0 افتراضياً).
##### كائن لوحة المفاتيح

###### تهيئة الأبعاد

  • الأمر: const byte numRows = 4;
  • الأمر: const byte numCols = 4;
  • `numRows`: عدد الصفوف (4).
  • `numCols`: عدد الأعمدة (4).
###### تحديد مصفوفة المفاتيح (keymap)

  • مصفوفة ثنائية الأبعاد تحدد شكل لوحة المفاتيح.
```cpp

char keymap[numRows][numCols] =

{

{'1', '2', '3', 'A'},

{'4', '5', '6', 'B'},

{'7', '8', '9', 'C'},

{'*', '0', '#', 'D'}

};

```

###### تحديد توصيلات الأطراف (Pins)

```cpp

byte rowPins[numRows] = {9,8,7,6}; //Rows 0 to 3

byte colPins[numCols] = {5,4,3,2}; //Columns 0 to 3

```

###### إنشاء كائن Keypad

```cpp

Keypad keypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

```

###### تعريف كلمة المرور

```cpp

char password[4];

```

##### ملاحظة

  • قد يتطلب إنشاء الكائن تمرير وسائط إلى المُنشئ (Constructor) لتهيئتها.
```

نقاط مهمة

  • يتم إنشاء مصفوفة `keymap` باستخدام الثوابت `numRows` و `numCols` التي تم تعريفها مسبقًا.
  • يتم تحديد توصيلات لوحة المفاتيح بالأردوينو عبر مصفوفتي `rowPins` و `colPins`.
  • يتم إنشاء كائن `Keypad` عن طريق استدعاء مُنشئه وتزويده بجميع الوسائط اللازمة.
  • يتم تعريف متغير `password` كمصفوفة أحرف لتخزين كلمة مرور مكونة من 4 أحرف.

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

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

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

ستحتاج بعد ذلك إلى تحديد المفتاح المضغوط وفقًا للصف والعمود تمامًا كما يظهر على لوحة المفاتيح. طريقة القيام بذلك هي:

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

// keymap defines the key pressed according to the rows and columns just as they appear on the keypad char keymap[numRows][numCols] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} };

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

ستُنشئ هنا مصفوفة keymap باستخدام numRows و numCols التي قمت بتعريفها سابقًا، وتحديد المفاتيح الموجودة على لوحة المفاتيح بأطراف اتصالات لوحة المفاتيح بإشراف الأردوينو. يمكنك القيام بذلك عن طريق تحديد.

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

// Code that shows the the keypad connections to the arduino terminals byte rowPins[numRows] = {9,8,7,6}; //Rows 0 to 3 byte colPins[numCols] = {5,4,3,2}; //Columns 0 to 3

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

تتمثل الخطوة الأخيرة في تحديد كائن Keypad عن طريق استدعاء مُنشئه، وتوفير وسيطاته اللازمة.

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

// initializes an instance of the Keypad class Keypad keypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

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

لاستكمال برنامج الإعداد، ستُعرّف متغيرًا باسم password يقوم بتخزين كلمة مرور القفل، وهو عبارة عن مجموعة من الأحرف بطول 4.

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

char password[4];

نوع: NON_EDUCATIONAL

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

نوع: METADATA

248

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

ستحتاج بعد ذلك إلى تحديد المفتاح المضغوط وفقًا للصف والعمود تمامًا كما يظهر على لوحة المفاتيح. طريقة القيام بذلك هي: // keymap defines the key pressed according to the rows and columns just as they appear on the keypad char keymap[numRows][numCols] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; ستُنشئ هنا مصفوفة keymap باستخدام numRows و numCols التي قمت بتعريفها سابقًا، وتحديد المفاتيح الموجودة على لوحة المفاتيح بأطراف اتصالات لوحة المفاتيح بإشراف الأردوينو. يمكنك القيام بذلك عن طريق تحديد. // Code that shows the the keypad connections to the arduino terminals byte rowPins[numRows] = {9,8,7,6}; //Rows 0 to 3 byte colPins[numCols] = {5,4,3,2}; //Columns 0 to 3 تتمثل الخطوة الأخيرة في تحديد كائن Keypad عن طريق استدعاء مُنشئه، وتوفير وسيطاته اللازمة. // initializes an instance of the Keypad class Keypad keypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols); لاستكمال برنامج الإعداد، ستُعرّف متغيرًا باسم password يقوم بتخزين كلمة مرور القفل، وهو عبارة عن مجموعة من الأحرف بطول 4. char password[4]; وزارة التعليم Ministry of Education 2025 - 1447 248

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

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

ما الغرض من مصفوفة keymap في برمجة لوحة المفاتيح مع الأردوينو؟

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

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

الإجابة: تحديد المفاتيح الموجودة على لوحة المفاتيح وربطها بأطراف الاتصال الخاصة بالأردوينو وفقًا لترتيب الصفوف والأعمدة.

الشرح: 1. مصفوفة keymap هي مصفوفة ثنائية الأبعاد. 2. تحدد الحرف أو الرمز المقابل لكل تقاطع بين صف وعمود في لوحة المفاتيح. 3. تربط هذا التمثيل المنطقي بالتوصيلات الفعلية على لوحة الأردوينو.

تلميح: تخيل لوحة مفاتيح رقمية، كيف يعرف البرنامج أي زر تم الضغط عليه؟

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

ما الوظيفة الأساسية للمصفوفتين rowPins و colPins في توصيل لوحة المفاتيح بالأردوينو؟

  • أ) تحديد سرعة نقل البيانات بين لوحة المفاتيح والأردوينو.
  • ب) تخزين قيم المفاتيح التي تم الضغط عليها مؤخرًا.
  • ج) تحديد أرقام المنافذ (Pins) الرقمية على لوحة الأردوينو المتصلة بصفوف وأعمدة لوحة المفاتيح على التوالي.
  • د) تشفير إشارات لوحة المفاتيح قبل إرسالها إلى الأردوينو.

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

الإجابة: تحديد أرقام المنافذ (Pins) الرقمية على لوحة الأردوينو المتصلة بصفوف وأعمدة لوحة المفاتيح على التوالي.

الشرح: 1. rowPins هي مصفوفة تحدد أرقام المنافذ المتصلة بصفوف لوحة المفاتيح. 2. colPins هي مصفوفة تحدد أرقام المنافذ المتصلة بأعمدة لوحة المفاتيح. 3. هذا التوصيل يسمح للأردوينو بمسح (Scan) لوحة المفاتيح واكتشاف الضغط على المفاتيح.

تلميح: كيف يتم توصيل الدوائر الكهربائية للوحة المفاتيح بالمعالج الدقيق؟

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

ما الخطوة النهائية في تهيئة كائن Keypad للتعامل مع لوحة المفاتيح في برنامج الأردوينو؟

  • أ) تحديد متغير لتخزين كلمة المرور فقط.
  • ب) كتابة دورة (loop) لقراءة المفاتيح دون أي تهيئة مسبقة.
  • ج) استدعاء مُنشئ (constructor) فئة Keypad وتزويده بمصفوفة keymap ومصفوفتي rowPins و colPins وعدد الصفوف والأعمدة.
  • د) توصيل لوحة المفاتيح مباشرة بمنفذ USB في الأردوينو.

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

الإجابة: استدعاء مُنشئ (constructor) فئة Keypad وتزويده بمصفوفة keymap ومصفوفتي rowPins و colPins وعدد الصفوف والأعمدة.

الشرح: 1. بعد تعريف مصفوفة المفاتيح (keymap) ومصفوفتي التوصيلات (rowPins, colPins). 2. يتم إنشاء كائن من فئة Keypad. 3. يتم تمرير هذه المعلومات كوسائط (arguments) إلى المُنشئ لربطها جميعًا معًا.

تلميح: بعد تعريف الهياكل الأساسية (المفاتيح والتوصيلات)، كيف ننشئ الكائن الذي سيدير التفاعل؟

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