مشروع قفل باب بالرقم السري باستخدام Arduino and Keypad

١١ نوفمبر ٢٠٢٣
متمكن
مشروع قفل باب بالرقم السري باستخدام Arduino and Keypad

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


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





1X اردوينو اونو

2X مصباح LED

لونان: أحمر، وأخضر

لوحة مفاتيح 4*4

Arduino PCB shield

مقاومة ثابتة 1

لوحة توصيل

Servo Motor

Male pin header

Female pin header

أدوات لحام (كاوية لحام، أسلاك لحام) 

أسلاك توصيل



تقدر تستغني عن اللحام وتستخدم لوحة التوصيل بشكل أسهل



الجزء النظري

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


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

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









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

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



المصدر

مصدر التجربة 



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

#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 13 //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

password.reset();

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);

password.reset();

digitalWrite(12, HIGH); //turn on

delay(500); //wait 5 seconds

digitalWrite(12, LOW);//turn off

}

}