중급⏱ 예상 시간: 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단계회로 연결하기

  1. 버튼 3개를 D2, D3, D4 핀에 각각 풀다운 저항(10kΩ)과 함께 연결합니다.
  2. 서보모터의 신호선을 D9에, 전원을 5V와 GND에 연결합니다.
  3. 초록 LED를 D7에, 빨강 LED를 D8에 220Ω 저항과 함께 연결합니다.
  4. 피에조 부저를 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. 코드를 업로드합니다.
  2. 비밀번호 순서대로 버튼을 눌러보세요 (1번→3번→2번).
  3. 올바르게 입력하면 서보모터가 90도로 회전하며 잠금이 해제됩니다!
  4. 5초 후 자동으로 다시 잠깁니다.
  5. 비밀번호를 틀리면 빨간 LED가 깜빡입니다.

💡 팁: 시리얼 모니터로 입력 상태를 확인할 수 있어요.

🎉

축하합니다!

"버튼 비밀번호 도어락" 프로젝트를 완성했습니다!