برمجة جهاز التحكم الدقيق باستخدام لغة C++ | الوحدة السادسة | الدرس الثالث

برمجة جهاز التحكم الدقيق باستخدام لغة C++ هو عنوان الدرس الثالث من الوحدة السادسة التي تحمل اسم ” برمجة إنترنت الأشياء باستخدام لغة C++” في القسم الثاني من مقرر “إنترنت الأشياء 2-1”.
في هذا الموضوع، سنتعلم معًا كيفية إنشاء قفل باب ذكي باستخدام بيئة Tinker cad، حيث سنقوم بتوصيل المفاتيح وشاشة LCD، إضافةً إلى التحكم في محرك السيرفو المصغر. سنستكشف كيفية تضمين مكتبات لغة C++، وإنشاء كائنات برمجية مختلفة، بالإضافة إلى فهم كيفية إيقاف تنفيذ البرنامج (break the code) عند الحاجة. كما سنحرص على التحقُّق من صحة الكود البرمجي لضمان عمل المشروع بكفاءة وسلاسة.
لذا قم بقراءة نواتج التعلُّم بعناية، ثم أعد قراءتها وتأكد من تحصيل محتوياتها بعد انتهائك من دراسة الموضوع.
أهداف التعلُّم
- مكونات قفل الباب الذكي.
- توصيل لوحة المفاتيح.
- توصيل شاشة LCD.
- محرك السيرفو المصغر.
- مكتبات لغة C++.
- إنشاء الكائنات المختلفة create the objects.
- إيقاف البرنامج Break the code.
هيــّــــا لنبـــــدأ!
إنشاء قفل الباب الذكي (Build a Smart Door Lock)
المكونات المطلوبة للمشروع:
- لوحة أردوينو أونو R3 (Arduino UNO R3).
- لوحة مفاتيح (مقاس 4*4).
- شاشة LCD مقاس 16*2 (12c).
- محرك سيرفو مصغر (Micro Servo).
توصيل لوحة المفاتيح
ستبدأ بإضافة لوحة المفاتيح من فئة (Input) من components (المكونات) وتوصيلها بالأردوينو.
لتوصيل لوحة المفاتيح:
- ابحث عن مكوِّن Keypad 4×4 (لوحة المفاتيح) من فئة Input (الإدخال) في Components (المكونات) واسحبه وأفلته في مساحة العمل.
- قم بتوصيل السطر الأول من لوحة المفاتيح بالطرف الرقمي 9 الخاص بالأردوينو.
- قم بتوصيل السطر الثاني من لوحة المفاتيح بالطرف الرقمي 8 الخاص بالأردوينو.
- قم بتوصيل السطر الثالث من لوحة المفاتيح بالطرف الرقمي 7 الخاص بالأردوينو.
- قم بتوصيل السطر الرابع من لوحة المفاتيح بالطرف الرقمي 6 الخاص بالأردوينو.
- قم بتوصيل السطر الأول من لوحة المفاتيح بالطرف الرقمي 5 الخاص بالأردوينو.
- قم بتوصيل السطر الثاني من لوحة المفاتيح بالطرف الرقمي 4 الخاص بالأردوينو.
- قم بتوصيل السطر الثالث من لوحة المفاتيح بالطرف الرقمي 3 الخاص بالأردوينو.
- قم بتوصيل السطر الرابع من لوحة المفاتيح بالطرف الرقمي 2 الخاص بالأردوينو.
- غيِّر كافة الأسلاك إلى اللون green (الأخضر).
توصيل شاشة LCD
ابحث الآن عن شاشة LCD من فئة Output (الإخراج) من Components (المكونات) ووصلها بالأردوينو.
لتوصيل شاشة LCD:
- ابحث عن المكون LCD 16×2 (12C) من فئة Output (الإخراج) من فئة Components (المُكوِّنات)، واسحبه وأفلته في مساحة العمل.
- قم بتوصيل الطرف GND (الأرضي) لشاشة LCD بطرف GND (الأرضي) الخاص بالأردوينو، وغيِّر لون السلك إلى black (الأسود).
- قم بتوصيل طرف Power (الطاقة) لشاشة LCD بالطرف 5V (5 فولت) بالأردوينو، وغيِّر لون السلك إلى red (الأحمر).
- قم بتوصيل طرف SDA لشاشة LCD بطرف SDA بالأردوينو، وغيِّر لون السلك إلى green (الأخضر).
- قم بتوصيل طرف SCL لشاشة LCD بطرف SCL بالأردوينو، وغيِّر لون السلك إلى yellow (الأصفر).
توصيل محرك سيرفو Micro Servo
ابحث عن micro servo (محرك سيرفو مصغر) من فئة Output (الإخراج) في Component (المكونات) وتوصيله بالأردوينو.
لتوصيل محرك السيرفو المصغر:
- ابحث عن Servo motor (محرك سيرفو مصغر) من فئة Output (الإخراج) في Components (المكوِّنات)، واسحبه وأفلته في مساحة العمل.
- قم بتوصيل الطرف GND (الأرضي) للمحرك بطرف GND (الأرضي) بالأردوينو، وغيِّر لون السلك إلى black (الأسود).
- قم بتوصيل طرف Power (الطاقة) للمحرك بالطرف 5V (5 فولت) بالأردوينو، وغيِّر لون السلك إلى red (الأحمر).
- قم بتوصيل طرف Signal (الإشارة) للمحرك بالطرف Digital (الرقمي) 11 بالأردوينو، وغيِّر لون السلك إلى orange (البرتقالي).
لمعرفة المزيد من المعلومات عن المنازل الذكية، قم بالاطّلاع على الرابط التالي:
تضمين المكتبات (Include the libraries)
الصيغة البرمجية لتضمين المكتبات في C++.
بالنسبة للمشروع الحالي سنحتاج إلى تضمين المكتبات التالية:
لوحة LCD.
لوحة المفاتيح.
المحرك المؤازر.
إنشاء الكائنات (Create the Objects)
بعد تضمينك للمكتبات الضرورية، ستحتاج إلى إنشاء بعض الكائنات المطلوبة بالمشروع:
- كائن لشاشة LCD.
- كائن للمحرك المؤازر Servo Motor.
- كائن للوحة المفاتيح.
عند انشاء كائن Object لفئة class تحتاج إلى تزويد بغض الوسيطات إلى منشئ وهذا يسمى الكائن.
كائن محرك السيرفو المصغر
لإنشاء كائن لمحرك سيرفو:
- دالة Servo تشير إلى نوع الكائن.
- دالة servo تشير إلى الكائن الفعلي المستخدم في البرنامج.
ملاحظة: في هذه الحالة لا نحتاج إلى إضافة أي مُعامل تهيئة.
كائن شاشة LCD
لإنشاء كائن لشاشة LCD:
يمكنك باستخدام هذا الأمر تهيئة كائن من نوع Adafruit_LiqidCrystal وتمرير عنوان الأردوينو الابتدائي الخاص به وهو (0 افتراضيًا) كوسيط إلى منشئ الفئة.
كائن لوحة المفاتيح
تحتاج عملية الإنشاء والتهيئة لكائن لوحة المفاتيح إلى بعض البرمجة لإعداده
ستحتاج في البداية إلى تحديد عدد الصفوف والأعمدة الموجودة في لوحة المفاتيح.
يتم ذلك بهذه الأوامر:
هُنا يتم تحديد عدد الصفوف (numRows) من النوع “const byte” وقيمته 4، وكذلك ينطبق على الأعمدة.
ستحتاج بعد ذلك إلى تحديد المفتاح المضغوط وفقًا للصف والعمود تمامًا كما يظهر على لوحة المفاتيح وذلك باستخدام الأمر التالي:
ستُنشئ هنا مصفوفة keymap باستخدام numRows و numCols التي قمت بتعريفها سابقًا وتحديد المفاتيح الموجودة على لوحة المفاتيح بشكل صريح.
إعداد اتصالات لوحة المفاتيح بأطراف الأردوينو يمكنك القيام بذلك عن طريق تحديد متغيرين من نوع byte:
تحديد كائن keypad عن طريق استدعاء منشئه وتوفير وسيطاته اللازمة.
لاستكمال إعداد البرنامج ستُعرّف متغيرًا باسم password يقوم بتخزين كلمة مرور قفل الباب وهو عبارة عن مجموعة من الأحرف بطول 4.
بإمكانك مراجعة محتوى موضوع “برمجة جهاز التحكم الدقيق باستخدام لغة C++” من البداية وحتى نهاية القسم، من خلال الرابط التالي:
إيقاف البرنامج (Break down the code)
في هذه المرحلة يكون برنامج الإعداد قد اكتمل.
- تعليمات دالة Setup().
- أوامر دالة loop().
كيف يتم إيقاف البرنامج؟
تعليمات دالة setup
أوامر دالة loop()
إيقاف البرنامج (Break this Code down)
توجد بعض التعليمات البرمجية لمسح شاشة LCD ولعرض رسالة تطلب كلمة المرور.
- يتيح ذلك التعليمات البرمجية التي تستقبل كلمة المرور التي يقوم المستخدم بإدخالها وتتحقق من صحتها.
- يتم ذلك بالمقارنة بين الأزرار التي يتم الضغط عليها واحدًا تلو الآخر بالتتابع مع رقم كلمة المرور الموجود في نفس الموضع.
هل يهم إذا كان المفتاح الخطأ أول رقم أو آخره أو في أي مكان بينهما؟
لا يهم ما إذا كان المفتاح الخطأ أول رقم أو آخره أو في أي مكان بينهما والنتيجة هي أن كلمة المرور بأكملها خطأ.
لذلك، لتخزين المعلومات يمكنك استخدام متغير منطقي يتم تهيئته على أنه صائب true وعند الضغط على مفتاح خطأ تتغير قيمة المتغير إلى خطأ false.
بعد إجراء المقارنة يمكنك التحقق من هذا المتغير وهناك حالتان:
- إذا كانت هذه القيمة صائبة فهذا يعني أن المستخدم كتب كلمة المرور صحيحة.
- إذا كانت هذه القيمة خاطئة فهذا يعني أن المستخدم كتب كلمة مرور خطأ.
والآن نصل إلى الجزء المهم من البرنامج وهو عملية فتح الباب (تدوير محرك سيرفو) إذا كانت كلمة المرور المكتوبة صحيحة، وغلق القفل مرة أخرى بعد فترة من الوقت، أو عرض رسالة تفيد بأن كلمة المرور كانت خطأ.
ختامًا، سيبدو البرنامج بأكمله لمشروع القفل الذكي للباب كالآتي:

برمجة جهاز التحكم الدقيق
بإمكانك مراجعة موضوع محتوى “برمجة جهاز التحكم الدقيق باستخدام لغة C++” من بداية قسم “إيقاف البرنامج “Break down the code وحتى نهاية هذا القسم من خلال الرابط التالي:
إلى هنا يكون قد انتهي موضوع “برمجة جهاز التحكم الدقيق باستخدام لغة C++”، لا تنسوا مراجعة نواتج التعلُّم أعلى المقال، وانتظرونا في الموضوع القادم!