업데이트: 웃는 유령 버전(조명 없이 웃음소리만) ZIP 파일과 추가 배터리 팩 구성 추가.
할로윈 때 현관문 다가오는 손님들을 놀래키기 위해 정원에 숨길 소형 오디오 박스 여러 개를 만들었습니다. 이 프로젝트는 그중 가장 복잡한 버전으로, 공포 사운드트랙 재생 + 2가지 시각 효과(백색 스트로브, 적색 블러드 시퀀스)를 동기화합니다.
원리는 Kristian Blåsol의 릴레이로 MP3 앰프 버튼 제어 아이디어를 차용했습니다. 목표: 저렴하게(약 $25 이하), 커스터마이징 가능하게, 하루 야외 방수 가능하게 만드는 것.
12V 외부 전원 사용(실외 콘센트 활용). 밝은 12V LED(2A 소모) 구동 위해 12V 라인을 릴레이로 스위칭. 5V 배터리(AA 홀더 또는 5000mAh 파워뱅크)로도 거의 수정 없이 동작 가능. (장시간 사용 시 아두이노 5V 레귤레이터가 MP3 모듈 대음량 재생 전류를 못 버텨 리셋 발생 → 별도 5V 전원 추가로 해결)
1부: 하드웨어 제작
아두이노 UNO가 릴레이 4채널을 통해 MP3 모듈의 재생/일시정지 버튼과 이전 트랙 버튼을 시뮬레이션(누름)하고, 나머지 2채널로 외부 12V LED 전원 제어.
제어 배선: 30AWG 연선 100mm
12V 전력선: 18AWG
뚜껑 분해 용이하도록 PIR 센서는 암 커넥터, 스피커는 나사 단자 연결
회로도대로 배선: 12V 입력 → 커넥터 → 릴레이 COM → LED +극 출력, -극은 직결
케이스 가공: 32mm 홀(중앙, 스피커), 16mm 홀(상단 옆, PIR 센서). 전체 블랙 스프레이로 도장해 기판 LED 빛 새나감 방지.
스피커 방수: 자전거 튜브 패치로 외부 마감 후 볼트 체결. PIR 센서는 에폭시 수지로 고정(글루건은 물 샘).
2부: 사운드 소스
Audacity로 편집. 소스/크레딧: 비명 소리, 소름 끼치는 웃음, "I see you", 돌 밟는 소리.
3부: 타이밍 설정
오디오 파일과 릴레이 스위칭 타이밍이 동기화돼 있습니다. 다른 음원 사용 시 코드 내 딜레이 값을 테스트하며 조정하세요.
4~5부: 실전 테스트 및 최종 완성
소스 코드
// 핀 할당
int pirSENSOR = 2; // PIR 센서 (HIGH = 모션 감지)
int previousBUTTON = 3; // MP3 모듈 '이전 트랙' 버튼 (릴레이)
int playBUTTON = 4; // MP3 모듈 '재생/일시정지' 버튼 (릴레이)
int whiteLED = 5; // 백색 스트로브 LED (릴레이)
int redLED = 6; // 적색 블러드 시퀀스 LED (릴레이)
int statusLED = 10; // 상태 표시 LED
void setup() {
pinMode(pirSENSOR, INPUT);
pinMode(previousBUTTON, OUTPUT);
pinMode(playBUTTON, OUTPUT);
pinMode(whiteLED, OUTPUT);
pinMode(redLED, OUTPUT);
pinMode(statusLED, OUTPUT);
// 릴레이 HIGH = OFF (개방) 인 경우
digitalWrite(previousBUTTON, HIGH);
digitalWrite(playBUTTON, HIGH);
digitalWrite(whiteLED, HIGH);
digitalWrite(redLED, HIGH);
}
void loop() {
if (digitalRead(pirSENSOR) == HIGH) {
// 1. 사운드 재생 시작 (이전 트랙 버튼 누르기로 처음부터 재생)
digitalWrite(previousBUTTON, LOW); delay(100);
digitalWrite(previousBUTTON, HIGH); delay(100);
// 2. 백색 LED 스트로브 - 주목 유도
digitalWrite(whiteLED, LOW); delay(1000);
digitalWrite(whiteLED, HIGH); delay(500);
digitalWrite(whiteLED, LOW); delay(500);
digitalWrite(whiteLED, HIGH); delay(9000);
// 3. "I see you" 구간 - 빠른 점멸
digitalWrite(whiteLED, LOW); delay(500);
digitalWrite(whiteLED, HIGH); delay(100);
digitalWrite(whiteLED, LOW); delay(500);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(500);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(300);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(300);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(300);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(300);
digitalWrite(whiteLED, HIGH); delay(6000);
// 4. 아이들 소리 구간
digitalWrite(whiteLED, LOW); delay(300);
digitalWrite(whiteLED, HIGH); delay(1000);
digitalWrite(whiteLED, LOW); delay(100);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(100);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(100);
digitalWrite(whiteLED, HIGH); delay(300);
digitalWrite(whiteLED, LOW); delay(100);
digitalWrite(whiteLED, HIGH); delay(1000);
digitalWrite(whiteLED, LOW); delay(600);
digitalWrite(whiteLED, HIGH); delay(1400);
digitalWrite(whiteLED, LOW); delay(100);
digitalWrite(whiteLED, HIGH); delay(7000);
// 5. 비명/블러드 시퀀스 - 적색 LED
digitalWrite(redLED, LOW); delay(3000);
digitalWrite(redLED, HIGH); delay(100);
// 6. 사운드 정지
digitalWrite(playBUTTON, LOW); delay(100);
digitalWrite(playBUTTON, HIGH); delay(60000); // 1분 쿨다운
} else {
digitalWrite(statusLED, HIGH); // 대기 중 표시 (일부 파워뱅크 슬립 방지용 미세 전류 소모)
}
}
회로도 및 참고 파일
※ 회로도에는 배터리 팩 1개만 표시됐으나, 실제로는 MP3 모듈용 별도 5V 배터리 팩 추가함.