تصميم قفل باب بالرقم السري


مقدمة

سنقوم في هذه التجربة بتصميم قفل للباب يفتح عندما يتم إدخال الرمز السري ثم علامة # فيقوم servo motor بالتحرك و يمكننا بعد ذلك فتح الباب.

الأدوات المستخدمة

Screen Shot 1439 04 03 at 12.15.07 AM

الأداة العدد ملاحظات
أردوينو أونو 1
مصباح LED 2 لونان: أحمر، وأخضر
4×4 مصفوفة لوحة مفاتيح 1
Arduino PCB shield 3
 مقاومة ثابتة 2
لوحة توصيل 1
Servo Motor 1
Male pin header 1
Female pin header 1
أدوات لحام (كاوية لحام، أسلاك لحام) حسب الحاجة
أسلاك توصيل حسب الحاجة

الجزء النظري

يقوم مبدأ هذه التجربة على تصميم قفل أوتوماتيكي للباب، حيث يفتح المزلاج تلقائيًا عندما نقوم بإدخال الرمز السري ثم الرمز #. عندما نقوم بإدخال الرمز السري عبر لوحة المفاتيح يقوم الأردوينو بمقارنته بالرمز المدخل سابقًا ضمن الكود البرمجي وعند تطابق الرمزين يقوم الأردوينو بتزويد المحرك servo بالطاقة ليقوم بتحريك المزلاج وبذلك نستطيع فتح الباب.

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

اتبع الصورة التالية والخطوات المصورة لتتمكن من توصيل الدائرة ولحم القطع ببعضها

door lock bb

pasted image 0 28 pasted image 0 33
1 2
pasted image 0 25 pasted image 0 31
3 4
pasted image 0 23 pasted image 0 34
5 6
pasted image 0 24 pasted image 0 26
7 8
pasted image 0 32 pasted image 0 27
9 10
pasted image 0 30 pasted image 0 21
11 12

الكود البرمجي

نحتاج إلى تحميل المكتبات التالية ليعمل الكود بدون أخطاء:

بعد ذلك قم بنسخ الكود ولصقه في برنامج الأردوينو

تحميل الكود البرمجي

#include <Password.h> //http://playground.arduino.cc/uploads/Code/Password.zip //tells to use password library
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip  //tells to use keypad library
#include <Servo.h> //tells to use servo library


Servo myservo; //declares servo
Password password = Password( "0000" ); //password to unlock, can be changed

const byte ROWS = 4; // Four rows
const byte COLS = 4; // columns
// Define the Keymap
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 9, 8, 7, 6 };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
byte colPins[COLS] = { 5, 4, 3 };


// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){
  Serial.begin(9600);
  Serial.write(254);
  Serial.write(0x01);
  delay(200); 
  pinMode(11, OUTPUT);  //green light
  pinMode(12, OUTPUT);  //red light
  myservo.attach(13); //servo on digital pin 9 //servo
  keypad.addEventListener(keypadEvent); //add an event listener for this keypad
  }

void loop(){
  keypad.getKey();
  myservo.write(0);
  }
  //take care of some special events
  void keypadEvent(KeypadEvent eKey){
  switch (keypad.getState()){
  case PRESSED:
  
  Serial.print("Enter:");
  Serial.println(eKey);
  delay(10);
  
  Serial.write(254);
  
  switch (eKey){
    case '*': checkPassword(); delay(1); break;
    
    case '#': password.reset(); delay(1); break;
    
     default: password.append(eKey); delay(1);
}
}
}
void checkPassword(){
  
if (password.evaluate()){  //if password is right open
    
    Serial.println("Accepted");
    Serial.write(254);delay(10);
    //Add code to run if it works
    myservo.write(150); //deg
    
        digitalWrite(11, HIGH);//turn on
    delay(5000); //wait 5 seconds
    digitalWrite(11, LOW);// turn off
    
    
}else{
    Serial.println("Denied"); //if passwords wrong keep locked
    Serial.write(254);delay(10);
    //add code to run if it did not work
    myservo.write(0);
    digitalWrite(12, HIGH); //turn on
    delay(500); //wait 5 seconds
    digitalWrite(12, LOW);//turn off
    
}
}

المصدر

مصدر التجربة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *