중급⏱ 예상 시간: 50분📝 4단계
버튼 비밀번호 도어락
3개 버튼의 조합으로 비밀번호를 입력하면 서보모터가 잠금을 해제하는 도어락을 만들어봅니다.
🧩 필요한 모듈
Arduino Uno
브레드보드
택트 스위치 (버튼)
피에조 부저
점퍼 와이어
LED
저항 (220Ω / 10kΩ)
서보모터 (SG90)
📖 단계별 설명서
1단계준비물 확인
다음 부품들을 준비해주세요:
- Arduino Uno 1개
- 브레드보드 1개
- 점퍼 와이어 10개 이상
- 택트 스위치(버튼) 3개
- 서보모터 (SG90) 1개
- 피에조 부저 1개
- LED 2개 (초록, 빨강)
- 220Ω 저항 2개
- 10kΩ 저항 3개
💡 팁: 서보모터에 종이로 만든 잠금 장치를 붙이면 실제 도어락처럼 보입니다!
2단계회로 연결하기
- 버튼 3개를 D2, D3, D4 핀에 각각 풀다운 저항(10kΩ)과 함께 연결합니다.
- 서보모터의 신호선을 D9에, 전원을 5V와 GND에 연결합니다.
- 초록 LED를 D7에, 빨강 LED를 D8에 220Ω 저항과 함께 연결합니다.
- 피에조 부저를 D10에 연결합니다.
📐 회로도
회로도 이미지
/images/projects/servo-door-lock-circuit.png
💡 팁: 서보모터는 전류가 많이 필요하므로, 아두이노의 5V 핀에 직접 연결하세요.
3단계코드 작성하기
비밀번호 시퀀스를 배열에 저장하고, 버튼 입력이 일치하면 서보모터로 잠금을 해제합니다.
code.ino
#include <Servo.h>
Servo lockServo;
const int BTN_PINS[] = {2, 3, 4};
const int GREEN_LED = 7;
const int RED_LED = 8;
const int SERVO_PIN = 9;
const int BUZZER = 10;
int password[] = {0, 2, 1}; // 비밀번호: 1번→3번→2번 버튼
int inputIndex = 0;
bool locked = true;
void setup() {
for (int i = 0; i < 3; i++) pinMode(BTN_PINS[i], INPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
lockServo.attach(SERVO_PIN);
lockServo.write(0); // 잠금 위치
digitalWrite(RED_LED, HIGH);
Serial.begin(9600);
Serial.println("도어락 준비 완료!");
}
void loop() {
for (int i = 0; i < 3; i++) {
if (digitalRead(BTN_PINS[i]) == HIGH) {
delay(200); // 디바운싱
tone(BUZZER, 1000, 100);
if (password[inputIndex] == i) {
inputIndex++;
Serial.print("올바른 입력! (");
Serial.print(inputIndex);
Serial.println("/3)");
if (inputIndex >= 3) {
// 잠금 해제!
locked = false;
lockServo.write(90);
digitalWrite(GREEN_LED, HIGH);
digitalWrite(RED_LED, LOW);
tone(BUZZER, 2000, 500);
Serial.println("=== 잠금 해제! ===");
delay(5000); // 5초 후 다시 잠금
lockServo.write(0);
digitalWrite(GREEN_LED, LOW);
digitalWrite(RED_LED, HIGH);
locked = true;
inputIndex = 0;
}
} else {
// 틀림 - 초기화
inputIndex = 0;
tone(BUZZER, 200, 500);
Serial.println("비밀번호 틀림! 초기화");
for (int j = 0; j < 3; j++) {
digitalWrite(RED_LED, LOW); delay(100);
digitalWrite(RED_LED, HIGH); delay(100);
}
}
while (digitalRead(BTN_PINS[i]) == HIGH); // 버튼 떼기 대기
}
}
}+47 줄 더 보기
💡 팁: password 배열의 값을 바꾸면 비밀번호를 변경할 수 있어요.
4단계업로드 및 테스트
- 코드를 업로드합니다.
- 비밀번호 순서대로 버튼을 눌러보세요 (1번→3번→2번).
- 올바르게 입력하면 서보모터가 90도로 회전하며 잠금이 해제됩니다!
- 5초 후 자동으로 다시 잠깁니다.
- 비밀번호를 틀리면 빨간 LED가 깜빡입니다.
💡 팁: 시리얼 모니터로 입력 상태를 확인할 수 있어요.