راه اندازی ماژول اثر انگشت SM630 توسط Atmega8 ساخت سیستم امنیتی
آگوست 8, 2017
راه اندازی سنسور اولتراسونیک HC-SR04 توسط رزبری پای Raspberry Pi
جولای 21, 2017
نمایش همه

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

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

قطعات موردنیاز

  • آردوینو Arduino Uno
  • کیپد 4*4
  • قفل سلونوئید
  • LCD کارکتری 16*2
  • ترانزیستور جریان بالای TIP120 NPN
  • برد بورد
  • منبع تغذیه
  • بازر Buzzer
  • سیم های رابط
  • پتانسیومتر 10K برای تنظیم کنتراست LCD
  • مقاومت 220 اهم و 1K

دیاگرام مدار

اتصالات مدار

در این مدار چون از آردوینو Uno استفاده کرده ایم به دلیل کم بودن خروجی های دیجیتال Arduino Uno ناچار از خروجی های آنالوگ نیز استفاده خواهیم کرد. با توجه به اینکه قفل سلونوئید دراری ولتاژ کاری 6V تا 12V می باشد و جریان بالایی نیاز دارد از ترانزیستور جریان بالای TIP120 NPN به عنوان کلید و از منبع تغذیه خارجی استفاده می کنیم.

زمانی که ولتاژ High را به ترانزیستور اعمال می کنیم باید کلید ON باشد. بنابراین پین اول که بیس ترانزیستور را با استفاده از یک مقاومت 1K به پین 11 آردوینو متصل می کنیم، پین دوم یا همان کلکتور ترانزیستور را به منفی قفل سلونوئیدی متصل می کنیم و پین سوم یا همان امیتر ترانزیستور را به زمین متصل می کنیم. حال مثبت منبع تغذیه را به مثبت قفل سلونوئیدی و منفی آن را به زمین متصل می کنیم.

برای اتصال پین های کیپد به آردوینو به این صورت عمل می کنیم که شش پین اول کیپد را به A0 تا A5 آردوینو و دو پین بعدی را به پین های 3 و 2 متصل می کنیم.

بازر را به پین 10 آردوینو متصل می کنیم.

برای اتصال LCD به آردینو به صورت زیر عمل می کنیم.

  • پین 1، LCD  را به زمین آردوینو متصل می کنیم
  • پین 2، LCD  را به 5V آردوینو متصل می کنیم
  • پین 3، LCD  را به پین وسط پتانسیوتر و دو پین دیگر را به زمین و 5V متصل می کنیم
  • پین 4، LCD  را به پین 9 آردوینو متصل می کنیم
  • پین 5، LCD  را به زمین متصل می کنیم زیرا در این پروژه فقط در LCD می نویسیم
  • پین 6، LCD  را به پین 8 آردوینو متصل می کنیم
  • پین 13،12،11و 14، LCD  را به ترتیب به پین های 7، 6، 5 و 4  متصل می کنیم
  • پین 15، LCD  را توسط یک مقاومت 220 اهمی به 5V متصل می کنیم که برای بک لایت LCD می باشد
  • پین 16، LCD  را به زمین متصل می کنیم.

عملکرد مدار

در این پروژه از EEPROM آردوینو برای ذخیره پسورد استفاده شده است. پسورد پیشفرض “1234” است. زمانی که کاربر رمز را وارد می کند، رمز وارد شده با رمز ذخیره شده در EEPROM آردوینو مقایسه می شود، اگر رمز وارد شده صحیح باشد عبارت “Passkey Accepted” در LCD نمایش داده می شود و قفل سلونوئیدی باز می شود، اگر رمز وارد شده اشتباه باشد عبارت “Access Denied …” در LCD نمایش داده می شود و قفل سلونوئیدی بسته باقی مانده و بازر شروع به بیپ کردن، می کند. با فشردن هر کلید نیز بازر بیپ می کند. برای تغییر رمز وردو از دکمه “#” استفاده می شود، با فشردن این کلید اگر رمز ورود درست وارد شود رمز جدید را سیستم دریافت خواهد کرد و در EEPROM ذخیره خواهد کرد.

 

در نوشتن این مطلب از این لینک استفاده شده است.

این مطلب را به اشتراک بگذارید

10 دیدگاه ها

  1. مهران گفت:

    با سلام
    بروژه شما رو بستم و جواب گرفتم اما اگر بخواهیم توسط 4 رمز 4 خروجی رو فعال کنیم با مد نظر گرفتم آردینو مناسب برای تعداد خروجی چه کاری باید کرد؟
    در واقع چه تابع و کدی را باید تغیر داد که ما 4 تا بسورد به صورت سیو در حافظه ایبیرام داشته باشیم.
    ممنون میشوم راهنمایی بفرمایید.
    تشکر میکنم بابت مطالب مفیدتون.

    • مدیرسایت گفت:

      سلام
      برای این کار می توانید تعداد متغیرها را افزایش دهید
      پروسه کار دقیقا همین کاری است که انجام شده است
      با تشکر

  2. مهران گفت:

    خیلی ممنون بابت راهنمایی
    این کدی هست که من تغییرات توی کد اصلی برای اضافه کردن یک بسورد دیگه کردم اما این کد به درستی جواب نداد.
    #include
    #include
    #include
    LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
    char password[65];
    char pass[4], pass1[4];
    char password1[5];
    char pass2[5], pass3[5];
    //char password2[4];
    //char pass4[4], pass5[4]
    // char password3[4];
    // char pass6[4], pass7[4]
    int i = 0;
    int r = 0;
    char customKey = 0;
    char customKey1 = 0;
    const byte ROWS = 4; //four rows
    const byte COLS = 4; //four columns
    char hexaKeys[ROWS][COLS] = {
    { ‘1’, ‘2’, ‘3’, ‘A’ },
    { ‘4’, ‘5’, ‘6’, ‘B’ },
    { ‘7’, ‘8’, ‘9’, ‘C’ },
    { ‘*’, ‘0’, ‘#’, ‘D’ }
    };
    byte rowPins[ROWS] = { A0, A1, A2, A3 }; //connect to the row pinouts of the keypad
    byte colPins[COLS] = { A4, A5, 3, 2 }; //connect to the column pinouts of the keypad
    //initialize an instance of class NewKeypad
    Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
    int led;
    int buzzer = 10;
    int m11;
    int m12;
    void setup()
    {
    Serial.begin(9600);
    lcd.begin(16, 2);
    pinMode(11, OUTPUT);
    pinMode(12, OUTPUT);
    pinMode(led, OUTPUT);
    pinMode(buzzer, OUTPUT);
    pinMode(m11, OUTPUT);
    pinMode(m12, OUTPUT);
    lcd.print(” Electronic “);
    Serial.print(” Electronic “);
    lcd.setCursor(0, 1);
    lcd.print(” Keypad Lock “);
    Serial.print(” Keypad Lock “);
    delay(2000);
    lcd.clear();
    lcd.print(“Enter Ur Passkey:”);
    Serial.println(“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);
    for (int p = 5; p<9; p++)
    EEPROM.write(p, p + 49);
    for (int p = 5; p<9; p++)
    pass2[p] = EEPROM.read(p);
    }

    void loop()
    {
    /*————————————-pass1 run——————————-*/
    digitalWrite(11, HIGH);
    customKey = customKeypad.getKey();
    if (customKey == '#')
    change();
    if (customKey)
    {
    password[i++] = customKey;
    lcd.print(customKey);
    Serial.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");
    Serial.println("Passkey Accepted");
    digitalWrite(11, LOW);
    delay(2000);
    lcd.setCursor(0, 1);
    lcd.print("#.Change Passkey");
    Serial.println("#.Change Passkey");
    delay(2000);
    lcd.clear();
    lcd.print("Enter Passkey:");
    Serial.println("Enter Passkey:");
    lcd.setCursor(0, 1);
    i = 0;
    digitalWrite(led, LOW);
    }
    else
    {
    digitalWrite(11, HIGH);
    digitalWrite(buzzer, HIGH);
    lcd.clear();
    lcd.print("Access Denied…");
    Serial.println("Access Denied…");
    lcd.setCursor(0, 1);
    lcd.print("#.Change Passkey");
    Serial.println("#.Change Passkey");
    delay(2000);
    lcd.clear();
    lcd.print("Enter Passkey:");
    Serial.println("Enter Passkey:");
    lcd.setCursor(0, 1);
    i = 0;
    digitalWrite(buzzer, LOW);
    }
    }
    /*————————————-pass1 end——————————-*/

    /*————————————-pass2 run——————————-*/
    digitalWrite(12, HIGH);
    customKey1 = customKeypad.getKey();
    if (customKey1 == '*')
    change1();
    if (customKey1)
    {
    password1[r++] = customKey1;
    lcd.print(customKey1);
    Serial.print(customKey1);
    beep();
    }
    if (r == 5)
    {
    delay(200);
    for (int p = 5; p<9; p++)
    pass2[p] = EEPROM.read(p);
    if (!(strncmp(password1, pass2, 5)))
    {
    digitalWrite(led, HIGH);
    beep();
    lcd.clear();
    lcd.print("Passkey Accepted");
    Serial.println("Passkey Accepted");
    digitalWrite(12, LOW);
    delay(2000);
    lcd.setCursor(0, 1);
    lcd.print("*.Change Passkey");
    Serial.println("*.Change Passkey");
    delay(2000);
    lcd.clear();
    lcd.print("Enter Passkey:");
    Serial.println("Enter Passkey:");
    lcd.setCursor(0, 1);
    r = 0;
    digitalWrite(led, LOW);
    }
    else
    {
    digitalWrite(12, HIGH);
    digitalWrite(buzzer, HIGH);
    lcd.clear();
    lcd.print("Access Denied…");
    Serial.println("Access Denied…");
    lcd.setCursor(0, 1);
    lcd.print("*.Change Passkey");
    Serial.println("*.Change Passkey");
    delay(2000);
    lcd.clear();
    lcd.print("Enter Passkey:");
    Serial.println("Enter Passkey:");
    lcd.setCursor(0, 1);
    r = 0;
    digitalWrite(buzzer, LOW);
    }
    }
    /*————————————-pass2 end——————————*/
    }
    /*———————————change run————————————-*/
    void change()
    {
    int j = 0;
    lcd.clear();
    lcd.print("UR Current Passk");
    Serial.println("UR Current Passk");
    lcd.setCursor(0, 1);
    while (j<4)
    {
    char key = customKeypad.getKey();
    if (key)
    {
    pass1[j++] = key;
    lcd.print(key);
    Serial.print(key);
    beep();
    }
    key = 0;
    }
    delay(500);

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

    if ((strncmp(pass3, pass2, 5)))
    {
    lcd.clear();
    lcd.print("Wrong Passkey…");
    Serial.println("Wrong Passkey…");
    lcd.setCursor(0, 1);
    lcd.print("Better Luck Again");
    Serial.println("Better Luck Again");
    delay(1000);
    }
    else
    {
    p = 0;
    lcd.clear();
    lcd.print("Enter New Passk:");
    Serial.println("Enter New Passk:");
    lcd.setCursor(0, 1);
    while (p<5)
    {
    char key = customKeypad.getKey();
    if (key)
    {
    pass2[p] = key;
    lcd.print(key);
    Serial.print(key);
    EEPROM.write(p, key);
    p++;
    beep();
    }
    }
    lcd.print(" Done……");
    Serial.println(" Done……");
    delay(1000);
    }
    lcd.clear();
    lcd.print("Enter Ur Passk:");
    Serial.println("Enter Ur Passk:");
    lcd.setCursor(0, 1);
    customKey1 = 0;
    }
    /*———————————change1 end————————————-*/
    void beep()
    {
    digitalWrite(buzzer, HIGH);
    delay(20);
    digitalWrite(buzzer, LOW);
    }

    من دقیقا نمیدانم که کدام قسمت موظف به پسورد وارد شده هست . من میخوام از 1234 به 8520 تغییر کنه اما هر کدی رو تغییر دادم نشد.
    منتظر راهنمایی های بیشتر شما هستم.
    با تشکر از شما

  3. علی گفت:

    سلام این مدار یه عیب بزرگ داره و اون این هس که اگه رمز رو تغییر بدیم رمز تغییر پیدا میکنه ولی با قطع برق برد یا ریست برد رمز دوباره به 1234 برمیگرده

  4. علی گفت:

    میشه رمز پیش فرض رو تغییر داد؟ چطوری؟

  5. Mohamadreza گفت:

    چطوری روی درب نصبش کنم؟

  6. آشناپور گفت:

    سلام بازر این چند ولت است

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*