중급⏱ 예상 시간: 35분📝 5단계

릴레이 타이머 스위치

버튼을 누르면 릴레이가 설정된 시간만큼 ON되었다가 자동으로 OFF되는 타이머 스위치를 만듭니다.

🧩 필요한 모듈

Arduino Uno
브레드보드
택트 스위치 (버튼)
피에조 부저
점퍼 와이어
LED
릴레이 모듈
저항 (220Ω / 10kΩ)

📖 단계별 설명서

📝

1단계준비물 확인

다음 부품들을 준비해주세요:

  • Arduino Uno 1개
  • 브레드보드 1개
  • 점퍼 와이어 8개
  • 릴레이 모듈 1개
  • 택트 스위치 2개 (시작/시간설정)
  • LED 1개 (릴레이 상태 표시)
  • 피에조 부저 1개
  • 220Ω 저항 1개, 10kΩ 저항 2개
📝

2단계회로 연결하기

  1. 릴레이 모듈의 IN을 D7에, VCC를 5V, GND를 GND에 연결합니다.
  2. 시작 버튼을 D2에 연결합니다 (풀다운 저항 연결).
  3. 시간 설정 버튼을 D3에 연결합니다 (풀다운 저항 연결).
  4. LED를 220Ω 저항을 통해 D13에 연결합니다.
  5. 부저를 D8에 연결합니다.

📐 회로도

회로도 이미지

/images/projects/relay-timer-circuit.png

💡 팁: 릴레이의 COM, NO, NC 단자에는 고전압 장치를 연결할 수 있지만, 이 프로젝트에서는 LED로만 테스트합니다. 고전압은 위험하니 주의하세요!

📝

3단계코드 작성하기

code.ino
const int RELAY = 7;
const int BTN_START = 2;
const int BTN_SET = 3;
const int LED_PIN = 13;
const int BUZZER = 8;

int timerSeconds = 10;  // 기본 10초
bool timerRunning = false;
unsigned long timerStart = 0;

void setup() {
  pinMode(RELAY, OUTPUT);
  pinMode(BTN_START, INPUT);
  pinMode(BTN_SET, INPUT);
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUZZER, OUTPUT);

  digitalWrite(RELAY, LOW);
  Serial.begin(9600);
  Serial.println("Timer Switch Ready");
  Serial.print("Time: ");
  Serial.print(timerSeconds);
  Serial.println("s");
}

void loop() {
  // 시간 설정 버튼: 10초씩 증가 (최대 60초)
  if (digitalRead(BTN_SET) == HIGH && !timerRunning) {
    timerSeconds += 10;
    if (timerSeconds > 60) timerSeconds = 10;
    Serial.print("Time set: ");
    Serial.print(timerSeconds);
    Serial.println("s");
    tone(BUZZER, 2000, 50);
    delay(300);
  }

  // 시작 버튼
  if (digitalRead(BTN_START) == HIGH && !timerRunning) {
    timerRunning = true;
    timerStart = millis();
    digitalWrite(RELAY, HIGH);
    digitalWrite(LED_PIN, HIGH);
    tone(BUZZER, 1000, 200);
    Serial.println("Timer ON!");
  }

  // 타이머 종료 체크
  if (timerRunning) {
    unsigned long elapsed = (millis() - timerStart) / 1000;
    if (elapsed >= (unsigned long)timerSeconds) {
      timerRunning = false;
      digitalWrite(RELAY, LOW);
      digitalWrite(LED_PIN, LOW);
      // 종료 알림음
      for (int i = 0; i < 3; i++) {
        tone(BUZZER, 1500, 150);
        delay(250);
      }
      Serial.println("Timer OFF!");
    }
  }

  delay(50);
}
+47 줄 더 보기
📝

4단계업로드 및 테스트

  1. 코드를 업로드합니다.
  2. 시리얼 모니터를 열어 현재 설정 시간을 확인합니다.
  3. 설정 버튼을 눌러 시간을 변경합니다 (10초 → 20초 → ... → 60초 → 10초).
  4. 시작 버튼을 누르면 릴레이가 ON되고 LED가 켜집니다.
  5. 설정 시간이 지나면 자동으로 OFF되고 부저 알림이 울립니다.
📝

5단계심화 — LCD 카운트다운 표시

LCD를 추가하면 남은 시간을 실시간으로 카운트다운 표시할 수 있습니다.

🎉

축하합니다!

"릴레이 타이머 스위치" 프로젝트를 완성했습니다!