아두이노 키패드

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

준비물

1×아두이노 우노 R3 쿠팡 | 아마존
1×USB 2.0 타입 A-to-B 케이블 (USB-A PC용) 쿠팡 | 아마존
1×USB 2.0 타입 C-to-B 케이블 (USB-C PC용) 아마존
1×키패드 3x4 and 4x4 Kit 쿠팡 | 아마존
1×(또는) 키패드 3x4 쿠팡 | 아마존
1×(또는) 키패드 4x4 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 우노용 스크루 터미널 블록 쉴드 쿠팡 | 아마존
1×(추천) Sensors/Servo Expansion Shield for Arduino Uno 쿠팡 | 아마존
1×(추천) 아두이노 우노용 브레드보드 쉴드 쿠팡 | 아마존
1×(추천) 아두이노 우노용 케이스 쿠팡 | 아마존
1×(추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

키패드 정보

키패드

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

키패드에는 여러 가지 종류가 있습니다. 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).

키패드 사용법 핀아웃

작동 원리

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

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

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

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

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

각 줄마다:

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

※ 주의:

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

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

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

선연결

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

이 이미지는 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 IDE로 열기
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino에 업로드하기
  • 시리얼 모니터 열기
  • 키패드에서 몇 가지 키를 누르기
  • 시리얼 모니터에서 결과를 확인하기
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
3 6 9 4 * #
Ln 11, Col 1
Arduino Uno on COM15
2

키패드와 비밀번호

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

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

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

키가 눌렸을 때.

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

키패드 - 비밀번호 코드

/* * 이 아두이노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * 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" 키를 누르고 "#"를 누르세요
  • 시리얼 모니터에서 결과를 확인하세요
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
password is incorrect, try again password is correct
Ln 11, Col 1
Arduino Uno on COM15
2

동영상

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

도전해보세요

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