Mp3 Player folosind DF Player - Detalii complete despre design

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





În acest post vom construi un player MP3 folosind arduino și DFPlayer. Articolul propus are două modele de player MP3, unul cu buton de comandă și altul cu telecomandă IR. De asemenea, vom arunca o privire asupra DFPlayer (modulul player MP3) și a specificațiilor sale.

Cu toții ne place muzica, ne-ar plăcea să o auzim în timp ce la sală, citind, cu câteva momente înainte de a dormi sau în timp ce ne liniștim după o zi grea de muncă.



Construirea unui player de muzică acasă cu câteva decenii în urmă era aproape imposibilă pentru un pasionat de electronică din cauza complexității construcției datorită componentelor mecanice.

În acele zile, doar un număr limitat de melodii putea fi găzduit într-o casetă. Replicarea unei melodii pe o altă casetă a fost și un coșmar. Dar acum, datorită progresului în electronică, un player MP3 poate fi făcut de la zero cu banii de buzunar.



Acum să trecem la detaliile tehnice ale proiectului.

Inima proiectului este DFPlayer, care este un mic modul MP3 player care poate găzdui card micro SD și poate fi controlat cu ajutorul unui microcontroler.

Ilustrația DFPlayer:

DFPlayer

Are amplificator încorporat care poate conduce difuzoare de 3 wați în stereo sau mono. Are convertor digital-analogic pe 24 de biți (DAC), care este destul de bun pentru un modul atât de redus și compact.

Vizualizarea de jos a DFPlayer:

Vizualizarea de jos a DFPlayer

Suportă decodarea hardware MP3 și WMV. Acceptă rata de eșantionare de
8KHz, 11.025KHz, 12KHz, 1 6KHz, 22.05KHz, 24KHz, 32KHz, 44.1KHz, 48KHz.

Poate suporta carduri micro SD de până la 32 GB. Suportă până la 100 de foldere, fiecărui folder i se pot atribui până la 1000 de melodii.

Are 6 niveluri diferite de egalizator și 30 de niveluri de reglare a volumului. Poate funcționa de la 3,2V la 5V.

Configurarea pinului DFPlayer:

Configurarea PIN a DFPlayer

Specificațiile de mai sus se bazează pe fișa de date a DFPlayer.

Până acum ați fi familiarizați cu DFPlayer și specificațiile acestuia. Puteți achiziționa acest modul de pe site-urile de comerț electronic sau de pe piața locală de electronice.

Acum să trecem în diagrama schematică.

Designul playerului Mp3 cu buton:

Mp3 Player Folosind Arduino și DFPlayer

Circuitul de mai sus este foarte simplu, arduino trimite comenzi către modulul DFPlayer pentru a controla melodiile. Utilizatorul își poate introduce alegerea prin intermediul butoanelor.

Rezistorul integrat arduino a fost activat în program, astfel încât nu este nevoie să atașăm un rezistor fizic pentru a apăsa butoanele.

Încercați să utilizați difuzoare de bună calitate, DFPlayer poate oferi un sunet de foarte bună calitate.

Dacă găsiți o distorsiune a sunetului la niveluri de volum mai mari, alimentați modulul DFPlayer extern la 5V DC cu conexiune la sol comună între arduino și DFPlayer.

Dacă doriți configurarea sunetului stereo, conectați cel al difuzorului la SPK1 al DFPlayer și alt difuzor la SPK2 și împământați firele de difuzor rămase.

Program pentru controlul butonului:

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

Acum să trecem la designul bazat pe telecomandă IR.

Schema pentru playerul Mp3 controlat de IR:


Designul de mai sus este simplu, deoarece baza butonului, singura diferență este eliminarea butoanelor și includerea receptorului IR TSOP 1738. Semnalul primit de la telecomandă IR este alimentat la pinul A0 de arduino.

Acum, pentru a controla acest player MP3, aveți nevoie de un televizor de rezervă sau de orice altă telecomandă bazată pe IR care ar putea fi așezată pe cutia de gunoi. Trebuie să decideți care sunt butoanele pentru controlul funcțiilor precum redare și pauză etc.

Există 6 funcții:

1) Redare și pauză
2) Următorul cântec
3) Melodia anterioară
4) Creșterea volumului
5) Scăderea volumului
6) Egalizator de sunet (Normal / Pop / Rock / Jazz / Classic / Base)

Trebuie să alegeți butoanele de pe telecomandă și să găsiți codurile hexazecimale ale acelor butoane care vor fi transmise de telecomandă. Pentru a găsi codul hexazecimal, descărcați biblioteca IR dacă nu ați făcut acest lucru.

github.com/z3t0/Arduino-IRremote

Adăugați biblioteca la software-ul arduino și navigați la Fișier> Exemple> IRremote> IRrecvDemo și încărcați codul cu configurarea hardware finalizată.

Deschideți monitorul serial și apăsați butoanele de pe telecomandă, veți vedea codurile hexazecimale, notați-l la butonul corespunzător de pe o bucată de hârtie.

Trebuie să introduceți codul hexazecimal în programul de mai jos. Odată ce ați introdus codurile hexazecimale în programul dat, încărcați-l. Sunteți gata să vă controlați melodiile de pe telecomandă.

Program pentru proiectarea bazată pe telecomandă 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------//

NOTĂ 1: este posibil să vedeți avertisment în program în timp ce compilați, vă rugăm să îl ignorați.

NOTĂ 2: Încercați să introduceți toate melodiile în cardul SD fără foldere.

Prototipul autorului:




Precedent: Circuit transmițător internet LiFi - Transfer semnal USB prin LED Următorul: Circuit SMPS de 7 wați cu LED LED - Controlat curent