아두이노
🔌 아두이노 인터럽트 기반 LED 타이머 프로젝트
모빌리티키즈
2025. 5. 8. 15:44
728x90
반응형
아두이노의 인터럽트 기능을 활용하여 버튼 입력에 따라 LED를 순차적으로 점등하고 일정 시간이 지나면 초기화하는 타이머 시스템을 만들어 보겠습니다.
1️⃣ 프로젝트 개요
이 프로젝트에서는 스위치를 눌렀을 때 타이머가 시작되고,
- 10초마다 하나씩 LED가 켜짐 (총 4개)
- 40초가 지나면 모든 LED가 켜진 상태 유지
- 50초 후 모든 LED OFF 및 시스템 초기화 이러한 방식으로 버튼을 눌러 타이머를 다시 시작할 수 있는 기능을 구현합니다.
2️⃣ 필요한 부품
- 아두이노 보드 (Uno, Mega 등)
- LED 4개
- 저항 4개 (220Ω)
- 푸시 버튼 (스위치)
- 점퍼 와이어
- 브레드보드
3️⃣ 회로도 및 연결
🖥 회로도 구성:
[LED1] --- (핀 8) --- [저항] --- (GND)
[LED2] --- (핀 9) --- [저항] --- (GND)
[LED3] --- (핀 10) --- [저항] --- (GND)
[LED4] --- (핀 11) --- [저항] --- (GND)
[Button] --- (핀 2, 인터럽트 입력)
🔌 연결 방법:
- LED 연결
- LED의 양극(+)을 아두이노 디지털 핀 8, 9, 10, 11번에 연결합니다.
- LED의 음극(-)을 저항(220Ω)을 거쳐 GND(접지)에 연결합니다.
- 스위치 연결
- 푸시 버튼의 한쪽을 디지털 핀 2에 연결합니다.
- 다른 쪽을 GND(접지)에 연결하여 인터럽트 입력을 받을 수 있도록 합니다.
4️⃣ 소스 코드
📌 코드 설명:
- 스위치가 눌리면 타이머 시작
- 10초마다 하나씩 LED가 켜짐
- 50초 후 모든 LED가 OFF & 초기화
cpp
int pinLED[4] = {8, 9, 10, 11}; // LED 핀 배열
volatile bool startTimer = false; // 인터럽트 발생 여부
unsigned long previousMillis = 0;
int ledIndex = 0; // 켜질 LED 인덱스
void setup() {
Serial.begin(9600);
for (int i = 0; i < 4; i++) {
pinMode(pinLED[i], OUTPUT);
}
pinMode(2, INPUT_PULLUP); // 인터럽트 버튼 연결 (내장 풀업)
attachInterrupt(digitalPinToInterrupt(2), startSequence, FALLING); // 버튼 눌림 감지
}
void startSequence() {
startTimer = true; // 타이머 시작
previousMillis = millis(); // 현재 시간 저장
ledIndex = 0; // LED 인덱스 초기화
}
void loop() {
if (startTimer) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= 10000) { // 10초마다 실행
previousMillis = currentMillis;
if (ledIndex < 4) {
digitalWrite(pinLED[ledIndex], HIGH); // LED 하나씩 켜기
ledIndex++;
} else if (ledIndex == 4 && currentMillis - previousMillis >= 50000) { // 50초 후 초기화
for (int i = 0; i < 4; i++) {
digitalWrite(pinLED[i], LOW); // 모든 LED 끄기
}
startTimer = false; // 타이머 종료
}
}
}
}
5️⃣ 코드 설명
💡 인터럽트 설정 (attachInterrupt())
- attachInterrupt(digitalPinToInterrupt(2), startSequence, FALLING);
- 디지털 핀 2에서 버튼이 눌릴 때 (FALLING) 인터럽트 발생
- 타이머가 시작되면서 LED 점등 순서 실행
⚡ 타이머 (millis() 활용)
- millis() 함수를 사용하여 일정 시간이 지나면 LED를 순차적으로 점등
- 10초마다 LED 하나씩 켜짐 → 40초 동안 4개 모두 켜짐
- 50초 후 모든 LED가 OFF되며 시스템이 초기화
🔄 인터럽트 기반 동작
- 버튼을 눌러야 LED 점등이 시작됨
- 시스템 초기화 후 다시 버튼을 눌러야 재작동
6️⃣ 실행 과정
🔹 타이머 시작 (버튼 눌림 감지)
[ 스위치 눌림 → 타이머 시작 ]
🔹 10초마다 하나씩 LED가 켜짐
10초 → LED1 ON
20초 → LED2 ON
30초 → LED3 ON
40초 → LED4 ON
🔹 50초 후 모든 LED가 OFF & 초기화
[ 50초 → 모든 LED OFF & 시스템 초기화 ]
🎯 마무리
이번 프로젝트에서는 아두이노의 인터럽트 기능을 활용한 LED 타이머 시스템을 구현해 보았습니다. 이 시스템을 확장하여 가변 저항을 추가해 점등 속도 조절, 모터 연동, 신호음 출력 같은 다양한 기능을 추가할 수도 있습니다!
📢 더 궁금한 점이 있다면 언제든지 알려주세요! 🚀😊
728x90
반응형