아두이노 Keypad 전자기 잠금장치

이 튜토리얼에서는 키패드, 전자기 잠금장치, 그리고 아두이노를 함께 사용하는 방법을 배울 것입니다. 구체적으로, 사용자가 키패드에 비밀번호를 올바르게 입력하면, 아두이노가 전자기 잠금장치를 켭니다.

이 튜토리얼은 또한 일정 시간 동안 전자 자기 잠금장치를 켜고 delay() 함수를 사용하지 않고 끄는 코드를 제공합니다. 아두이노 코드는 다중 비밀번호도 지원합니다.

아두이노 키패드 electromagnetic lock

준비물

1×아두이노 우노 R3 쿠팡 | 아마존
1×USB 2.0 타입 A-to-B 케이블 (USB-A PC용) 쿠팡 | 아마존
1×USB 2.0 타입 C-to-B 케이블 (USB-C PC용) 아마존
1×키패드 3x4 쿠팡 | 아마존
1×릴레이 아마존
1×점퍼케이블 쿠팡 | 아마존
1×전자기 잠금장치 아마존
1×12V 전원 어댑터 아마존
1×(옵션) DC 커넥터 전원 연결 잭 플러그 소켓 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

키패드 및 전자기 잠금장치에 관하여

키패드와 전자기 잠금장치(핀배열, 작동 원리, 프로그래밍 방법 등)에 대해 잘 모른다면, 다음 튜토리얼에서 배워보세요:

선연결

아두이노 키패드 electromagnetic lock 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

아두이노 코드 - 비밀번호가 올바르면 전자 잠금장치를 켜기

아래 코드는 비밀번호가 맞으면 전자기 자물쇠를 켭니다.

/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-keypad-electromagnetic-lock */ #include <Keypad.h> #define RELAY_PIN A0 // 아두이노 핀을 통해 전자 잠금 장치를 제어합니다 #define ROW_NUM 4 // 행 네 개 #define COLUMN_NUM 3 // 열 세 개 char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //키패드의 행 핀아웃에 연결합니다 byte pin_column[COLUMN_NUM] = {5, 4, 3}; //키패드의 열 핀아웃에 연결합니다 Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "1234"; // 여기에 비밀번호를 변경하세요 const String password_2 = "56789"; // 여기에 비밀번호를 변경하세요 const String password_3 = "901234"; // 여기에 비밀번호를 변경하세요 String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // 최대 비밀번호 크기는 32, 필요에 따라 변경하세요 pinMode(RELAY_PIN, OUTPUT); // 핀을 출력으로 초기화합니다. digitalWrite(RELAY_PIN, HIGH); // 전자 자물쇠를 잠급니다 } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // 입력한 비밀번호를 리셋합니다 } else if (key == '#') { if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("The password is correct => unlock"); digitalWrite(RELAY_PIN, LOW); } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // 입력한 비밀번호를 리셋합니다 } else { input_password += key; // 입력된 비밀번호 문자열에 새 문자를 추가합니다 } } }

사용 방법

  • 아두이노를 USB 케이블을 통해 PC에 연결하십시오
  • 아두이노 IDE를 열고, 올바른 보드와 포트를 선택하십시오
  • 아두이노 IDE 왼쪽 바의 Libraries 아이콘으로 이동하십시오.
  • “keypad”를 검색한 다음, Mark Stanley, Alexander Brevig에 의한 키패드 라이브러리를 찾으십시오
  • 키패드 라이브러리를 설치하려면 Install 버튼을 클릭하십시오.
아두이노 키패드 라이브러리
  • 위의 코드를 복사하고 Arduino IDE로 열기
  • 코드를 Arduino에 업로드하기 위해 Arduino IDE에서 Upload 버튼을 클릭하세요.
아두이노 코딩
  • 8123 키를 누르고 #을 누르세요.
  • 1234 키를 누르고 #을 누르세요.
  • 시리얼 모니터에서 결과와 전자 자물쇠의 상태를 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The password is incorrect, try again The password is correct => unlock
Ln 11, Col 1
Arduino Uno on COM15
2

코드 설명

Arduino 코드에 미리 정의된 권한이 있는 비밀번호들이 있습니다.

사용자가 입력한 비밀번호를 저장하기 위해 문자열을 사용하며, 이를 입력 문자열이라고 합니다. 키패드에서는 두 개의 키(*#)가 특수 용도로 사용됩니다: 비밀번호 지우기 및 비밀번호 종료. 키패드의 키가 눌렸을 때:

  • 누른 키가 두 특수 키가 아닌 경우, 그 키는 입력 문자열에 추가됩니다.
  • 누른 키가 *인 경우, 입력 문자열이 초기화됩니다. 비밀번호 입력을 시작하거나 재시작하는 데 사용할 수 있습니다.
  • 누른 키가 #인 경우:
    • 입력 문자열이 사전에 정의된 비밀번호와 비교됩니다. 사전에 정의된 비밀번호 중 하나와 일치하면 전자 자물쇠가 활성화됩니다.
    • 비밀번호의 정확성에 상관없이 다음 입력을 위해 입력 문자열은 초기화됩니다.

아두이노 코드 - 비밀번호가 맞으면 정해진 시간 동안 전자 잠금장치를 켭니다

아래 코드는 비밀번호가 맞으면 전자 자물쇠를 5초 동안 켭니다. 5초 후에는 전자 자물쇠가 꺼집니다.

/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-keypad-electromagnetic-lock */ #include <Keypad.h> #include <ezOutput.h> #define UNLOCK_TIME 5000 // 밀리초 단위 #define RELAY_PIN A0 // 릴레이를 통해 전자자물쇠를 제어하는 아두이노 핀 #define ROW_NUM 4 // 네 개의 행 #define COLUMN_NUM 3 // 세 개의 열 char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //키패드의 행 핀아웃에 연결 byte pin_column[COLUMN_NUM] = {5, 4, 3}; //키패드의 열 핀아웃에 연결 Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); ezOutput relay(RELAY_PIN); const String password_1 = "1234"; // 여기에 비밀번호를 변경하세요 const String password_2 = "56789"; // 여기에 비밀번호를 변경하세요 const String password_3 = "901234"; // 여기에 비밀번호를 변경하세요 String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // 필요하면 변경하십시오, 최대 비밀번호 크기는 32입니다 relay.high(); // 전자자물쇠를 잠근다 } void loop() { relay.loop(); // 반드시 loop() 함수를 먼저 호출해야 합니다 char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // 입력된 비밀번호를 초기화 } else if (key == '#') { if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("비밀번호가 맞습니다 => 잠금 해제"); relay.high(); // 낮은 펄스를 만들기 전에 높게 설정 relay.pulse(UNLOCK_TIME); // UNLOCK_TIME 기간 동안 전자자물쇠 작동 정지 } else { Serial.println("비밀번호가 틀렸습니다, 다시 시도하세요"); } input_password = ""; // 입력된 비밀번호를 초기화 } else { input_password += key; // 입력 비밀번호 문자열에 새 문자를 추가 } } }

위 코드는 non-blocking 방식으로 시간을 관리하기 쉽게 해주는 ezOutput 라이브러리를 사용한다는 점에 유의하십시오. ezOutput 라이브러리 설치 가이드를 참조하실 수 있습니다.

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.