-
아두이노 프로젝트 | 디지털 도어락Technology/Arduino 2024. 6. 28. 18:00
1. 디지털 도어락
디지털 도어락 일상에서 쉽게 발견할 수 있는 디지털 도어락을 아두이노 플랫폼으로 구현해보자. 구현하고자 하는 디지털 도어락은 키패드와 수동 피에조 부저, LCD I2C 모듈로 구성되어 있다. 키패드 버튼을 누를 때마다 피에조 부저에서 소리가 나며, 키패드에서 누른 숫자나 기호는 LCD I2C 모듈에서 확인할 수 있다. 키패드에서 연속으로 누른 아홉 자리 버튼이 프로그램에 내장된 암호와 동일하지 않다면, 오답 알림음과 함께 LCD I2C 모듈에 'Incorrect' 문자열이 출력되고 초기 상태로 돌아간다. 만약 프로그램에 내장된 암호와 동일하다면, 정답 알림음과 함께 LCD I2C 모듈에 'Correct' 문자열이 출력되고 초기 상태로 돌아가도록 프로그램을 작성해보자.
2. 프로젝트
2.1. 회로 구성
회로 구성 1602 데이터버스 캐릭터LCD (화이트/블루)
아두이노 호환 16×2 캐릭터 LCD 모듈 / 문자 : White / 백라이트 : Blue / 데이터버스를 통해 제어합니다. / 80mm×36mm / 재고소진시 납기 2주정도 소요됩니다.
www.devicemart.co.kr
만능 멤브레인 키패드 4X4-D
초슬림 메탈돔 방식의 멤브레인 키패드 입니다. 양면테이프가 있어 어디에든 부착이 쉬우며, 케이블이 얇아 작은 틈으로 활용이 좋습니다.
www.devicemart.co.kr
IMT12D2001AP
세라믹 부저 /HC12G-P series (원래 제품명) 피에조 부조 / PIEZO(DIP) / 30mA / 2048Hz / 85dB / 12mm(D)x8.5mm(H) / 수동소저 제품입니다.
www.devicemart.co.kr
2.2. 프로그램 작성
#include <LiquidCrystal_I2C.h> // LCD I2C 라이브러리 추가 #include <Keypad.h> // 키패드 라이브러리 추가 // LCD라는 이름의 LCD I2C 객체 생성 LiquidCrystal_I2C LCD(0x20, 16, 2); // I2C 주소, 열과 행의 개수 입력 const byte Rows = 4; // 바이트 변수 선언 후 키패드 행의 개수로 초기화 const byte Cols = 4; // 바이트 변수 선언 후 키패드 열의 개수로 초기화 // 문자형 2차원 배열 선언 후 키패드 값으로 초기화 char KeyValues[Rows][Cols] = { '1','2','3','A', '4','5','6','B', '7','8','9','C', '*','0','#','D' }; // 바이트 배열 선언 후 키패드 행 단자와 연결된 디지털 입출력 핀으로 초기화 byte RowPins[Rows] = {12, 11, 10, 9}; // 바이트 배열 선언 후 키패드 열 단자와 연결된 디지털 입출력 핀으로 초기화 byte ColPins[Cols] = {8, 7, 6, 5}; // UserKeypad라는 이름의 키패드 객체를 생성 Keypad UserKeypad = Keypad(makeKeymap(KeyValues), RowPins, ColPins, Rows, Cols); String Password = "20231106*"; // 문자열 변수 선언 후 암호로 초기화 String Entered = ""; char CustomKey; int Count = 0; int Buzzer = 2; // 정수형 변수 선언 후 디지털 핀 번호 2로 초기화 void setup() { LCD.init(); // LCD 사용 시작 LCD.backlight(); // LCD 백라이트 켜기 pinMode(Buzzer, OUTPUT); // 디지털 2번 핀을 출력(OUTPUT) 모드로 설정 } void loop() { LCD.setCursor(0, 0); // LCD 커서를 0열 0행으로 이동 LCD.print("Enter Password:"); // LCD에 문자열 출력 CustomKey = UserKeypad.getKey(); // 키패드에서 눌린 스위치에 해당하는 키패드 값 저장 if (CustomKey != NO_KEY) // 변수에 저장된 값이 NO_KEY가 아닐 경우 실행 { tone(Buzzer, 392); // 디지털 2번 핀에 주파수 392 Hz인 디지털 신호 출력 Entered += CustomKey; // 키패드 값을 문자열 변수에 누적하여 저장 LCD.setCursor(Count, 1); // LCD 커서를 Count열 0행으로 이동 LCD.print(CustomKey); Count += 1; // 변수에 저장된 값을 1 더한 후 저장 noTone(Buzzer); // 디지털 2번 핀에 디지털 신호 미출력 } if (Count == 9) // 변수에 저장된 값이 9일 경우 실행 { delay(500); // 500 ms 대기 LCD.clear(); // LCD에 출력된 문자열을 모두 삭제 LCD.setCursor(0, 0); if (Entered == Password) // 변수에 저장된 문자열이 암호와 동일할 경우 실행 { Correct_Sound(Buzzer); // Correct_Sound 함수 실행 LCD.print("Correct"); } else { Wrong_Sound(Buzzer); // Wrong_Sound 함수 실행 LCD.print("Incorrect"); } delay(1000); LCD.clear(); Count = 0; } } // 정답 알림음 void Correct_Sound(int Buzzer) { int Note[5] = {262, 294, 330, 349, 1397}; // 정수형 배열 선언 후 음계 정보를 저장 delay(100); noTone(Buzzer); delay(500); for (int i = 0; i < 6; i++) { tone(Buzzer, Note[i]); delay(100); } noTone(Buzzer); delay(500); } // 오답 알림음 void Wrong_Sound(int Buzzer) { noTone(Buzzer); delay(500); tone(Buzzer, 349); delay(100); noTone(Buzzer); delay(100); tone(Buzzer, 349); delay(1000); noTone(Buzzer); delay(500); }
[함께 읽으면 좋은 페이지]
아두이노 | 피에조 부저
1. 피에조 부저 압전 효과(piezoelectric effect)는 수정이나 세라믹 같은 결정체에 압력을 가했을 때 전압이 발생하는 현상이다. 반대로 결정체에 전압을 가하면 물리적인 변형을 일으킬 수 있는데,
vedacube.tistory.com
아두이노 I2C 통신 | LCD I2C 모듈
1. I2C 통신 두 장치가 일대일로 통신하는 시리얼 통신과는 다르게, I2C(Inter-Integrated Circuit) 통신은 한 컨트롤러(master)에 여러 개의 주변 장치(slave)를 연결하여 신호를 주고 받는다. I2C 통신은 데
vedacube.tistory.com
아두이노 라이브러리 | 키패드
1. 키패드 여러 개의 스위치로부터 디지털 신호를 받기 위해서는 스위치 개수만큼의 디지털 입력 핀이 필요하다. 스위치 16개로 구성된 패드가 있다면 16개의 디지털 입력 핀이 필요한 셈이다.
vedacube.tistory.com
참고문헌
- DroneBot Workshop. (2020). Using Keypads with Arduino - Build and Electronic Lock. YouTube. https://www.youtube.com/watch?v=vl1-R6NsejM. 2023.11.06.
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 | 온도센서 LM35 (0) 2024.07.12 아두이노 | 온도센서 TMP36 (1) 2024.07.05 아두이노 라이브러리 | 키패드 Keypad.h (0) 2024.06.21 아두이노 I2C 통신 | LCD I2C 모듈 LiquidCrystal_I2C.h (1) 2024.06.14 아두이노 라이브러리 | LCD 모듈 LiquidCrystal.h (0) 2024.04.12