아두이노 우노 R4 미니 Mp3 플레이어
이 튜토리얼에서는 Arduino Uno R4(WiFi 및 Minima 변형 모두)와 함께 DIYables 미니 Mp3 플레이어 모듈을 사용하는 방법을 배웁니다. 다음 내용을 다룹니다:
- 미니 Mp3 플레이어를 Arduino Uno R4에 배선합니다.
- SD 카드에 저장된 mp3 트랙을 재생합니다.
- 볼륨 높이기 및 낮추기를 포함한 볼륨 조절을 합니다.
- 재생을 일시 정지, 재개, 중지합니다.
- 트랙 탐색(다음 및 이전)을 합니다.
- 단일 트랙 반복, 전체 트랙 반복, 셔플을 합니다.
- 번호가 매겨진 폴더에서 특정 트랙을 재생합니다.
- 재생 상태를 쿼리합니다.

필요한 하드웨어
| 1 | × | Arduino UNO R4 WiFi or Arduino UNO R4 Minima | ||
| 1 | × | (또는) DIYables STEM V4 IoT, Compatible with Arduino Uno R4 WiFi | 쿠팡 | 아마존 | |
| 1 | × | USB 케이블 타입-A to 타입-C (USB-A PC용) | 쿠팡 | 아마존 | |
| 1 | × | USB 케이블 타입-C to 타입-C (USB-C PC용) | 아마존 | |
| 1 | × | DIYables Mini Mp3 Player module | 아마존 | |
| 1 | × | 마이크로 SD 카드 | 아마존 | |
| 1 | × | Speaker | 아마존 | |
| 1 | × | 브레드보드 | 쿠팡 | 아마존 | |
| 1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노 R4용 스크루 터미널 블록 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) Sensors/Servo Expansion Shield for Arduino UNO R4 | 아마존 | |
| 1 | × | (추천) 아두이노 우노 R4용 브레드보드 쉴드 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노 R4용 케이스 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노 R4용 전원 분배기 | 쿠팡 | 아마존 | |
| 1 | × | (추천) 아두이노 우노용 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 |
미니 Mp3 플레이어 모듈에 대하여
DIYables 미니 Mp3 플레이어는 YX5200-24SS 칩을 기반으로 한 소형 mp3 디코더 모듈입니다. 마이크로 SD 카드에서 직접 mp3 파일을 재생하고 내장 앰프를 통해 스피커(최대 3W)를 구동하거나 외부 앰프와 함께 사용하기 위해 DAC 핀을 통해 라인 레벨 오디오를 출력할 수 있습니다.
통신은 9600 보드레이트의 UART를 통해 이루어지므로 모든 Arduino 보드에서 제어하기 쉽습니다. 주요 기능은 다음과 같습니다:
- 재생, 일시 정지, 재개, 중지
- 0~30까지 볼륨 조절
- 6가지 이퀄라이저 프리셋: 일반, 팝, 록, 재즈, 클래식, 베이스
- 트랙 반복, 폴더 반복, 전체 셔플
- 번호가 매겨진 디렉토리로 폴더 기반 재생
- 광고로 재생 중단
- 현재 트랙, 볼륨, 재생 상태 등 쿼리
모듈 핀아웃
| 핀 | 설명 |
|---|---|
| VCC | 전원 입력(3.2V~5.0V) |
| GND | 접지 |
| RX | 시리얼 데이터 입력 — 1K 저항을 통해 Arduino TX에 연결 |
| TX | 시리얼 데이터 출력 — Arduino RX에 연결 |
| SPK_1 | 스피커 양극 단자(직접 구동, 최대 3W) |
| SPK_2 | 스피커 음극 단자(직접 구동, 최대 3W) |
| DAC_R | 오른쪽 채널 라인 출력(외부 앰프용) |
| DAC_L | 왼쪽 채널 라인 출력(외부 앰프용) |
| BUSY | 재생 중 LOW, 유휴 상태 시 HIGH |
| IO_1 | 짧게 누르기 = 이전 트랙, 길게 누르기 = 볼륨 낮추기 |
| IO_2 | 짧게 누르기 = 다음 트랙, 길게 누르기 = 볼륨 높이기 |

배선도
Arduino Uno R4는 5V 로직으로 동작하므로 모듈의 3.3V 입력을 보호하기 위해 모듈의 RX 라인에 1K 저항이 필요합니다.
| 미니 Mp3 플레이어 핀 | Arduino Uno R4 핀 | 참고 |
|---|---|---|
| VCC | 5V | |
| GND | GND | |
| RX | 핀 11 | 1K 저항을 통해(5V 보드에 필요) |
| TX | 핀 10 | |
| SPK_1 | 스피커 + | |
| SPK_2 | 스피커 − |

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
Arduino Uno R4와 기타 부품에 전원을 공급하는 가장 효과적인 방법을 확인하시려면, 아래 링크를 참조하세요: 아두이노 우노 R4 전원 공급 방법.
팁: Uno R4에는 하드웨어 시리얼 포트(핀 0과 1의 Serial1)가 있지만, 핀 0/1은 USB와 공유되므로 핀 10/11에서 SoftwareSerial을 사용하는 것이 더 안전한 방법입니다.
SD 카드 준비
- 마이크로 SD 카드를 FAT16 또는 FAT32로 포맷합니다.
- Mp3 파일을 0으로 채워진 이름을 사용하여 루트 디렉토리에 복사합니다:
- 폴더 기반 재생의 경우, 번호가 매겨진 폴더에 번호가 매겨진 파일을 만듭니다:
주요 사항:
- 트랙 번호는 0이 아닌 1부터 시작합니다.
- 모듈은 파일 이름이 아닌 파일이 복사된 순서에 따라 트랙 순서를 결정합니다. 항상 먼저 카드를 포맷한 다음 원하는 순서대로 한 번에 하나씩 파일을 복사하세요.
- 폴더 이름: 2자리, 0으로 채워짐(01~99).
- 폴더 내 파일 이름: 3자리, 0으로 채워짐(001~255).
라이브러리 설치
- USB-C 케이블을 사용하여 Arduino Uno R4를 컴퓨터에 연결합니다.
- Arduino IDE를 열고 올바른 보드와 포트를 선택합니다.
- 왼쪽 사이드바에서 Libraries 아이콘을 클릭합니다.
- 검색 상자에 "DIYables_MiniMp3"를 입력하고 DIYables의 라이브러리를 찾습니다.
- Install을 클릭하여 라이브러리의 최신 버전을 추가합니다.

이 라이브러리에는 외부 종속성이 없습니다.
Arduino Uno R4 코드 - 단일 트랙 재생
아래 스케치는 SD 카드에서 하나의 mp3 트랙을 재생합니다.
실행 방법
- Mp3 파일(001.mp3, 002.mp3 등)이 있는 SD 카드를 준비하고 모듈에 삽입합니다.
- 배선도에 따라 미니 Mp3 플레이어를 Uno R4에 연결합니다.
- USB-C 케이블로 Uno R4를 컴퓨터에 연결합니다.
- Arduino IDE를 열고 Arduino Uno R4 WiFi(또는 Minima)를 보드로 선택하고 올바른 포트를 선택합니다.
- 위의 코드를 IDE 편집기에 붙여 넣습니다.
- Upload를 누릅니다.
스피커에서 track 001.mp3 소리가 들려야 합니다.
재생 함수 빠른 참조
| 함수 | 역할 | 사용 예 |
|---|---|---|
| play(trackNum) | 특정 트랙을 시작합니다 | mp3.play(1) |
| playNext() | 다음 트랙으로 건너뜁니다 | mp3.playNext() |
| playPrevious() | 이전 트랙으로 돌아갑니다 | mp3.playPrevious() |
| pause() | 현재 트랙을 일시 정지합니다 | mp3.pause() |
| resume() | 일시 정지된 트랙을 재개합니다 | mp3.resume() |
| stop() | 재생을 완전히 중지합니다 | mp3.stop() |
Arduino Uno R4 코드 - 여러 트랙 순차 재생
이 스케치는 각 트랙 사이에 구성 가능한 지연을 두고 여러 트랙을 순서대로 재생합니다.
실행 방법
- SD 카드에 최소 3개의 트랙(001.mp3, 002.mp3, 003.mp3)이 있는지 확인합니다.
- Uno R4에 코드를 업로드합니다.
트랙 1부터 3까지 5초 간격으로 반복 재생됩니다.
Arduino Uno R4 코드 - 버튼으로 볼륨 제어
두 개의 푸시 버튼을 연결하여 실시간으로 볼륨을 높이거나 낮춥니다.
실행 방법
- 코드 주석에 설명된 대로 두 개의 버튼을 연결한 후 업로드합니다.
- 음악이 재생되는 동안 버튼을 눌러 볼륨을 높이거나 낮춥니다. 시리얼 모니터에 현재 레벨이 표시됩니다.
볼륨 함수
| 함수 | 역할 | 사용 예 |
|---|---|---|
| setVolume(level) | 볼륨을 직접 설정합니다(0~30) | mp3.setVolume(25) |
| volumeUp() | 볼륨을 1 높입니다 | mp3.volumeUp() |
| volumeDown() | 볼륨을 1 낮춥니다 | mp3.volumeDown() |
| getVolume() | 현재 볼륨을 반환합니다 | mp3.getVolume() |
Arduino Uno R4 코드 - 다음/이전 트랙 버튼
두 개의 버튼으로 플레이리스트를 앞뒤로 건너뛸 수 있습니다.
실행 방법
- NEXT와 PREV 버튼을 핀 2와 3에 연결합니다.
- 스케치를 업로드하고 버튼을 눌러 트랙을 탐색합니다.
Arduino Uno R4 코드 - 일시 정지 및 재개 토글
단일 버튼으로 재생을 일시 정지와 재생 사이에서 전환합니다.
실행 방법
- 버튼을 핀 2에 연결한 후 업로드합니다.
- 버튼을 한 번 누르면 일시 정지, 다시 누르면 재개됩니다.
Arduino Uno R4 코드 - 트랙 반복
이 스케치는 단일 트랙을 무한 반복합니다.
실행 방법
- 코드를 업로드합니다. track 001.mp3가 계속 반복 재생됩니다.
반복 및 셔플 함수
| 함수 | 역할 | 사용 예 |
|---|---|---|
| loopTrack(trackNum) | 하나의 트랙을 무한 반복합니다 | mp3.loopTrack(1) |
| loopFolder(folder) | 폴더의 모든 트랙을 반복합니다 | mp3.loopFolder(1) |
| loopAll() | 카드의 모든 트랙을 반복합니다 | mp3.loopAll() |
| stopLoop() | 활성 루프를 취소합니다 | mp3.stopLoop() |
| shuffle() | 모든 트랙을 무작위 순서로 재생합니다 | mp3.shuffle() |
Arduino Uno R4 코드 - 폴더에서 재생
SD 카드의 특정 번호가 매겨진 폴더에서 트랙을 재생합니다.
실행 방법
- 번호가 매겨진 파일(001.mp3, 002.mp3)이 있는 폴더(01, 02)로 SD 카드를 설정합니다.
- 스케치를 업로드합니다. 폴더 01에서 트랙을 재생한 다음 폴더 02에서 재생합니다.
폴더 재생 함수
| 함수 | 역할 | 사용 예 |
|---|---|---|
| playFolder(folder, track) | 폴더에서 트랙을 재생합니다(최대 99개 폴더, 255개 트랙) | mp3.playFolder(1, 1) |
| playLargeFolder(folder, track) | 폴더에서 재생합니다(최대 15개 폴더, 3000개 트랙) | mp3.playLargeFolder(1, 1500) |
| playFromMP3Folder(trackNum) | /mp3 폴더에서 재생합니다 | mp3.playFromMP3Folder(1) |
Arduino Uno R4 코드 - 시리얼 모니터 제어
시리얼 모니터에 단일 문자 명령을 입력하여 재생의 모든 측면을 제어합니다. 추가 하드웨어가 필요하지 않습니다.
실행 방법
- 코드를 업로드한 다음 9600 보드레이트로 시리얼 모니터를 엽니다.
- 아래 표의 명령을 입력합니다:
| 키 | 동작 |
|---|---|
| 1–9 | 트랙 번호 1~9 재생 |
| + | 볼륨 높이기 |
| − | 볼륨 낮추기 |
| p | 재생 일시 정지 |
| r | 재생 재개 |
| s | 재생 중지 |
| n | 다음 트랙으로 건너뛰기 |
| b | 이전 트랙으로 돌아가기 |
| ? | 현재 상태 출력 |
이퀄라이저 모드
6가지 내장 EQ 프리셋을 사용할 수 있습니다:
| 상수 | ID | 음향 프로파일 |
|---|---|---|
| DIYables_MiniMp3::EQ_NORMAL | 0 | 플랫/중립 |
| DIYables_MiniMp3::EQ_POP | 1 | 팝 |
| DIYables_MiniMp3::EQ_ROCK | 2 | 록 |
| DIYables_MiniMp3::EQ_JAZZ | 3 | 재즈 |
| DIYables_MiniMp3::EQ_CLASSIC | 4 | 클래식 |
| DIYables_MiniMp3::EQ_BASS | 5 | 베이스 강조 |
재생 상태 쿼리
다음 함수를 사용하여 런타임에 모듈 상태를 읽을 수 있습니다. 각 호출은 응답을 기다리는 동안 최대 100ms 동안 차단됩니다. 반환 값 −1은 오류 또는 타임아웃을 나타냅니다.
| 함수 | 반환 타입 | 설명 |
|---|---|---|
| isPlaying() | bool | 트랙이 활성 재생 중이면 true |
| getVolume() | int16_t | 현재 볼륨 레벨(0~30) |
| getEQ() | int16_t | 활성 EQ 프리셋(0~5) |
| getTrackCount() | int16_t | SD 카드의 트랙 수 |
| getCurrentTrack() | int16_t | 현재 재생 중인 트랙 번호 |
| getFolderCount() | int16_t | SD 카드의 폴더 수 |
| getTrackCountInFolder(folder) | int16_t | 특정 폴더 내의 트랙 수 |