본문 바로가기

카테고리 없음

아두이노와 DF player mini를 사용한 MP3 플레이어

반응형

 

 

안녕하세요, 이 튜토리얼에 오신 것을 환영합니다. 오늘은 아두이노와 DF플레이어 미니 MP3 모듈을 사용하여 mp3 플레이어를 만들어 보겠습니다. DF플레이어 미니는 스피커나 이어폰 잭에 직접 연결할 수 있는 간단한 오디오 출력을 갖춘 작고 저렴한 mp3 모듈입니다.

 

이 모듈은 배터리, 스피커, 푸시 버튼이 부착된 독립형 모듈로 사용하거나 RX/TX(시리얼) 통신이 가능한 마이크로 컨트롤러 또는 Arduino와 같은 개발 보드와 함께 사용할 수 있으므로 간단한 시리얼 명령을 통해 음악을 재생하고 다음 곡 및 이전 곡 재생, 셔플, 현재 재생 중인 곡 일시 정지 등과 같은 다른 기능을 수행할 수 있습니다.

 

이 모듈은 SD카드 슬롯과 함께 제공되며 FAT16, FAT32 파일 시스템을 모두 지원합니다. 

 

DF 플레이어 미니의 일부 기능은 다음과 같습니다.

 

  • 샘플링 속도 지원 8KHz, 11.025KHz, 12KHz, 16KHz, 22.05KHz, 최대 48KHz
  • 24 비트 DAC 출력, 다이나믹 레인지 지원 90dB, SNR 지원 85dBS
  • FAT16, FAT32 파일 시스템 지원, 최대 지원 32GB TF 카드
  • 다양한 제어 모드, 직렬 모드, AD 키 제어 모드
  • 방송 언어 스팟 기능, 재생중인 배경 음악 일시 중지 가능
  • 내장 3W 앰프
  • 오디오 데이터는 폴더별로 정렬되며 최대 100 폴더 지원, 각 폴더는 1000 곡 가까이 할당 가능
  • 30 레벨 볼륨 조정 가능, 10 레벨 EQ 조정 가능.

 

이 튜토리얼의 목표는 푸시 버튼을 사용하여 아두이노가 모듈에 직렬 명령을 전송하고 mp3를 제어하도록 지시하여 아두이노와 함께 이 모듈을 사용하는 방법을 시연하는 것입니다.

 

이를 위해 세 개의 버튼을 사용할 것입니다. 첫 번째 버튼은 이전 곡을 재생할 수 있는 '이전' 버튼 역할을 합니다. 두 번째 버튼은 현재 재생 중인 파일을 '재생/일시정지'하고 세 번째 버튼은 다음 파일을 재생하는 데 사용됩니다. 

 

Schematics

 

 

위에서 볼 수 있듯이 아두이노와 DF플레이어 미니의 연결은 VCC와 GND를 제외한 두 개의 핀만 연결하면 되기 때문에 매우 간단합니다. 모듈의 Rx 핀과 아두이노 사이에 추가된 1k 저항은 노이즈를 줄이기 위해 추가된 것이지만, 모듈 설정에 Rx 라인에 노이즈가 동반되지 않는 경우에는 필요하지 않습니다. 연결 방식은 아래에 설명되어 있습니다. 

 

DFplayer Mini – Arduino  

 

Rx - D11

Tx - D10

VCC - 5v

Gnd - Gnd 

 

연결 상태를 다시 한 번 살펴보고 모든 것이 정상인지 확인합니다. 스위치는 일부러 풀업(또는 다운) 저항 없이 연결했는데, 이는 Arduino 내부 풀업 저항을 활성화하기 위해서입니다. 

 

코드

 

버튼을 누른 것에 따라 아두이노에서 DF플레이어 미니로 명령을 보내기 위해 아두이노 소프트웨어 시리얼 라이브러리를 사용합니다. 하드웨어 시리얼을 사용하여 아두이노에서 DF플레이어 미니로 명령을 보낼 수도 있지만, 아두이노 하드웨어 시리얼 핀(0과 1)은 아두이노가 컴퓨터와 통신하는 데 사용하는 것과 동일한 핀이므로 다른 장치에 연결하면 코드가 원활하게 업로드되지 않을 수 있습니다. 따라서 스트레스 없는 방식으로 통신하기 위해 10번과 11번 핀을 사용하는 소프트웨어 시리얼 라이브러리를 사용하겠습니다.

 

이 튜토리얼의 코드는 간단합니다. DFPlayer mini에는 mp3 플레이어를 제어하는 다양한 기능이 포함된 라이브러리가 있지만 재미와 모듈의 실제 작동 방식을 보여주기 위해 자체 함수를 작성하겠습니다.

 

코드에서 가장 먼저 할 일은 평소처럼 사용할 라이브러리를 포함하는 것이며, 이 경우 소프트웨어 시리얼 라이브러리이며 Rx 및 Tx 핀 (각각 10 및 11)을 선언하는 동안 라이브러리의 객체를 생성합니다. 

 

프로젝트의 전체 코드는 아래에서 확인할 수 있으며 이 튜토리얼의 다운로드 섹션에서 다운로드할 수 있습니다. 

 

 

///              MP3 PLAYER PROJECT
/// http://educ8s.tv/arduino-mp3-player/
//////////////////////////////////////////
#include "SoftwareSerial.h"
SoftwareSerial mySerial(10, 11);
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]
# define ACTIVATED LOW
int buttonNext = 2;
int buttonPause = 3;
int buttonPrevious = 4;
boolean isPlaying = false;
void setup () {
pinMode(buttonPause, INPUT);
digitalWrite(buttonPause,HIGH);
pinMode(buttonNext, INPUT);
digitalWrite(buttonNext,HIGH);
pinMode(buttonPrevious, INPUT);
digitalWrite(buttonPrevious,HIGH);
mySerial.begin (9600);
delay(1000);
playFirst();
isPlaying = true;
}
void loop () { 
 if (digitalRead(buttonPause) == ACTIVATED)
  {
    if(isPlaying)
    {
      pause();
      isPlaying = false;
    }else
    {
      isPlaying = true;
      play();
    }
  }
 if (digitalRead(buttonNext) == ACTIVATED)
  {
    if(isPlaying)
    {
      playNext();
    }
  }
   if (digitalRead(buttonPrevious) == ACTIVATED)
  {
    if(isPlaying)
    {
      playPrevious();
    }
  }
}
void playFirst()
{
  execute_CMD(0x3F, 0, 0);
  delay(500);
  setVolume(20);
  delay(500);
  execute_CMD(0x11,0,1); 
  delay(500);
}
void pause()
{
  execute_CMD(0x0E,0,0);
  delay(500);
}
void play()
{
  execute_CMD(0x0D,0,1); 
  delay(500);
}
void playNext()
{
  execute_CMD(0x01,0,1);
  delay(500);
}
void playPrevious()
{
  execute_CMD(0x02,0,1);
  delay(500);
}
void setVolume(int volume)
{
  execute_CMD(0x06, 0, volume); // Set the volume (0x00~0x30)
  delay(2000);
}
void execute_CMD(byte CMD, byte Par1, byte Par2)
// Excecute the command and parameters
{
// Calculate the checksum (2 bytes)
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
// Build the command line
byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge,
Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte};
//Send the command line to the module
for (byte k=0; k<10; k++)
{
mySerial.write( Command_line[k]);
}
}

 

 

데모  

 

노래가 담긴 SD 카드를 불러와 DF플레이어 미니에 삽입한 다음 코드를 아두이노에 업로드하고 스피커의 전선을 DF플레이어 미니의 스피커 핀에 연결합니다. 연결된 스피커에서 노래가 스트리밍되기 시작하는 소리가 들릴 것입니다. 최종 설정은 아래 이미지와 같아야 합니다. 

 

 

이 튜토리얼의 응용 프로그램 중 일부는 아래에 나열되어 있으며 정말 멋진 것을 만들 수 있는 영감을 얻으시길 바랍니다. 응용 프로그램 화재 경보 음성 안내 요금소 음성 안내 전기, 통신, 금융 비즈니스 홀 음성 안내 다중 채널 음성 경보 또는 장비 작동 안내 음성 이것으로 이 튜토리얼을 마치겠습니다. 어디에서든 막히는 부분이 있으면 댓글 섹션을 통해 언제든지 질문을 보내주세요. 

 

배움을 멈추지 마세요. 본 튜토리얼의 원문은 이 링크를 따라가면 만날 수 있습니다. 

 

읽어주셔서 감사합니다.

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩