초음파 거리 센서로 만드는 인터랙티브 아두이노 MP3 플레이어
프로젝트 개요
아두이노 우노, Catalex 시리얼 MP3 플레이어 모듈, HC-SR04 초음파 센서를 조합해 거리 기반 인터랙티브 MP3 플레이어를 제작합니다. 세 가지 버전으로 발전시키며 단순 거리 트리거부터 움직임 방향 감지까지 구현합니다.
필요 부품
- 아두이노 우노 × 1
- Catalex 시리얼 MP3 플레이어 모듈 × 1 (마이크로 SD 카드 및 리더기 필요)
- HC-SR04 초음파 센서 × 2 (버전 3용)
- 3.5mm 잭 입력 스피커 × 1
핵심 라이브러리 및 함수
Catalex MP3 플레이어 제어
SoftwareSerial 라이브러리만 필요합니다. 주요 명령어:
CMD_PLAY_WITHFOLDER (0x0F): 폴더 내 곡 재생 (데이터: 폴더 번호 + 곡 번호)
CMD_SEL_DEV (0x09): 저장 장치 선택 (TF 카드: 0x02)
- 그 외 볼륨 조절, 재생/일시정지, 다음/이전 곡 등
명령 전송 함수 sendCommand()는 8바이트 프로토콜(시작 0x7E, 버전 0xFF, 길이 0x06, 명령, 피드백 플래그, 데이터 상위/하위 바이트, 종료 0xEF)을 사용합니다.
HC-SR04 거리 측정
라이브러리 불필요. 트리거 핀에 10µs 펄스 전송 후 에코 핀의 HIGH 지속 시간 측정하여 거리 계산:
distance = (duration / 2) / 29.1; // cm 단위
구현 버전별 상세
버전 1: 단순 거리 트리거
거리가 50cm 미만이면 지정된 곡(2번 폴더 3번 트랙) 재생. 룸메이트 놀래키기용으로 활용 예시.
void loop() {
if (measureDistance() < 50) {
sendCommand(CMD_PLAY_WITHFOLDER, 0x0203);
delay(1000);
}
delay(300);
}
버전 2: 변화량 기반 트리거 (Disturbance Detection)
절대 거리가 아닌 연속 측정값의 차이(gap)가 20cm 이상일 때 트리거. 잘못된 트리거 방지를 위해 첫 측정값 안정화 로직 포함.
long Distance, auxDistance, gap = 0;
int firstTime = 0;
void loop() {
Distance = measureDistance(trigPin, echoPin);
gap = abs(Distance - auxDistance);
if (firstTime == 0) {
auxDistance = Distance; gap = 0; firstTime++; delay(1000);
}
if (gap > 20) {
sendCommand(CMD_PLAY_WITHFOLDER, 0x0201);
firstTime = 0; delay(2000);
}
auxDistance = Distance; delay(300);
}
버전 3: 듀얼 센서로 방향 감지
두 개의 HC-SR04를 좌우에 배치해 움직임 방향 판별. 첫 번째 센서만 변화하면 '오른쪽 이동(Hello)', 두 번째 센서만 변화하면 '왼쪽 이동(Bye)'로 다른 곡 재생.
- 센서 1: trigPin 13, echoPin 12
- 센서 2: trigPin2 10, echoPin2 9
measureDistance(trigger, echo) 함수로 핀 인자화
- 각 센서별 gap 계산 후
gap > 20 && gap2 < 20 조건으로 방향 판단
회로도
- 단일 센서 구성: MP3 모듈 RX/TX → 아두이노 D5/D6, 초음파 센서 → D13/D12
- 듀얼 센서 구성: 두 번째 센서 D10/D9 추가
완성 코드
각 버전별 완전한 .ino 코드가 제공되며, SoftwareSerial 기반 MP3 제어와 초음파 측정 로직이 통합되어 있습니다. 시리얼 모니터로 디버깅 출력 포함.
응용 아이디어
- 현관문 인사말 재생 (방향 감지로 입/퇴실 구분)
- 전시장 작품 설명 자동 재생
- 반려동물 움직임 감지 알림
- 인터랙티브 아트 설치