보안은 일상 생활에서 주요 관심사이며 디지털 잠금은 이러한 보안 시스템의 중요한 부분이되었습니다. 이러한 디지털 코드 잠금 중 하나 는 arduino 보드와 매트릭스 키패드를 사용하여이 프로젝트에서 모방되었습니다.
구성품
- Arduino
- 키패드 모듈
- 부저
- 16x2 LCD
- BC547 트랜지스터
- 저항기 (1k)
- 브레드 보드
- 힘
- 전선 연결
이 회로에서는 시스템에 암호를 입력하기 위해 키패드를 인터페이스하기 위해 다중화 기술을 사용했습니다. 여기에서는 16 개의 키가 포함 된 4x4 키패드를 사용합니다. 16 개의 키를 사용하려면 arduino에 연결하기 위해 16 개의 핀이 필요하지만 다중화 기술에서는 16 개의 키를 인터페이스하는 데 8 개의 핀만 사용하면됩니다. 따라서 키패드 모듈을 인터페이스하는 현명한 방법입니다.
멀티플렉싱 기술: 멀티플렉싱 기술은 입력 또는 암호 또는 숫자를 제공하기 위해 마이크로 컨트롤러와 함께 사용되는 핀 수를 줄이는 매우 효율적인 방법입니다. 기본적으로이 기술은 두 가지 방식으로 사용됩니다. 하나는 행 스캔이고 다른 하나는 콜론 스캔입니다. 그러나이 arduino 기반 프로젝트에서 우리는 키패드 라이브러리를 사용했기 때문에이 시스템을위한 다중화 코드를 만들 필요가 없습니다. 입력을 제공하기 위해 키패드 라이브러리 만 사용하면됩니다.
회로 설명
이 프로젝트의 회로는 Arduino, 키패드 모듈, 부저 및 LCD를 포함하는 매우 간단합니다. Arduino는 키패드 모듈에서 암호 가져 오기, 암호 비교, 부저 구동 및 LCD 디스플레이로 상태 전송과 같은 전체 프로세스를 제어합니다. 키패드는 비밀번호를 가져 오는 데 사용됩니다. 부저는 표시에 사용되며 LCD는 상태 또는 메시지를 표시하는 데 사용됩니다. 부저는 NPN 트랜지스터를 사용하여 구동됩니다.
키패드 모듈의 컬럼 핀은 핀 4, 5, 6, 7에 직접 연결되고 행 핀은 arduino uno의 3, 2, 1, 0에 연결됩니다. 16x2 LCD는 4 비트 모드에서 arduino와 연결됩니다. 제어 핀 RS, RW 및 En은 arduino 핀 13, GND 및 12에 직접 연결됩니다. 데이터 핀 D4-D7은 arduino의 핀 11, 10, 9 및 8에 연결됩니다. 그리고 하나의 버저는 BC547 NPN 트랜지스터를 통해 arduino의 핀 14 (A1)에 연결됩니다.
일
우리는 내장 arduino의 EEPROM을 사용하여 암호를 저장했기 때문에이 회로를 처음 실행할 때 내장 arduino의 EEPROM에서 쓰레기 데이터를 읽고 입력 암호와 비교하여 암호가 일치하지 않기 때문에 LCD에 액세스 거부 메시지를 표시합니다. 이 문제를 해결하려면 아래에 주어진 프로그래밍을 사용하여 처음으로 기본 암호를 설정해야합니다.
for (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("Ur 패스 키 입력:"); lcd.setCursor (0,1); for (int j = 0; j <4; j ++) pass = EEPROM.read (j);
Arduino의 EEPROM에 비밀번호“1234”가 설정됩니다.
처음 실행 한 후 프로그램에서 이것을 제거하고 다시 arduino에 코드를 작성하고 실행해야합니다. 이제 시스템이 정상적으로 실행됩니다. 두 번째로 사용한 비밀번호는 이제“1234”입니다. 이제 # 버튼을 눌러 변경 한 다음 현재 비밀번호를 입력 한 다음 새 비밀번호를 입력 할 수 있습니다.
암호를 입력하면 시스템은 입력 한 암호를 arduino의 EEPROM에 저장된 암호와 비교합니다. 일치가 발생하면 LCD에 "액세스 허용"이 표시되고 비밀번호가 잘못되면 LCD에 "액세스 거부"가 표시되고 일정 시간 동안 부저음이 계속 울립니다. 또한 사용자가 키패드에서 아무 버튼이나 누를 때마다 부저음이 한 번 울립니다.
프로그래밍 설명
코드에서 우리는 키패드를 arduino와 인터페이스하기 위해 키패드 라이브러리를 사용했습니다.
#포함
const 바이트 ROWS = 4; // 4 행 const byte COLS = 4; // 4 개의 열 char hexaKeys = {{ '1', '2', '3', 'A'}, { '4', '5', '6', 'B'}, { '7', ' 8 ','9 ','C '}, {'* ','0 ','# ','D '}}; 바이트 rowPins = {3, 2, 1, 0}; // 키패드 바이트의 행 핀아웃에 연결 colPins = {4, 5, 6, 7}; // 키패드의 열 핀아웃에 연결 // 클래스 인스턴스 초기화 NewKeypad Keypad customKeypad = Keypad (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
LCD 인터페이싱을위한 LCD 라이브러리를 포함하고 EEPROM 인터페이싱을 위해 라이브러리 EEPROM.h를 포함한 다음 구성 요소에 대한 변수 및 정의 된 핀을 초기화했습니다.
#define 부저 15 LiquidCrystal lcd (13,12,11,10,9,8); char 암호; 문자 패스, 패스 1; int i = 0; char customKey = 0;
그런 다음 LCD를 초기화하고 설정 기능에서 핀에 방향을 제공합니다.
void setup () {lcd.begin (16,2); pinMode (led, OUTPUT); pinMode (부저, OUTPUT); pinMode (m11, OUTPUT); pinMode (m12, OUTPUT); lcd.print ("전자"); lcd.setCursor (0,1); lcd.print ("키패드 잠금"); 지연 (2000); lcd.clear (); lcd.print ("Ur 패스 키 입력:"); lcd.setCursor (0,1);
이 후 루프 기능에서 키패드를 읽습니다.
customKey = customKeypad.getKey (); if (customKey == '#') change (); if (customKey) {password = customKey; lcd.print (customKey); 삑 하는 소리(); }
그런 다음 문자열 비교 방법을 사용하여 암호를 저장 암호와 비교하십시오.
if (i == 4) {지연 (200); for (int j = 0; j <4; j ++) pass = EEPROM.read (j); if (! (strncmp (password, pass, 4))) {digitalWrite (led, HIGH); 삑 하는 소리(); lcd.clear (); lcd.print ("Passkey Accepted"); 지연 (2000); lcd.setCursor (0,1); lcd.print ("#. 패스 키 변경"); 지연 (2000); lcd.clear (); lcd.print ("패스 키 입력:"); lcd.setCursor (0,1); i = 0; digitalWrite (led, 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 = key; lcd.print (키); void beep () {digitalWrite (buzzer, HIGH); 지연 (20); digitalWrite (부저, LOW); }