يعد الأمان مصدر قلق كبير في حياتنا اليومية ، وأصبحت الأقفال الرقمية جزءًا مهمًا من أنظمة الأمان هذه. هناك العديد من أنواع أنظمة الأمان المتاحة لتأمين مكاننا. بعض الأمثلة هي نظام الأمان المستند إلى PIR ، ونظام الأمان المستند إلى RFID ، ونظام القفل الرقمي ، وأنظمة المصفوفة الحيوية ، وقفل رمز الإلكترونيات. في هذا المنشور ، دعنا نبني قفل باب للكشف عن السرقة باستخدام Arduino والذي يمكنه اكتشاف نمط طرقك على الباب ولن يفتح القفل إلا إذا كان نمط الطرق مطابقًا للنمط الصحيح. للحصول على العرض التوضيحي المناسب للعمل ، تحقق من الفيديو في النهاية.
المكونات:
- اردوينو اونو
- اضغط الزر
- صفارة
- 1 متر المقاوم
- قوة
- توصيل الأسلاك
- صندوق
- أجهزة السيارات
شرح الدائرة:
يعد مخطط الدائرة الخاص بكاشف أنماط الطرقات بسيطًا جدًا والذي يحتوي على Arduino للتحكم في عملية المشروع بأكملها وزر الضغط والجرس ومحرك سيرفو. يتحكم Arduino في العمليات الكاملة مثل أخذ نموذج كلمة المرور Buzzer أو Sensor ، ومقارنة الأنماط ، وقيادة Servo لفتح وإغلاق البوابة وحفظ النمط في Arduino.
زر الضغط متصل مباشرة بالدبوس D7 في Arduino فيما يتعلق بالأرض. و الجرس متصل في A0 دبوس التناظرية من اردوينو فيما يتعلق الأرض مع وجود مقاومة 1M بين A0 والأرض أيضا. A محرك سيرفو يرتبط أيضا إلى PWM دبوس D3 من اردوينو.
نمط طرق التغذية في اردوينو:
في هذه الدائرة ، استخدمنا Buzzer أو Peizo Sensor لأخذ نمط إدخال طرق في النظام. نحن هنا نستخدم زر ضغط للسماح بأخذ المدخلات من المستشعر وحفظ ذلك أيضًا في Arduino. تم تصميم هذا النظام من خلال أخذ فكرة من نمط شفرة مورس ولكن لا يشبه ذلك تمامًا.
استخدمنا هنا صندوقًا للوحة البطاقات للتوضيح. لأخذ المدخلات ، نطرق اللوحة بعد الضغط على زر الضغط. لقد انتهينا هنا من خلال مراعاة فترة زمنية تبلغ 500 مللي ثانية. هذا 500 مللي ثانية لأننا قمنا بإصلاحه في الكود ونمط الإدخال يعتمد عليه. ستحدد هذه الفترة الزمنية التي تبلغ 500 مللي ثانية أن الإدخال كان 1 أو 0. تحقق من الكود أدناه لفهم هذا الشيء.
عندما نطرقه ، يبدأ Arduino في مراقبة وقت الضربة الأولى للضربة الثانية ووضعها في مصفوفة. هنا في هذا النظام ، نتلقى 6 نقرات. هذا يعني أننا سنحصل على 5 فترات زمنية.
الآن نتحقق من الفترة الزمنية واحدة تلو الأخرى. أولاً ، نتحقق من الفترة الزمنية بين الضربة الأولى والثانية إذا كان الفارق الزمني بين هذه أقل من 500 مللي ثانية فسيكون 0 وإذا كان أكبر من 500 مللي ثانية فسيكون 1 وسيتم حفظه في متغير. الآن بعد ذلك ، نتحقق من الفترة الزمنية بين الضربة الثانية والثالثة وما إلى ذلك.
أخيرًا ، سنحصل على إخراج مكون من 5 أرقام بتنسيق 0 و 1 (ثنائي).
شرح العمل:
إن العمل في مشروع Smart Lock المستند إلى Knock بسيط. أولا علينا حفظ نمط في النظام. لذلك علينا الضغط مع الاستمرار على زر الضغط حتى نطرق 6 مرات. هنا في هذا المشروع ، استخدمت 6 نقرات ولكن يمكن للمستخدم تغييرها كما يشاء. بعد النقر ست مرات ، وجد Arduino نمط النقر وحفظه في EEPROM. الآن بعد حفظ نمط الإدخال ، اضغط على زر الضغط وحرره فورًا لأخذ المدخلات من المستشعر إلى Arduino لفتح القفل. الآن علينا أن نقرع 6 مرات. بعد ذلك ، يقوم Arduino بفك تشفيره ومقارنته بالنمط المحفوظ. في حالة حدوث تطابق ، يفتح Arduino البوابة عن طريق قيادة محرك سيرفو.
ملحوظة: عندما نضغط أو نضغط مع الاستمرار على زر الضغط ، يبدأ Arduino مؤقتًا لمدة 10 ثوانٍ لأخذ جميع الضربات الستة. يعني أن المستخدم يحتاج إلى الضرب في غضون 10 ثوانٍ. ويمكن للمستخدم فتح جهاز العرض التسلسلي لرؤية السجل.
شرح البرمجة:
في البرنامج أولاً ، نقوم بتضمين ملف الرأس وتحديد الإدخال والإخراج وتحديد الماكرو والمتغيرات المعلنة كما ترى في قسم الكود الكامل في الكود أدناه.
بعد ذلك ، في وظيفة الإعداد ، نعطي توجيهًا للدبوس المحدد ونبدأ تشغيل محرك مؤازر.
إعداد باطل () {pinMode (sw، INPUT_PULLUP) ؛ myServo.attach (servoPin) ؛ myServo.write (180) ؛ Serial.begin (9600) ؛ }
بعد ذلك ، نأخذ المدخلات ونحفظ نمط الإدخال أو وقت الضربة في المصفوفة.
حلقة باطلة () {int i = 0 ؛ if (digitalRead (sw) == LOW) {Serial.println ("Start") ؛ تأخير (1000) ؛ طويل stt = مللي () ؛ while (millis () <(stt + patternInputTime)) {int temp = analogRead (A0) ؛ إذا (temp> sensitivity && flag == 0 && i <= patternLenth) {…………..
بعد ذلك ، نقوم بفك تشفير نمط الإدخال
لـ (int i = 0 ؛ i
ثم احفظ إذا استمر الضغط على زر الضغط
إذا (digitalRead (sw) == 0) {لـ (int i = 0 ؛ i
وإذا لم يتم الضغط على زر الضغط ، فسوف يقارن Arduino نمط فك تشفير الإدخال بالنمط المحفوظ.
else {if (knok == 1) {for (int i = 0؛ i
إذا تطابقت أي كلمة مرور ، فافتح Servo البوابة وإلا لم يحدث شيء ولكن قد يرى المستخدم النتيجة عبر الشاشة التسلسلية.
Serial.println (AcceptFlag) ؛ if (AcceptFlag> = patternLenth-1) {Serial.println ("Accepted") ؛ myServo.write (openGate) ؛ تأخير (5000) ؛ myServo.write (closeGate) ؛ } else Serial.println ("مرفوض") ؛ }
يمكنك التحقق من الكود الكامل أدناه مع عرض فيديو.