할로윈용 공포 박스 프로젝트입니다. PIR 센서가 움직임을 감지하면 빨간 눈 LED가 서서히 밝아졌다 꺼지고(깜빡임), 백색 LED가 번개처럼 번쩍이며, MP3 모듈에서 으르렁거리는 소리가 나옵니다. 현관에 놓아두면 트릭오어트리터(사탕 달라는 아이들)를 제대로 놀라게 할 수 있습니다.
1부: PIR 센서 + LED 효과
PIR 센서는 디지털 출력(HIGH/LOW)으로 동작 감지를 알립니다. 아두이노에서 읽어 LED를 PWM으로 페이드 인/아웃 제어합니다.
2부: MP3 모듈 제어
MP3 실드 대신 저가 MP3 플레이어 모듈의 '이전 곡', '일시정지/재생' 버튼에 릴레이를 납땜해 아두이노로 제어합니다. 릴레이가 버튼을 누르는 역할을 합니다. 단일 사운드 반복 재생에 적합합니다.
배선
PIR 센서 OUT → D2
상태 LED (깜빡임용) → D10
눈 LED (PWM) → D9
MP3 '이전 곡' 버튼 → 릴레이 1 → D3
MP3 '일시정지/재생' 버튼 → 릴레이 2 → D4
코드
// 할로윈 공포 박스 - PIR + LED + MP3
// Part 1: https://youtu.be/ZAUXMoygVOU
// Part 2: https://www.youtube.com/watch?v=uR_UTPioQYc
int pirSensor = 2;
int prevPin = 3; // MP3 이전 곡 (릴레이 1)
int pausePin = 4; // MP3 일시정지/재생 (릴레이 2)
int statusLed = 10; // 상태 표시 LED
int eyeLed = 9; // 눈 LED (PWM)
void setup() {
pinMode(pirSensor, INPUT);
pinMode(statusLed, OUTPUT);
pinMode(prevPin, OUTPUT);
pinMode(pausePin, OUTPUT);
pinMode(eyeLed, OUTPUT);
// MP3 모듈 초기 상태: 재생 중지
digitalWrite(prevPin, HIGH);
digitalWrite(pausePin, HIGH);
}
void loop() {
if(digitalRead(pirSensor) == HIGH) {
// === 사운드 트리거 ===
digitalWrite(pausePin, HIGH); delay(100);
digitalWrite(prevPin, LOW); delay(100); // 이전 곡 (첫 곡으로)
digitalWrite(prevPin, HIGH); delay(2000); // 재생 대기
// === 눈 LED 페이드 인 ===
digitalWrite(statusLed, LOW); delay(100);
digitalWrite(statusLed, HIGH);
analogWrite(eyeLed, 0);
for(int i=0; i<255; i++) {
analogWrite(eyeLed, i);
delay(5);
}
// === 상태 LED 깜빡임 (번개 효과 동기) ===
digitalWrite(statusLed, LOW); delay(100);
digitalWrite(statusLed, HIGH); delay(100);
digitalWrite(statusLed, LOW); delay(100);
digitalWrite(statusLed, HIGH); delay(100);
digitalWrite(statusLed, LOW); delay(100);
digitalWrite(statusLed, HIGH); delay(100);
digitalWrite(statusLed, LOW); delay(2000);
// === 눈 LED 페이드 아웃 ===
for(int i=255; i>=0; i--) {
analogWrite(eyeLed, i);
delay(5);
}
digitalWrite(statusLed, HIGH);
analogWrite(eyeLed, 0);
// === 사운드 정지 ===
delay(2000);
digitalWrite(prevPin, HIGH); delay(100);
digitalWrite(pausePin, LOW); delay(100);
digitalWrite(pausePin, HIGH); delay(1000);
} else {
digitalWrite(statusLed, HIGH);
analogWrite(eyeLed, 0);
}
}