Mp3 Player usando DF Player - detalhes completos do design

Experimente Nosso Instrumento Para Eliminar Problemas





Neste post vamos construir um reprodutor de MP3 usando arduino e DFPlayer. O artigo proposto tem dois designs de MP3 player, um com controle por botão e outro com controle remoto IR. Também daremos uma olhada no DFPlayer (módulo do reprodutor de MP3) e suas especificações.

Todos nós amamos música, gostaríamos de ouvi-la na academia, lendo, momentos antes de dormir ou enquanto nos acalmamos após um dia duro de trabalho.



Construir um reprodutor de música em casa há algumas décadas era quase impossível para um entusiasta da eletrônica, devido à complexidade da construção devido aos componentes mecânicos.

Naquela época, apenas um número limitado de canções podia ser acomodado em uma fita cassete. Replicar uma música para outra fita cassete também foi um pesadelo. Mas agora, graças ao avanço da eletrônica, um MP3 player pode ser feito do zero com o dinheiro do seu bolso.



Agora, vamos passar aos detalhes técnicos do projeto.

O coração do projeto é o DFPlayer, um pequeno módulo de reprodutor de MP3 que pode acomodar um cartão micro SD e pode ser controlado por meio de um microcontrolador.

Ilustração do DFPlayer:

DFPlayer

Possui amplificador embutido que pode acionar alto-falantes de 3 watts em estéreo ou mono. Possui conversor digital para analógico de 24 bits (DAC) que é muito bom para um módulo compacto e de baixo custo.

Vista inferior do DFPlayer:

Vista inferior do DFPlayer

Suporta decodificação de hardware MP3 e WMV. Suporta taxa de amostragem de
8 KHz, 11,025 KHz, 12 KHz, 1 6 KHz, 22,05 KHz, 24 KHz, 32 KHz, 44,1 KHz, 48 KHz.

Ele pode suportar um cartão micro SD de até 32 GB. Ele suporta até 100 pastas, cada pasta pode ser atribuída a até 1000 músicas.

Possui 6 níveis diferentes de equalizador e 30 níveis de controle de ajuste de volume. Pode operar de 3,2 V a 5 V.

Configuração de pinos do DFPlayer:

Configuração de pinos do DFPlayer

As especificações acima são baseadas na folha de dados do DFPlayer.

Você já deve estar familiarizado com o DFPlayer e suas especificações. Você pode comprar este módulo em sites de comércio eletrônico ou no mercado local de eletrônicos.

Agora vamos pular para o diagrama esquemático.

Design do MP3 player com botão de pressão:

Leitor de mp3 usando Arduino e DFPlayer

O circuito acima é muito simples o arduino envia comandos para o módulo DFPlayer para controlar as músicas. O usuário pode inserir sua escolha por meio de botões.

O resistor pull-up embutido do arduino foi ativado no programa, de modo que não precisamos conectar um resistor físico aos botões.

Tente usar alto-falantes de boa qualidade, o DFPlayer pode fornecer um som de muito boa qualidade.

Se você encontrar qualquer distorção no som em níveis de volume mais altos, alimente o módulo DFPlayer externamente em 5 V DC com conexão de terra comum entre o arduino e o DFPlayer.

Se desejar configuração de som estéreo, conecte um dos alto-falantes ao SPK1 do DFPlayer e outro alto-falante ao SPK2 e aterre os fios restantes dos alto-falantes.

Programa para controle de botão de pressão:

//---------Developed by R.Girish------//
#include
SoftwareSerial mySerial(10, 11)
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00
const int btnNext = A0
const int btnPause = A1
const int btnPrevious = A2
const int volumeUP = A3
const int volumeDOWN = A4
int volume = 15
boolean Playing = false
void setup ()
{
pinMode(btnPause, INPUT)
pinMode(btnNext, INPUT)
pinMode(btnPrevious, INPUT)
pinMode(volumeUP, INPUT)
pinMode(volumeDOWN, INPUT)
digitalWrite(btnPause, HIGH)
digitalWrite(btnNext, HIGH)
digitalWrite(btnPrevious, HIGH)
digitalWrite(volumeUP, HIGH)
digitalWrite(volumeDOWN, HIGH)
mySerial.begin(9600)
delay(1000)
playFirst()
Playing = true
}
void loop ()
{
if (digitalRead(btnPause) == LOW)
{
if(Playing)
{
pause()
Playing = false
}
else
{
Playing = true
play()
}
}
if (digitalRead(btnNext) == LOW)
{
if(Playing)
{
next()
}
}
if (digitalRead(btnPrevious) == LOW)
{
if(Playing)
{
previous()
}
}
if(digitalRead(volumeUP) == LOW)
{
volumeINC()
}
if(digitalRead(volumeDOWN) == LOW)
{
volumeDEC()
}
}
void playFirst()
{
exe_cmd(0x3F, 0, 0)
delay(500)
exe_cmd(0x06, 0, volume)
delay(500)
exe_cmd(0x11,0,1)
delay(500)
}
void pause()
{
exe_cmd(0x0E,0,0)
delay(500)
}
void play()
{
exe_cmd(0x0D,0,1)
delay(500)
}
void next()
{
exe_cmd(0x01,0,1)
delay(500)
}
void previous()
{
exe_cmd(0x02,0,1)
delay(500)
}
void volumeINC()
{
volume = volume+1
if(volume==31)
{
volume=30
}
exe_cmd(0x06, 0, volume)
delay(500)
}
void volumeDEC()
{
volume = volume-1
if(volume==-1)
{
volume=0
}
exe_cmd(0x06, 0, volume)
delay(500)
}
void exe_cmd(byte CMD, byte Par1, byte Par2)
{
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2)
byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge, Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte}
for (byte x=0 x<10 x++)
{
mySerial.write(Command_line[x])
}
}
//---------Developed by R.Girish------//

Agora vamos passar para o design baseado em IR remoto.

Esquema para MP3 player controlado por IR:


O design acima é simples, pois o botão de pressão é baseado, a única diferença é a remoção dos botões e a inclusão do receptor TSOP 1738 IR. O sinal recebido do remoto IR é alimentado para o pino A0 do Arduino.

Agora, para controlar este MP3 player, você precisa de uma TV sobressalente ou qualquer outro controle remoto IR que possa estar na sua caixa de lixo. Você deve decidir quais os botões para controlar as funções, como reproduzir e pausar, etc.

Existem 6 funções:

1) Reproduzir e pausar
2) Próxima música
3) Música anterior
4) Aumento de volume
5) Diminuição do volume
6) Equalizador de som (Normal / Pop / Rock / Jazz / Clássico / Base)

Você precisa escolher os botões do controle remoto e encontrar seus códigos hexadecimais desses botões que serão transmitidos pelo controle remoto. Para encontrar o código hexadecimal, baixe a biblioteca IR, caso não tenha feito isso.

github.com/z3t0/Arduino-IRremote

Adicione a biblioteca ao software arduino e navegue até Arquivo> Exemplos> IRremote> IRrecvDemo e carregue o código com a configuração de hardware concluída.

Abra o monitor serial e pressione os botões no controle remoto, você verá os códigos hexadecimais, anote o botão correspondente no pedaço de papel.

Você precisa inserir o código hexadecimal no programa fornecido a seguir. Depois de inserir os códigos hexadecimais no programa fornecido, carregue-o. Você está pronto para controlar suas músicas com o controle remoto.

Programa para design baseado em IR remoto:

//---Developed by R.Girish--//
#include
#include
SoftwareSerial mySerial(10,11)
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00
//--------------------------------------------------------//
# define pause_play 0x2FD08F7
# define next_song 0x2FDD827
# define prev_song 0x2FDF807 //REPLACE THESE HEX CODE WITH YOUR REMOTE BUTTON CODE STARTS “0x”
# define vol_inc 0x2FD58A7
# define vol_dec 0x2FD7887
# define sound_equalizer 0x2FD30CF
//-------------------------------------------------------//
const int receive = A0
IRrecv irrecv(receive)
decode_results dec
int volume = 15
int eqset = 0
boolean Playing = false
void setup ()
{
irrecv.enableIRIn()
mySerial.begin(9600)
delay(1000)
playFirst()
Playing = true
}
void loop ()
{
if(irrecv.decode(&dec))
{
if (dec.value==pause_play)
{
if(Playing)
{
pause()
Playing = false
}
else
{
Playing = true
play()
}
}
if (dec.value==next_song)
{
if(Playing)
{
next()
}
}
if (dec.value==prev_song)
{
if(Playing)
{
previous()
}
}
if(dec.value==vol_inc)
{
volumeINC()
}
if(dec.value==vol_dec)
{
volumeDEC()
}
if(dec.value==sound_equalizer)
{
equalizer()
}
irrecv.resume()
}
}
void playFirst()
{
exe_cmd(0x3F, 0, 0)
delay(100)
exe_cmd(0x06, 0, volume)
delay(100)
exe_cmd(0x11,0,1)
delay(100)
}
void pause()
{
exe_cmd(0x0E,0,0)
delay(100)
}
void play()
{
exe_cmd(0x0D,0,1)
delay(100)
}
void next()
{
exe_cmd(0x01,0,1)
delay(100)
}
void previous()
{
exe_cmd(0x02,0,1)
delay(100)
}
void volumeINC()
{
volume = volume+1
if(volume == 31)
{
volume = 30
}
exe_cmd(0x06, 0, volume)
delay(100)
}
void volumeDEC()
{
volume = volume-1
if(volume == -1)
{
volume = 0
}
exe_cmd(0x06, 0, volume)
delay(100)
}
void equalizer()
{
eqset = eqset+1
if(eqset == 6)
{
eqset = 0
}
exe_cmd(0x07, 0 ,eqset)
delay(100)
}
void exe_cmd(byte CMD, byte Par1, byte Par2)
{
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2)
byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge, Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte}
for (byte x=0 x<10 x++)
{
mySerial.write(Command_line[x])
}
}
//---------Developed by R.Girish------//

NOTA 1: você pode ver um aviso no programa durante a compilação, ignore-o.

NOTA 2: Tente colocar todas as suas músicas no cartão SD sem pastas.

Protótipo do autor:




Anterior: Circuito de Transmissor LiFi Internet - Transferência de Sinal USB através de LED Próximo: Circuito SMPS de driver de LED de 7 watts - Corrente controlada