아두이노 - 키패드 | Arduino - Keypad

키패드는 도어락, ATM, 계산기 등 많은 기기에서 널리 사용됩니다. 이 튜토리얼에서 우리는 다음을 배우게 됩니다:

준비물

1×Arduino Uno Amazon
1×USB 2.0 cable type A/B 쿠팡 | Amazon
1×Keypad 3x4 and 4x4 Kit 쿠팡 | Amazon
1×(Alternative) Keypad 3x4 쿠팡 | Amazon
1×(Alternative) Keypad 4x4 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) 9V Power Adapter for Arduino Amazon
1×(Recommended) Screw Terminal Block Shield for Arduino Uno 쿠팡 | Amazon
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

키패드 정보

Keypad

키패드는 행과 열(매트릭스라고 함)로 배열된 일련의 버튼 세트입니다. 각 버튼을 키라고 합니다.

키패드에는 여러 가지 종류가 있습니다. DIY 프로젝트에 인기 있는 두 가지 유형은 키패드 3x4(12개의 키)와 키패드 4x4(16개의 키)입니다.

핀 배치

키패드 핀은 두 그룹으로 나뉩니다: 행과 열.

3x4 키패드는 7개의 핀을 가지고 있습니다: 4개의 행 핀(R1, R2, R3, R4)과 3개의 열 핀(C1, C2, C3).

4x4 키패드는 8개의 핀을 가지고 있습니다: 4개의 행 핀(R1, R2, R3, R4)과 4개의 열 핀(C1, C2, C3, C4).

Keypad Pinout

작동 원리

이 섹션에는 압도될 수 있는 고급 정보가 포함되어 있습니다. 내용에 대해 확신이 없다면 건너뛰어 다음 섹션으로 이동하십시오.

키 입력을 감지하는 과정을 키패드 스캐닝이라고 합니다.

그것은 키 하나하나를 확인하기 때문에 "스캐닝"이라고 불립니다.

로우 핀(row-pins)은 아두이노(Arduino)의 출력 핀(output pins)에 연결됩니다.

열 핀은 아두이노의 입력 핀(INPUT_PULLUP, 이 상태에서 키가 눌리지 않으면 입력 핀의 값은 HIGH임)에 연결됩니다.

각 줄마다:

  • 모든 행 핀을 HIGH로 설정합니다.
  • 현재 행 핀만 LOW로 설정합니다.
  • 각 열의 상태를 읽습니다.
    • 만약 열 핀이 HIGH이면 ⇒ (행, 열)에 있는 키가 눌리지 않았습니다.
    • 만약 열 핀이 LOW이면 ⇒ (행, 열)에 있는 키가 눌렸습니다.
  • 위의 과정을 다음 행 핀에 대해 반복합니다.

※ NOTE THAT:

위는 키패드를 스캔하는 방법 중 하나입니다. 모든 HIGH LOW로, 모든 LOW HIGH로 반전시켜 키패드를 스캔할 수 있습니다.

키패드가 행렬로 배열되고 연결되는 이유는 무엇인가요? 이것은 스캐닝 과정을 복잡하게 만듭니다. 각 키를 독립적인 버튼으로 사용하면, 버튼의 상태를 읽음으로써 키의 상태를 간단히 결정할 수 있는데 왜 그렇게 하지 않나요?

우리가 알다시피, 독립적인 버튼은 아두이노의 핀 하나와 GND가 필요합니다. 예로 4x4 키패드를 들어봅시다. 각 키를 독립적인 버튼으로 생각한다면, 16개의 키에 아두이노 핀 16개와 GND 핀이 필요합니다. 만약 연결된 키를 행렬 형태로 배열한다면, 아두이노의 핀 8개만 사용하면 되므로 아두이노의 핀을 절약할 수 있습니다. 간단히 말해서, 답은 아두이노 핀을 절약하기 위해서입니다.

선연결

Arduino Keypad Wiring Diagram

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

키패드를 위한 프로그래밍 방법

Keypad 라이브러리 덕분에, 키패드가 어떻게 작동하는지 이해하든 말든, 아두이노와 키패드를 사용하는 것이 아주 쉽습니다.

아두이노 코드

키패드 3x4

#include <Keypad.h> const int ROW_NUM = 4; //네 개의 행 const int 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 ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); } }

키패드 4x4

#include <Keypad.h> const int ROW_NUM = 4; //네 줄 const int COLUMN_NUM = 4; //네 칼럼 char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3', 'A'}, {'4','5','6', 'B'}, {'7','8','9', 'C'}, {'*','0','#', 'D'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //키패드의 행 핀아웃에 연결 byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //키패드의 열 핀아웃에 연결 Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); } }

사용 방법

  • Arduino IDE의 왼쪽 바에 있는 Libraries 아이콘으로 이동하세요.
  • “키패드”를 검색한 후, Mark Stanley, Alexander Brevig가 만든 키패드 라이브러리를 찾으세요.
  • 키패드 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
Arduino keypad library
  • 위의 코드를 복사하고 Arduino IDE로 열기
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino에 업로드하기
  • 시리얼 모니터 열기
  • 키패드에서 몇 가지 키를 누르기
  • 시리얼 모니터에서 결과를 확인하기
COM6
Send
3 6 9 4 * #
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

키패드와 비밀번호

키패드의 인기 있는 사용례 중 하나는 비밀번호 입력입니다. 이 사용례에서, 우리는 두 개의 특별한 키를 지정합니다:

  • 비밀번호 입력을 시작/재시작하는 키. 예를 들어, 키 "*"
  • 비밀번호 입력을 종료하는 키. 예를 들어, 키 "#"

비밀번호는 선택된 두 개의 특수 키를 제외한 나머지 키들을 포함하는 문자열이 될 것입니다.

키가 눌렸을 때.

  • 키가 "*" 또는 "#"이 아니면, 키를 사용자의 입력 비밀번호 문자열에 추가합니다.
  • 키가 "#"이면, 사용자의 입력 비밀번호 문자열을 비밀번호와 비교하여 입력 비밀번호가 올바른지 확인한 다음 사용자의 입력 비밀번호 문자열을 지웁니다.
  • 키가 "*"이면, 사용자의 입력 비밀번호 문자열을 지웁니다.

키패드 - 비밀번호 코드

/* * 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino/arduino-keypad */ #include <Keypad.h> const int ROW_NUM = 4; //네 개의 행 const int 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 = "1234"; // 여기서 비밀번호를 변경하세요 String input_password; void setup(){ Serial.begin(9600); input_password.reserve(32); // 최대 입력 문자 수는 33개임, 필요시 변경 } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); if(key == '*') { input_password = ""; // 입력 비밀번호 지우기 } else if(key == '#') { if(password == input_password) { Serial.println("password is correct"); // 여기서 작업 수행 } else { Serial.println("password is incorrect, try again"); } input_password = ""; // 입력 비밀번호 지우기 } else { input_password += key; // 입력 비밀번호 문자열에 새 문자 추가 } } }
  • 위 코드를 실행하세요
  • 시리얼 모니터를 엽니다
  • "123456" 키를 누르고 "#"를 누르세요
  • "1234" 키를 누르고 "#"를 누르세요
  • 시리얼 모니터에서 결과를 확인하세요
COM6
Send
password is incorrect, try again password is correct
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

동영상

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

도전해보세요

  • 키패드의 눌린 키를 LCD에 표시하세요. 힌트: Arduino - LCD를 참고하세요.
  • 키패드를 사용하여 패스워드 보호가 있는 도어락을 만드세요.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!