산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 기반 키리스 도어락: LCD 디스플레이와 4×4 키패드로 보안 강화

부품 및 소모품

부품 수량
아두이노 우노 1
SparkFun 4x4 버튼 패드 (LED 호환) 1
Adafruit 표준 LCD - 16x2 흰색/파란색 1
릴레이 (일반) 1
9V 배터리 (일반) 1
단일 회전 포텐셔미터 - 10kΩ 1
저항 10kΩ 1

앱 및 온라인 서비스

프로젝트 소개

필요한 구성품

이 프로젝트에 필요한 구성품은 다음과 같습니다:

작동 원리

키가 입력될 때마다 저장된 키와 비교합니다. 입력된 키가 EEPROM에 저장된 초기 비밀번호('1234')와 일치하면 잠금이 해제됩니다. 비밀번호가 일치하지 않으면 LCD에 "access denied"(접근 거부)가 표시됩니다.

'#' 키를 누르면 현재 비밀번호를 입력하라는 메시지가 뜨고, 일치하면 새 비밀번호를 입력받아 변경합니다.

회로도

먼저 4x4 키패드를 아두이노에 연결합니다. 키패드의 처음 6개 핀을 아두이노의 A0~A5 핀에 연결하고, 마지막 2개 핀을 디지털 핀 3과 2에 연결합니다.

그 다음 LCD를 아두이노에 연결합니다. 연결 방법은 다음과 같습니다:

마지막으로 DC 도어락을 아두이노에 연결합니다. 도어락은 7~12V로 동작하므로 아두이노에 직접 연결할 수 없습니다. 릴레이와 배터리가 필요합니다.

릴레이 신호 핀을 아두이노 핀 10에 연결하고, 도어락의 VCC와 GND를 아두이노 5V와 GND에 연결합니다. 릴레이의 다른 쪽에는 배터리 음극을 릴레이 공통(COM) 단자에, NO(평시 개방) 단자를 도어락 한쪽에 연결합니다. 도어락 다른 쪽을 배터리 양극에 연결합니다.

아두이노 기반 키리스 도어락: LCD 디스플레이와 4×4 키패드로 보안 강화

아두이노 키패드 도어락 코드

초기 비밀번호는 1234입니다.

#include <Keypad.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>

LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
char password[4];
char initial_password[4], new_password[4];
int i = 0;
int relay_pin = 10;
char key_pressed = 0;
const byte rows = 4;
const byte columns = 4;
char hexaKeys[rows][columns] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte row_pins[rows] = {A0, A1, A2, A3};
byte column_pins[columns] = {A4, A5, 3, 2};
Keypad keypad_key = Keypad(makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);

void setup() {
  pinMode(relay_pin, OUTPUT);
  lcd.begin(16, 2);
  lcd.print(" DIYhacking.com");
  lcd.setCursor(0, 1);
  lcd.print("Electronic Lock ");
  delay(2000);
  lcd.clear();
  lcd.print("Enter Password");
  lcd.setCursor(0, 1);
  initialpassword();
}

void loop() {
  digitalWrite(relay_pin, HIGH);
  key_pressed = keypad_key.getKey();
  if (key_pressed == '#') change();
  if (key_pressed) {
    password[i++] = key_pressed;
    lcd.print(key_pressed);
  }
  if (i == 4) {
    delay(200);
    for (int j = 0; j < 4; j++)
      initial_password[j] = EEPROM.read(j);
    if (!(strncmp(password, initial_password, 4))) {
      lcd.clear();
      lcd.print("Pass Accepted");
      digitalWrite(relay_pin, LOW);
      delay(2000);
      lcd.setCursor(0, 1);
      lcd.print("Pres # to change");
      delay(2000);
      lcd.clear();
      lcd.print("Enter Password:");
      lcd.setCursor(0, 1);
      i = 0;
    } else {
      digitalWrite(relay_pin, HIGH);
      lcd.clear();
      lcd.print("Wrong Password");
      lcd.setCursor(0, 1);
      lcd.print("Pres # to Change");
      delay(2000);
      lcd.clear();
      lcd.print("Enter Password");
      lcd.setCursor(0, 1);
      i = 0;
    }
  }
}

void change() {
  int j = 0;
  lcd.clear();
  lcd.print("Current Password");
  lcd.setCursor(0, 1);
  while (j < 4) {
    char key = keypad_key.getKey();
    if (key) {
      new_password[j++] = key;
      lcd.print(key);
    }
    key = 0;
  }
  delay(500);
  if (strncmp(new_password, initial_password, 4)) {
    lcd.clear();
    lcd.print("Wrong Password");
    lcd.setCursor(0, 1);
    lcd.print("Try Again");
    delay(1000);
  } else {
    j = 0;
    lcd.clear();
    lcd.print("New Password:");
    lcd.setCursor(0, 1);
    while (j < 4) {
      char key = keypad_key.getKey();
      if (key) {
        initial_password[j] = key;
        lcd.print(key);
        EEPROM.write(j, key);
        j++;
      }
    }
    lcd.print("Pass Changed");
    delay(1000);
  }
  lcd.clear();
  lcd.print("Enter Password");
  lcd.setCursor(0, 1);
  key_pressed = 0;
}

void initialpassword() {
  for (int j = 0; j < 4; j++)
    EEPROM.write(j, j + 49);  // '1','2','3','4' 저장
  for (int j = 0; j < 4; j++)
    initial_password[j] = EEPROM.read(j);
}

코드 설명

먼저 4x4 키패드, LCD, 비밀번호 저장을 위한 라이브러리를 포함합니다. EEPROM 라이브러리로 비밀번호를 저장하며 기본 비밀번호는 '1234'입니다.

#include <Keypad.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>

loop 함수에서 눌린 키를 'key_pressed' 변수에 저장하고 비교합니다. 눌린 키가 '#'이면 change 함수를 호출해 새 비밀번호를 입력받습니다.

key_pressed = keypad_key.getKey();
if (key_pressed == '#') change();

입력된 키들은 'password' 변수에 저장되며 LCD에 표시됩니다. 이 키들을 EEPROM에 저장된 초기 비밀번호와 비교합니다. 일치하면 잠금이 해제되고 "Pass accepted"가 LCD에 출력됩니다. 불일치하면 다시 비밀번호 입력을 요구합니다.

if (key_pressed) {
  password[i++] = key_pressed;
  lcd.print(key_pressed);
}
if (i == 4) {
  delay(200);
  for (int j = 0; j < 4; j++)
    initial_password[j] = EEPROM.read(j);
  if (!(strncmp(password, initial_password, 4))) {
    lcd.clear();
    lcd.print("Pass Accepted");
    digitalWrite(relay_pin, LOW);
    delay(2000);
    ...

'#' 키를 누르면 'change()' 함수가 호출됩니다. 현재 비밀번호를 입력받아 맞으면 새 비밀번호를 입력받아 변경합니다.

void change() {
  int j = 0;
  lcd.clear();
  lcd.print("Current Password");
  lcd.setCursor(0, 1);
  while (j < 4) {
    char key = keypad_key.getKey();
    if (key) {
      new_password[j++] = key;
      lcd.print(key);
    }
    key = 0;
  }
  delay(500);
  ...

태그

4x4 Keypad, Arduino, DC Lock, Keylock, Keypad, LCD, Lock

추천 프로젝트

회로도

올바른 키 조합으로 열 수 있는 솔레노이드 도어락을 아두이노로 제어합니다.

아두이노 기반 키리스 도어락: LCD 디스플레이와 4×4 키패드로 보안 강화

제조공정

  1. 아두이노 나노와 MPU-6050으로 실시간 자이로스코프 게임 만들기
  2. 파이썬 연동 아두이노 RFID 출석 관리 시스템 구축하기
  3. DHT11 온습도 센서 + LED 표시등 + 피에조 부저 프로젝트
  4. 아두이노 우노로 만드는 LCD 애니메이션 & 게임 기초
  5. Unopad: 아두이노 우노로 만드는 에이블턴 라이브용 MIDI 컨트롤러
  6. 아두이노 DHT11 이더넷 실드 온습도 데이터 로거
  7. 아두이노로 간단한 장애물 센서 만들기 - IR LED & 포토다이오드 튜토리얼
  8. 아두이노 우노와 1Sheeld로 만드는 4x4x4 LED 큐브 – 인터랙티브 LED 프로젝트
  9. 아두이노 고속 RPM 카운터 – 레이저 + IR 센서 싱글샷 알고리즘으로 40ms 초고속 측정
  10. 아두이노와 구글 시트로 구현하는 실시간 RFID 출석 시스템