يعد الأمان مصدر قلق كبير في حياتنا اليومية ، وأصبحت الأقفال الرقمية جزءًا مهمًا من أنظمة الأمان هذه. هناك العديد من أنواع التقنيات المتاحة لتأمين مكاننا ، مثل أنظمة الأمان القائمة على PIR ، ونظام الأمان المستند إلى RFID ، وأجهزة إنذار أمان الليزر ، وأنظمة المصفوفة الحيوية وما إلى ذلك. وحتى الآن ، هناك أقفال رقمية يمكن تشغيلها باستخدام هواتفنا الذكية ، وهذا يعني عدم المزيد من الحاجة إلى الاحتفاظ بمفاتيح مختلفة ، يمكن لهاتف ذكي واحد فقط تشغيل جميع الأقفال ، ويستند هذا المفهوم إلى إنترنت الأشياء.
في هذا المشروع ، أوضحنا قفلًا برمزًا إلكترونيًا بسيطًا باستخدام 8051 Microcontorller ، والذي لا يمكن فتحه إلا برمز محدد مسبقًا ، إذا أدخلنا رمزًا خاطئًا ، ينبه النظام عن طريق صفارة الإنذار. لقد أنشأنا بالفعل قفلًا رقميًا باستخدام Arduino.
شرح العمل:
يحتوي هذا النظام بشكل أساسي على متحكم AT89S52 ووحدة لوحة مفاتيح وجرس وشاشة LCD. يتحكم متحكم At89s52 في العمليات الكاملة مثل أخذ نموذج كلمة المرور لوحدة لوحة المفاتيح ، ومقارنة كلمات المرور المحددة مسبقًا ، وجرس القيادة ، وإرسال الحالة إلى شاشة LCD. تُستخدم لوحة المفاتيح لإدخال كلمة المرور في وحدة التحكم الدقيقة. يتم استخدام الجرس للإشارة إلى كلمة مرور خاطئة ويتم استخدام شاشة LCD لعرض الحالة أو الرسائل عليها. يحتوي Buzzer على برنامج تشغيل يحمل في ثناياه عوامل باستخدام ترانزستور NPN.
المكونات:
- 8051 متحكم (AT89S52)
- وحدة لوحة المفاتيح 4X4
- صفارة
- 16x2 LCD
- المقاوم (1 ك ، 10 ك)
- مقاوم سحب (10 كيلو)
- مكثف (10 فائق التوهج)
- الصمام الأحمر
- لوح الخبز
- IC 7805
- 11.0592 ميجا هرتز كريستال
- مزود الطاقة
- توصيل الأسلاك
أخذ المدخلات من 4X4 Keypad Matrix باستخدام تقنية المضاعفة:
في هذه الدائرة ، استخدمنا تقنية تعدد الإرسال لربط لوحة المفاتيح بالميكروكونترولر 8051 ، لإدخال كلمة المرور في النظام. نحن هنا نستخدم لوحة مفاتيح 4x4 بها 16 مفتاحًا. إذا أردنا استخدام 16 مفتاحًا ، فنحن بحاجة إلى 16 دبوسًا للاتصال بـ 89s52 ، ولكن في تقنية تعدد الإرسال ، نحتاج إلى استخدام 8 دبابيس فقط لربط 16 مفتاحًا. بحيث تكون طريقة ذكية لربط وحدة لوحة المفاتيح.
تعد تقنية تعدد الإرسال طريقة فعالة للغاية لتقليل عدد المسامير المستخدمة مع وحدة التحكم الدقيقة لتوفير الإدخال أو كلمة المرور. يتم استخدام هذه التقنية بشكل أساسي بطريقتين - الأولى هي مسح الصفوف والأخرى هي مسح العمود.
سنقوم هنا بشرح مسح الصفوف:
أولا علينا تحديد 8 دبوس لوحدة لوحة المفاتيح. في أي 4 دبابيس هي العمود وآخر 4 دبابيس هي صفوف
بالنسبة لمسح الصفوف ، نحتاج إلى إعطاء بيانات أو إشارة إلى دبابيس العمود وقراءة تلك البيانات أو الإشارة من دبوس الصف. لنفترض الآن أننا نقدم البيانات أدناه إلى دبابيس العمود:
C1 = 0 ؛
C2 = 1 ؛
C3 = 1 ؛
C4 = 1 ؛
ونقرأ هذه البيانات عند دبابيس الصف (بشكل افتراضي ، تكون دبابيس الصف عالية بسبب مقاومة السحب).
إذا ضغط المستخدم على رقم المفتاح '1' ، فإن R1 يغير HIGH إلى LOW يعني R1 = 0 ؛ وتتفهم وحدة التحكم أن المستخدم قد ضغط على المفتاح "1". وستقوم بطباعة الرقم "1" على شاشة LCD وتخزين الرقم "1" في مجموعة. لذا فإن هذا التغيير من HIGH إلى LOW عند R1 ، هو الشيء الرئيسي الذي يفهم من خلاله المتحكم أنه تم الضغط على مفتاح ما ، مطابق للعمود 1.
الآن إذا ضغط المستخدم على رقم المفتاح '2' ، فسيظل R1 عند HIGH حيث أن C1 و R1 كلاهما بالفعل في HIGH. ومن ثم لن يكون هناك أي تغيير ، فهذا يعني أن المتحكم الدقيق يفهم أنه لم يتم الضغط على أي شيء في العمود الأول. وبالمثل ، ينطبق هذا المبدأ على جميع الدبابيس الأخرى. لذلك في هذه الخطوة ، ينتظر المتحكم فقط المفاتيح الموجودة في العمود الأول: "1" و "4" و "7" و "*".
الآن إذا أردنا تتبع المفاتيح في أعمدة أخرى (مثل العمود 2) ، فسنحتاج إلى تغيير البيانات في دبابيس الأعمدة:
C1 = 1 ؛
C2 = 0 ؛
C3 = 1 ؛
C4 = 1 ؛
لا تنتظر وحدة التحكم في الوقت هذه سوى المفاتيح الموجودة في العمود الثاني: "2" و "5" و "8" و "0" ، لأن التغيير (من مرتفع إلى منخفض) يحدث فقط عند الضغط على مفتاحين في العمود. إذا ضغطنا على أي مفتاح في العمود 1 أو 3 أو 4 ، فلن يحدث أي تغيير ، لأن هذه الأعمدة في HIGH ، والصفوف في HIGH بالفعل.
وبالمثل ، يمكن أيضًا تتبع المفاتيح الموجودة في العمود C3 و C4 بجعلها 0 ، في كل مرة. تحقق هنا من الشرح التفصيلي: Keypad Interfacing مع 8051. انتقل أيضًا إلى قسم Code أدناه لفهم المنطق بشكل صحيح.
شرح الدائرة:
تم عرض مخطط الدائرة لهذا القفل الرقمي باستخدام 8051 أدناه ويمكن فهمه بسهولة. ترتبط دبابيس العمود في وحدة لوحة المفاتيح مباشرة بمنفذ P0.0 و P0.1 و P0.2 و P0.3 ودبابيس Row بـ P0.4 و P0.5 و P0.6 و P0.7 من 89s52 منفذ متحكم 0 شاشة LCD مقاس 16 × 2 متصلة بمتحكم دقيق 89s52 في وضع 4 بت. يتم توصيل دبوس التحكم RS و RW و En مباشرة بالطرف P1.0 و GND و P1.2. ودبوس البيانات D4-D7 متصل بالدبابيس P1.4 و P1.5 و P1.6 و P1.7 من 89s52. ويتم توصيل صفارة واحدة بالدبوس P2.6 من خلال المقاوم.
شرح البرنامج:
لقد استخدمنا كلمة مرور محددة مسبقًا في البرنامج ، ويمكن للمستخدم تحديد كلمة المرور هذه في الكود أدناه. عندما يقوم المستخدم بإدخال كلمة مرور للنظام، ثم يقارن النظام كلمة المرور التي أدخلها المستخدم بكلمة المرور المخزنة أو المحددة مسبقًا في رمز البرنامج. في حالة حدوث تطابق ، ستعرض شاشة LCD رسالة "Access Grated" وإذا لم تتطابق كلمة المرور ، فستعرض شاشة LCD عبارة "Access Denied" (تم رفض الوصول) وسيصدر الجرس صوت تنبيه مستمر لبعض الوقت. هنا استخدمنا مكتبة string.h. باستخدام هذه المكتبة يمكننا مقارنة أو مطابقة سلسلتين ، باستخدام وظيفة “strncmp”.
في البرنامج ، نقوم أولاً بتضمين ملف الرأس وتحديد دبابيس متغيرة ومدخلات ومخرجات للوحة المفاتيح وشاشات الكريستال السائل.
#تضمن
تم إنشاء وظيفة لإنشاء تأخير لمدة ثانية واحدة ، إلى جانب بعض وظائف LCD مثل تهيئة LCD وطباعة السلسلة والأوامر وما إلى ذلك ، يمكنك العثور عليها بسهولة في Code. تحقق من هذه المقالة لمعرفة واجهة LCD مع 8051 ووظائفها.
بعد ذلك ، في البرنامج الرئيسي ، قمنا بتهيئة شاشة LCD ثم نقرأ المدخلات من لوحة المفاتيح باستخدام وظيفة لوحة المفاتيح () ونخزن مفاتيح الإدخال في مصفوفة ثم نقارنها من بيانات مصفوفة محددة مسبقًا باستخدام strncmp.
void main () {buzzer = 1؛ lcd_init () ، lcdstring ("الرمز الإلكتروني") ؛ lcdcmd (0xc0) ؛ lcdstring ("نظام القفل") ؛ تأخير (400) ؛ lcdcmd (1) ؛ lcdstring ("ملخص الدائرة") ؛ تأخير (400) ؛ بينما (1) {i = 0 ؛ لوحة المفاتيح () ؛ إذا (strncmp (تمرير ، "4201" ، 4) == 0)
إذا كانت كلمة المرور التي تم إدخالها مطابقة ، فسيتم استدعاء وظيفة القبول ():
قبول باطل () {lcdcmd (1) ؛ lcdstring ("مرحبًا") ؛ lcdcmd (192) ؛ lcdstring ("قبول كلمة المرور") ؛ تأخير (200) ؛ }
وإذا كانت كلمة المرور خاطئة ، فسيتم استدعاء الوظيفة الخاطئة ():
باطل خطأ () {الجرس = 0 ؛ lcdcmd (1) ؛ lcdstring ("مفتاح المرور الخطأ") ؛ lcdcmd (192) ؛ lcdstring ("PLZ حاول مرة أخرى") ؛ تأخير (200) ؛ الجرس = 1 ؛ }
تحقق من وظيفة لوحة المفاتيح أدناه في الكود الذي يقرأ وحدة لوحة مفاتيح نموذج الإدخال.