رباتیک و هوافضا

قفل دیجیتال با استفاده از آردوینو

قفل دیجیتال با استفاده از آردوینو

به نام خدا

قفل دیجیتال با استفاده از آردوینو

امنیت یکی از نگرانی های اصلی در زندگی روزمره ی ما است. قفل های دیجیتالی نقش بسیار مهمی در موضوع امنیت ایفا می کنند. در این پروژه ما قصد داریم با استفاده از آردوینو و صفحه کلید یک قفل دیجیتال بسازیم.

 

قطعات مورد نیاز پروژه ی قفل دیجیتال با استفاده از آردوینو:

آردوینو

ماژول صفحه کلید

بازر

ال سی دی ۱۶×۲

ترانزیستور BC547

مقاومت ۱ کیلو اهم

برد بورد

منبع تغذیه

سیم برد بورد

در این پروژه ما از تکنیک مالتی پلکس کردن استفاده کردیم . با استفاده از این تکنیک ، کلمه ی عبور را با صفحه کلید وارد سیستم می کنیم. صفحه کلید چهار در چهار است و دارای ۱۶ کلید می باشد. اگر که می خواهیم از تمامی ۱۶ کلید استفاده کنیم باید ۱۶ پین به آردوینو متصل شود اما با استفاده از تکنیک مالتی پلکس کردن تنها باید ۸ پین متصل شود تا بتوان از تمامیه ۱۶ کلید استفاده کرد.

 

تکنیک مالتی پلکس کردن :

این تکنیک یکی از پر کاربرد ترین ترفند هایی ست که برای کاهش تعداد پین های شماره ای ست که در میکروکنترلر استفاده می شود. این ترفند به دو روش استفاده می شود. یکی بررسی سطر و یکی هم بررسی ستون . اما در این پروژه به دلیل اینکه ما از کتابخانه ی آماده استفاده می کنیم و نیاز به نوشتن کد مالتی پلکس کردن توسط خودمان نیست. تنها به کتابخانه ی صفحه کلید نیاز است.

بیشتر بخوانید...  ساخت کرنومتر با استفاده از آردوینو برای محاسبه ی چند زمان

شماتیک مدار :

مدار این پروژه بسیار ساده است که شامل آردوینو ، ماژول صفحه کلید ، بازر و ال سی دی ست. کنترل کامل پروسه ی یعنی دریافت کلمه ی عبور ، مقایسه ی آن با کلمه ی عبور مورد نظر و راه اندازی بازر و ال سی دی همگی بر عهده ی آردوینو ست. بازر نیز با آردوینو از طریق یک ترازیستور NPN راه اندازی می شود.

قفل دیجیتال با استفاده از آردوینو

پین های ستونی ماژول صفحه کلید به صورت مستقیم به پین های ۴ ،۵ ، ۶ ،۷ آردوینو و پین های افقی ماژول به پین های ۳ ، ۲ ، ۱ ، ۰ آردوینو متصل هستند. ال سی دی نیز به صورت ۴ بیتی مطابق شکل به آردوینو متصل شده است. بازر نیز به پین ۱۴ (A0) از طریق ترانزیستور NPN BC547  متصل است.

دانلود کد پروژه :

دانلود فایل
#include <Keypad.h>
#include<LiquidCrystal.h>
#include<EEPROM.h>

#define buzzer 15
LiquidCrystal lcd(13,12,11,10,9,8);

char password[4];
char pass[4],pass1[4];
int i=0;
char customKey=0;

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns

char hexaKeys[ROWS][COLS] = {
  {'۱','۲','۳','A'},
  {'۴','۵','۶','B'},
  {'۷','۸','۹','C'},
  {'*','۰','#','D'}
};

byte rowPins[ROWS] = {3, 2, 1, 0}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4, 5, 6, 7}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup()
{
  lcd.begin(16,2);
  pinMode(led, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(m11, OUTPUT);
  pinMode(m12, OUTPUT);
  lcd.print("  Electronic ");
  lcd.setCursor(0,1);
  lcd.print("  Keypad Lock ");
  delay(2000);
  lcd.clear();
  lcd.print("Enter Ur Passkey:");
  lcd.setCursor(0,1);
  for(int j=0;j<4;j++)
  EEPROM.write(j, j+49);
  for(int j=0;j<4;j++)
  pass[j]=EEPROM.read(j);
}
  
void loop()
{
  customKey = customKeypad.getKey();
  if(customKey=='#')
  change();
  if (customKey)
  {
     password[i++]=customKey;
     lcd.print(customKey);
     beep();
  }
  if(i==4)
  {
    delay(200);
    for(int j=0;j<4;j++)
    pass[j]=EEPROM.read(j);
    if(!(strncmp(password, pass,4)))
    {
      digitalWrite(led, HIGH);
      beep();
      lcd.clear();
      lcd.print("Passkey Accepted");
      delay(2000);
      lcd.setCursor(0,1);
      lcd.print("#.Change Passkey");
      delay(2000);
      lcd.clear();
      lcd.print("Enter Passkey:");
      lcd.setCursor(0,1);
      i=0;
      digitalWrite(led, LOW);
    }
    
    else
    {
      digitalWrite(buzzer, HIGH);
      lcd.clear();
      lcd.print("Access Denied...");
      lcd.setCursor(0,1);
      lcd.print("#.Change Passkey");
      delay(2000);
      lcd.clear();
      lcd.print("Enter Passkey:");
      lcd.setCursor(0,1);
      i=0;
      digitalWrite(buzzer, LOW);
    }
  }
}

void change()
{
  int j=0;
  lcd.clear();
  lcd.print("UR Current Passk");
  lcd.setCursor(0,1);
  while(j<4)
  {
    char key=customKeypad.getKey();
    if(key)
    {
      pass1[j++]=key;
      lcd.print(key);
      beep();
    }
    key=0;
  }
  delay(500);
  
  if((strncmp(pass1, pass, 4)))
  {
    lcd.clear();
    lcd.print("Wrong Passkey...");
    lcd.setCursor(0,1);
    lcd.print("Better Luck Again");
    delay(1000);
  }
  else
  {
    j=0;
    
  lcd.clear();
  lcd.print("Enter New Passk:");
  lcd.setCursor(0,1);
  while(j<4)
  {
    char key=customKeypad.getKey();
    if(key)
    {
      pass[j]=key;
      lcd.print(key);
      EEPROM.write(j,key);
      j++;
      beep();
    }
  }
  lcd.print("  Done......");
  delay(1000);
  }
  lcd.clear();
  lcd.print("Enter Ur Passk:");
  lcd.setCursor(0,1);
  customKey=0;
}

void beep()
{
  digitalWrite(buzzer, HIGH);
  delay(20);
  digitalWrite(buzzer, LOW);
}

 

بیشتر بخوانید...  پروژه ی شمارش افراد داخل اطاق با آردوینو

 

دیدگاه‌ها (0)

*
*