아두이노 - 키패드 - 서보 모터 | Arduino - Keypad - Servo Motor
이 튜토리얼에서는 키패드, 서보 모터, 그리고 아두이노를 함께 사용하는 방법을 배우려고 합니다:
- 사용자가 키패드에 인증된 비밀번호를 입력하면 아두이노는 서보 모터를 90도로 회전시킵니다.
- 일정 시간이 지나면 아두이노는 delay() 함수를 사용하지 않고 서보 모터를 다시 0도로 회전시킵니다.
- 아두이노 코드는 여러 개의 비밀번호도 지원합니다.
준비물
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 | × | Servo Motor | 쿠팡 | Amazon | |
1 | × | 5V Power Adapter | Amazon | |
1 | × | DC Power Jack | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (Optional) 9V Power Adapter for Arduino | Amazon | |
1 | × | (Recommended) Screw Terminal Block Shield for Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Breadboard Shield For Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Enclosure For Arduino Uno | Amazon |
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
키패드와 서보 모터에 대하여
키패드와 서보 모터(핀 아웃, 작동 방식, 프로그래밍 방법 등)에 대해 모르신다면, 다음 튜토리얼에서 배우십시오:
- Arduino - Keypad tutorial
- Arduino - Servo Motor tutorial
선연결
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
아두이노 코드 - 비밀번호가 맞으면 서보 모터를 회전시킵니다.
아래 코드는 비밀번호가 맞으면 서보 모터를 5초 동안 90도로 돌립니다. 5초 후에 서보 모터를 0도로 돌립니다.
/*
* 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다
* 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/arduino/arduino-keypad-servo-motor
*/
#include <Keypad.h>
#include <Servo.h>
#define ROW_NUM 4 // 네 개의 행
#define COLUMN_NUM 4 // 네 개의 열
#define SERVO_PIN A0 // 서보 모터에 연결하는 아두이노 핀
Servo servo; // 서보 모터
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 );
const String password_1 = "ABC1234"; // 여기서 비밀번호 변경
const String password_2 = "5642B"; // 여기서 비밀번호 변경
const String password_3 = "9765"; // 여기서 비밀번호 변경
String input_password;
int angle = 0; // 서보 모터의 현재 각도
unsigned long lastTime;
void setup() {
Serial.begin(9600);
input_password.reserve(32); // 최대 비밀번호 크기는 32, 필요시 변경
servo.attach(SERVO_PIN);
servo.write(0); // 서보 모터를 0°로 회전
lastTime = millis();
}
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("비밀번호가 정확합니다, 서보 모터를 90°로 회전합니다");
angle = 90;
servo.write(angle);
lastTime = millis();
} else {
Serial.println("비밀번호가 틀렸습니다, 다시 시도해보세요");
}
input_password = ""; // 입력된 비밀번호 초기화
} else {
input_password += key; // 입력된 비밀번호 문자열에 새 문자 추가
}
}
if (angle == 90 && (millis() - lastTime) > 5000) { // 5초
angle = 0;
servo.write(angle);
Serial.println("서보 모터를 0°로 회전합니다");
}
}
사용 방법
- 아두이노를 USB 케이블을 통해 PC에 연결하세요
- 아두이노 IDE를 열고, 올바른 보드와 포트를 선택하세요
- 아두이노 IDE의 왼쪽 바에 있는 Libraries 아이콘으로 이동하세요.
- “keypad”를 검색한 다음, Mark Stanley, Alexander Brevig이 만든 키패드 라이브러리를 찾으세요
- 키패드 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
- 위의 코드를 복사하여 Arduino IDE로 열기
- 코드를 아두이노에 업로드하려면 아두이노 IDE에서 Upload 버튼을 클릭하세요.
- 12345#를 누르세요.
- 5642B#를 누르세요.
- 시리얼 모니터에서 결과를 확인하고 서보 모터의 상태를 확인하세요.
COM6
The password is incorrect, try again
The password is correct, rotating Servo Motor to 90°
Rotating Servo Motor to 0°
Autoscroll
Clear output
9600 baud
Newline
코드 설명
아두이노 코드에 사전 정의된 승인된 비밀번호들이 있습니다.
사용자가 입력한 비밀번호를 저장하는 데 사용되는 문자열이 있으며, input_password라고 합니다. 키패드에서 두 개의 키(*와 #)는 특별한 용도로 사용됩니다: 비밀번호 지우기와 비밀번호 종료. 키패드의 키를 누르면:
- 눌린 키가 두 개의 특수 키 중 하나가 아니면, 그 키는 input_password에 추가됩니다.
- 눌린 키가 * 일 경우, input_password는 초기화됩니다. 이 기능을 사용하여 비밀번호 입력을 시작하거나 재시작할 수 있습니다.
- 눌린 키가 # 일 경우:
- input_password는 사전에 정의된 비밀번호와 비교됩니다. 사전에 정의된 비밀번호 중 하나와 일치한다면, 서보 모터를 90도 회전시킵니다.
- 비밀번호의 정확성과 관계없이, 다음 입력을 위해 input_password는 초기화됩니다.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.