مشغل MP3 باستخدام مشغل DF - تفاصيل التصميم الكاملة

جرب أداة القضاء على المشاكل





في هذا المنشور سنقوم ببناء مشغل MP3 باستخدام اردوينو و DFPlayer. تحتوي المقالة المقترحة على تصميمين لمشغل MP3 ، أحدهما به زر تحكم بالضغط والآخر بجهاز تحكم عن بعد بالأشعة تحت الحمراء سنلقي نظرة أيضًا على DFPlayer (وحدة مشغل MP3) ومواصفاته.

كلنا نحب الموسيقى ، نود أن نسمعها أثناء وجودنا في صالة الألعاب الرياضية ، أو القراءة ، أو قبل لحظات من النوم أو أثناء تهدئة أنفسنا بعد يوم عمل شاق.



كان إنشاء مشغل موسيقى في المنزل منذ عدة عقود شبه مستحيل لعشاق الإلكترونيات بسبب التعقيد الإنشائي بسبب المكونات الميكانيكية.

في تلك الأيام كان يمكن استيعاب عدد محدود فقط من الأغاني في شريط كاسيت. كان تكرار أغنية على شريط كاسيت آخر بمثابة كابوس أيضًا. ولكن الآن ، بفضل التقدم في الإلكترونيات ، يمكن إنشاء مشغل MP3 من الصفر بأموال جيبك.



دعنا الآن ننتقل إلى التفاصيل الفنية للمشروع.

قلب المشروع هو DFPlayer وهو عبارة عن وحدة مشغل MP3 صغيرة يمكنها استيعاب بطاقة micro SD ويمكن التحكم فيها باستخدام متحكم دقيق.

رسم توضيحي لبرنامج DFPlayer:

DFPlayer

يحتوي على مكبر صوت مدمج يمكنه تشغيل مكبرات صوت 3 واط في ستيريو أو أحادي. يحتوي على محول رقمي إلى تناظري 24 بت (DAC) وهو جيد جدًا لمثل هذه الوحدة المدمجة منخفضة التكلفة.

منظر سفلي لبرنامج DFPlayer:

عرض سفلي لبرنامج DFPlayer

وهو يدعم فك تشفير أجهزة MP3 و WMV. يدعم معدل أخذ العينات من
8 كيلو هرتز ، 11.025 كيلو هرتز ، 12 كيلو هرتز ، 1 6 كيلو هرتز ، 22.05 كيلو هرتز ، 24 كيلو هرتز ، 32 كيلو هرتز ، 44.1 كيلو هرتز ، 48 كيلو هرتز.

يمكن أن تدعم بطاقة micro SD حتى 32 جيجا بايت. يدعم ما يصل إلى 100 مجلد ، ويمكن تخصيص ما يصل إلى 1000 أغنية لكل مجلد.

يحتوي على 6 مستويات مختلفة من التعادل و 30 مستوى من التحكم في ضبط مستوى الصوت. يمكن أن تعمل من 3.2V إلى 5V.

تكوين دبوس DFPlayer:

تكوين دبوس DFPlayer

تعتمد المواصفات المذكورة أعلاه على ورقة بيانات DFPlayer.

الآن ستكون على دراية بـ DFPlayer ومواصفاته. يمكنك شراء هذه الوحدة من مواقع التجارة الإلكترونية أو من سوق الإلكترونيات المحلي.

الآن دعنا ننتقل إلى الرسم التخطيطي.

تصميم مشغل MP3 بضغطة زر:

مشغل MP3 باستخدام Arduino و DFPlayer

الدائرة أعلاه بسيطة للغاية ، حيث يرسل اردوينو أوامر إلى وحدة DFPlayer للتحكم في الأغاني. يمكن للمستخدم إدخال اختياره عبر أزرار الضغط.

تم تنشيط مقاوم السحب المدمج في اردوينو في البرنامج ، بحيث لا نحتاج إلى إرفاق المقاوم المادي بأزرار الضغط.

حاول استخدام مكبرات صوت ذات جودة عالية حيث يمكن لبرنامج DFPlayer تقديم صوت عالي الجودة.

إذا وجدت أي تشويه في الصوت بمستويات صوت أعلى ، فقم بتشغيل وحدة DFPlayer خارجيًا عند 5 فولت تيار مستمر مع اتصال أرضي مشترك بين arduino و DFPlayer.

إذا كنت تريد إعداد صوت الاستريو ، فقم بتوصيل أحد السماعات بـ SPK1 الخاص بـ DFPlayer وسماعة أخرى بـ SPK2 وقم بتوصيل أسلاك السماعات المتبقية.

برنامج للتحكم بضغطة زر:

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

الآن دعنا ننتقل إلى التصميم القائم على التحكم عن بعد بالأشعة تحت الحمراء.

تخطيطي لمشغل MP3 الذي يتحكم فيه IR:


التصميم أعلاه بسيط حيث أن الفارق الوحيد هو إزالة أزرار الضغط وإدراج مستقبل الأشعة تحت الحمراء TSOP 1738. يتم تغذية الإشارة المستلمة من جهاز التحكم عن بعد بالأشعة تحت الحمراء إلى دبوس A0 من اردوينو.

الآن للتحكم في مشغل MP3 هذا ، تحتاج إلى تلفزيون احتياطي ، أو أي جهاز تحكم عن بعد آخر قائم على الأشعة تحت الحمراء والذي قد يكون ملقى على صندوق البريد غير الهام الخاص بك. عليك أن تقرر الأزرار للتحكم في الوظائف مثل التشغيل والإيقاف المؤقت وما إلى ذلك.

هناك 6 وظائف:

1) تشغيل وقفة
2) الأغنية التالية
3) الأغنية السابقة
4) زيادة الحجم
5) انخفاض الحجم
6) معادل الصوت (عادي / بوب / روك / جاز / كلاسيك / قاعدة)

تحتاج إلى اختيار الأزرار الموجودة على جهاز التحكم عن بعد والعثور على الرموز السداسية العشرية لتلك الأزرار التي سيتم إرسالها عن طريق جهاز التحكم عن بُعد. للعثور على الكود السداسي العشري ، قم بتنزيل مكتبة IR إذا لم تقم بذلك.

github.com/z3t0/Arduino-IRremote

أضف المكتبة إلى برنامج arduino وانتقل إلى ملف> أمثلة> IRremote> IRrecvDemo وقم بتحميل الكود مع إعداد الأجهزة المكتمل.

افتح الشاشة التسلسلية واضغط على الأزرار الموجودة على جهاز التحكم عن بعد ، سترى الرموز السداسية العشرية ، لاحظها حتى الزر المقابل على قطعة من الورق.

تحتاج إلى إدخال الكود السداسي العشري في البرنامج الموضح أدناه. بمجرد إدخال الرموز السداسية العشرية في البرنامج المحدد ، قم بتحميله. أنت جاهز للتحكم في أغانيك من جهاز التحكم عن بُعد.

برنامج للتصميم عن بعد بالأشعة تحت الحمراء:

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

ملاحظة 1: قد ترى تحذيرًا في البرنامج أثناء التجميع ، يرجى تجاهله.

ملاحظة 2: حاول وضع جميع أغانيك في بطاقة SD بدون مجلدات.

النموذج الأولي للمؤلف:




السابق: دائرة إرسال الإنترنت LiFi - نقل إشارة USB من خلال LED التالى: 7 Watt LED Driver SMPS Circuit - التحكم الحالي