Reproductor de MP3 mitjançant el reproductor DF: detalls complets del disseny

Proveu El Nostre Instrument Per Eliminar Problemes





En aquest post anem a construir un reproductor de MP3 amb arduino i DFPlayer. L’article proposat té dos dissenys de reproductors Mp3, un amb control de botó i un altre amb control remot IR. També farem un cop d'ull a DFPlayer (mòdul de reproductor Mp3) i a les seves especificacions.

A tots ens agrada la música, ens agradaria escoltar-la al gimnàs, llegir, moments abans de dormir o relaxar-nos després d’un dur dia de treball.



Construir un reproductor de música a casa fa poques dècades era gairebé impossible per als entusiastes de l'electrònica a causa de la complexitat constructiva a causa dels components mecànics.

En aquells dies, només es podia allotjar un nombre limitat de cançons en un casset. Replicar una cançó a un altre casset també va ser un malson. Però ara, gràcies a l’avenç en electrònica, es pot fer un reproductor de MP3 des de zero amb els diners de la butxaca.



Passem ara als detalls tècnics del projecte.

El centre del projecte és DFPlayer, que és un petit mòdul de reproductor de MP3 que pot allotjar targetes micro SD i es pot controlar mitjançant un microcontrolador.

Il·lustració de DFPlayer:

DFPlayer

Té un amplificador integrat que pot conduir altaveus de 3 watts en estèreo o mono. Té un convertidor digital a analògic de 24 bits (DAC), que és bastant bo per a un mòdul tan baix i compacte.

Vista inferior del DFPlayer:

Vista inferior del DFPlayer

És compatible amb la descodificació de maquinari MP3 i WMV. Admet la freqüència de mostreig de
8KHz, 11.025KHz, 12KHz, 1 6KHz, 22.05KHz, 24KHz, 32KHz, 44.1KHz, 48KHz.

Pot suportar fins a 32 GB de targeta micro SD. Admet fins a 100 carpetes, a cada carpeta se li poden assignar fins a 1000 cançons.

Té 6 nivells diferents d'equalitzador i 30 nivells de control d'ajust de volum. Pot funcionar de 3,2V a 5V.

Configuració del pin de DFPlayer:

Configuració del pin de DFPlayer

Les especificacions anteriors es basen en el full de dades de DFPlayer.

A hores d’ara ja estareu familiaritzat amb DFPlayer i les seves especificacions. Podeu adquirir aquest mòdul des de llocs de comerç electrònic o des del mercat electrònic local.

Ara saltem al diagrama esquemàtic.

Disseny de reproductor de Mp3 amb botó:

Reproductor Mp3 mitjançant Arduino i DFPlayer

El circuit anterior és molt senzill, l'arduino envia ordres al mòdul DFPlayer per controlar les cançons. L'usuari pot introduir la seva elecció mitjançant botons polsadors.

La resistència de tracció incorporada de l’arduino s’ha activat al programa, de manera que no necessitem connectar una resistència física per prémer els botons.

Proveu d'utilitzar altaveus de bona qualitat, el DFPlayer pot oferir un so de molt bona qualitat.

Si trobeu alguna distorsió del so a nivells de volum més alts, alimenteu el mòdul DFPlayer externament a 5 V CC amb connexió a terra comuna entre arduino i DFPlayer.

Si voleu configurar un so estèreo, connecteu el de l’altaveu a SPK1 de DFPlayer i un altre a SPK2 i connecteu a terra els cables de l’altaveu restants.

Programa per al control de botons:

//---------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------//

Passem ara al disseny remot IR.

Esquema del reproductor Mp3 controlat per IR:


El disseny anterior és senzill, ja que el botó basat en l'única diferència és l'eliminació dels botons i la inclusió del receptor IR TSOP 1738. El senyal rebut del control remot IR s’alimenta al pin A0 d’arduino.

Ara, per controlar aquest reproductor de MP3, necessiteu un televisor de recanvi o qualsevol altre comandament a distància basat en IR que pugui estar a la vostra escombraries. Heu de decidir quins botons per controlar les funcions, com ara reproduir i pausar, etc.

Hi ha 6 funcions:

1) Reprodueix i posa en pausa
2) Cançó següent
3) Cançó anterior
4) Augment de volum
5) Disminució del volum
6) Equalitzador de so (Normal / Pop / Rock / Jazz / Clàssic / Base)

Heu d’escollir els botons del comandament i trobar els codis hexadecimals d’aquests botons que transmetran el comandament. Per trobar el codi hexadecimal, descarregueu la biblioteca IR si no ho feu.

github.com/z3t0/Arduino-IRremote

Afegiu la biblioteca al programari arduino i aneu a Fitxer> Exemples> IRremote> IRrecvDemo i pengeu el codi amb la configuració de maquinari completa.

Obriu el monitor sèrie i premeu els botons del comandament a distància, veureu els codis hexadecimals, anoteu-lo al botó corresponent del tros de paper.

Heu d’introduir el codi hexadecimal al programa que es mostra a continuació. Un cop introduïts els codis hexadecimals al programa donat, pengeu-lo. Ja podeu controlar les vostres cançons des del comandament a distància.

Programa per al disseny remot IR:

//---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: és possible que vegeu un advertiment al programa mentre el compileu, si us plau, ignoreu-lo.

NOTA 2: Intenteu posar totes les cançons a la targeta SD sense carpetes.

Prototip de l'autor:




Anterior: Circuit transmissor d'Internet LiFi: transferència de senyal USB mitjançant LED Següent: Circuit SMPS de controlador LED de 7 watts - controlat per corrent