الدرس الثالث برمجة جهاز التحكم الدقيق باستخدام لغة ++C (١)
انظر إلى قمة الصفحة، أنت أمام الدرس الثالث وعنوانه برمجة جهاز التحكم الدقيق باستخدام لغة ++C. الهدف هنا بناء مشروع عملي وهو قفل باب ذكي. لتنفيذ هذا المشروع، أنت بحاجة إلى أربعة مكونات رئيسية ظاهرة في الشكل الأسفل: أولاً، لوحة أردوينو أونو آر 3 وهي العقل المدبر. ثانياً، لوحة مفاتيح بمقاس 4x4 لإدخال الرموز وكلمات المرور. ثالثاً، شاشة عرض من نوع إل سي دي بمقاس 16x2 لعرض الرسائل للمستخدم. رابعاً، محرك سيرفو مصغر ليقوم بمهمة فتح القفل وإغلاقه ميكانيكياً. تأمل توزيع هذه القطع في الصورة وكيف تتكامل معاً لبناء نظام قفل متكامل.
يقوم هذا الدرس على بناء مشروع قفل باب ذكي باستخدام لوحة أردوينو أونو، ولوحة مفاتيح، وشاشة عرض، ومحرك سيرفو. الفكرة تعتمد على برمجة هذه المكونات بلغة ++C بحيث يكتب المستخدم كلمة مرور من خلال لوحة المفاتيح، وتظهر الأحرف على شاشة العرض. إذا كانت كلمة المرور مطابقة لما تم برمجته، يصدر الأمر لمحرك السيرفو بالدوران ليفتح الباب، وإلا تظهر رسالة خطأ. يتضمن المشروع تضمين المكتبات الخاصة بكل مكون مثل Keypad وServo وAdafruit_LiquidCrystal، ثم إنشاء الكائنات البرمجية وتوصيل الأطراف في بيئة المحاكاة، وكتابة دوال التهيئة والإعداد في setup ودوال التكرار في loop للتحقق المستمر من المدخلات.
الفكرة الأساسية
بناء نظام قفل باب ذكي يتفاعل مع المستخدم عبر لوحة مفاتيح لإدخال كلمة مرور مكونة من أربعة أحرف، وعرضها على شاشة عرض، وتحريك محرك سيرفو لفتح الباب في حال صحة كلمة المرور.
الشرح
لتحقيق ذلك، تربط المكونات المادية مع لوحة أردوينو أونو؛ حيث توصل لوحة المفاتيح بالأطراف الرقمية، وشاشة LCD بأطراف الطاقة والأرضي وأطراف الاتصال، ومحرك السيرفو بطرف الإشارة رقم 11. برمجياً بلغة ++C، تحتاج أولاً إلى تضمين المكتبات الخاصة بكل مكون باستخدام أمر التضمين لتوفير الدوال الجاهزة. بعد ذلك، تنشئ الكائنات البرمجية لكل مكون مثل كائن شاشة LCD وكائن محرك السيرفو وكائن لوحة المفاتيح، مع تحديد الأبعاد مثل عدد الصفوف والأعمدة في لوحة المفاتيح وتوصيلات الأطراف. في دالة الإعداد setup، تستدعي دوال تهيئة الأبعاد وشاشة العرض، وتأخذ كلمة المرور المخزنة. وفي دالة التكرار loop، يقرأ البرنامج المدخلات عبر دالة الانتظار ويقارنها بالحرف المدخل، ثم يتحقق من صحة كلمة المرور كاملة ليصدر أمر الدوران للمحرك بمقدار 180 درجة لفتح الباب، أو إظهار رسالة خطأ عند عدم التطابق.
مثال محلول خطوة بخطوة
- وصل طرف الطاقة 5V لشاشة LCD بالطرف 5V في الأردوينو، وطرف الأرضي GND بالطرف GND، وطرفي SDA وSCL بالأطراف المخصصة.
- أضف مكتبة الشاشة ومكتبة لوحة المفاتيح ومكتبة السيرفو في بداية الكود.
- أنشئ كائن السيرفو بكتابة Servo servo; واجعله يترابط بالطرف 11 عبر الأمر servo.attach(11);.
- عرف مصفوفة لكلمة المرور ومصفوفة لأزرار لوحة المفاتيح عبر تحديد عدد الصفوف والأعمدة بقيمة 4 لكل منهما.
- في دالة setup، ضع الأمر lcd.begin(16, 2); لتهيئة الشاشة ذات 16 عموداً وصفوف اثنين.
- استخدم حلقة التكرار for لقراءة 4 أحرف يدخلها المستخدم وتخزينها في متغير كلمة المرور.
- في دالة loop، تحقق من الأحرف المدخلة باستخدام دالة المقارنة، وإذا تطابقت الكلمة، نفذ الأمر servo.write(180); لتدوير المحرك وفتح القفل.
أخطاء شائعة
- نسيان تضمين إحدى المكتبات الأساسية مثل Keypad.h أو Servo.h قبل محاولة إنشاء الكائنات الخاصة بها.
- كتابة أبعاد شاشة LCD بشكل خاطئ في دالة begin، مثل عكس أرقام الأعمدة والصفوف.
- عدم توصيل أطراف الطاقة والأرضي بشكل صحيح لمكونات الشاشة أو المحرك، مما يمنع عملها.
- الخطأ في تحديد أرقام الأطراف الرقمية الموصلة بلوحة المفاتيح أو السيرفو مقارنة بما هو مكتوب في الكود.
سؤالان للتدريب مع الإجابة
السؤال الأول: ما هي الوظيفة الأساسية للأمر servo.attach(11); في البرنامج؟ الإجابة: ترفق وتوصل كائن محرك السيرفو بالطرف الرقمي 11 في لوحة الأردوينو.
السؤال الثاني: لماذا نستخدم دالة lcd.begin(16, 2); في دالة الإعداد؟ الإجابة: لتهيئة واجهة شاشة LCD وتحديد أبعادها بحيث تحتوي على 16 عموداً وصـفين اثنين.