DFプレーヤーを使用したMP3プレーヤー–完全な設計の詳細

DFプレーヤーを使用したMP3プレーヤー–完全な設計の詳細

この投稿では、arduinoとDFPlayerを使用してMp3プレーヤーを作成します。提案された記事には、2つのMp3プレーヤーのデザインがあります。1つはプッシュボタンコントロール付きで、もう1つはIRリモートコントロール付きです。また、DFPlayer(Mp3プレーヤーモジュール)とその仕様についても見ていきます。



私たちはみんな音楽が大好きです。ジムにいるとき、読書をしているとき、寝る前の瞬間、または忙しい一日の仕事の後に自分を落ち着かせているときに音楽を聴きたいです。

数十年前に自宅で音楽プレーヤーを構築することは、機械部品による構造の複雑さのために、電子機器愛好家にとってほぼ不可能でした。





当時、カセットに入れることができたのは限られた数の曲だけでした。曲を別のカセットに複製することも悪夢でした。しかし今、電子機器の進歩のおかげで、Mp3プレーヤーはあなたの小遣いでゼロから作ることができます。

それでは、プロジェクトの技術的な詳細に移りましょう。



プロジェクトの中心は、マイクロSDカードを収容でき、マイクロコントローラーを使用して制御できる小さなMp3プレーヤーモジュールであるDFPlayerです。

DFPlayerのイラスト:

DFPlayer

ステレオまたはモノラルで3ワットのスピーカーを駆動できるアンプを内蔵しています。 24ビットのデジタル-アナログコンバーター(DAC)を備えており、このような低コストでコンパクトなモジュールに最適です。

DFPlayerの底面図:

DFPlayerの底面図

MP3およびWMVハードウェアデコードをサポートします。のサンプリングレートをサポートします
8KHz、11.025KHz、12KHz、1 6KHz、22.05KHz、24KHz、32KHz、44.1KHz、48KHz。

最大32GBのマイクロSDカードをサポートできます。最大100のフォルダーをサポートし、各フォルダーには最大1000の曲を割り当てることができます。

6つの異なるレベルのイコライザーと30のレベルのボリューム調整コントロールがあります。 3.2V〜5Vで動作します。

DFPlayerのピン構成:

DFPlayerのピン構成

上記の仕様は、DFPlayerのデータシートに基づいています。

これで、DFPlayerとその仕様に精通しているはずです。このモジュールは、eコマースサイトまたは地元の電子機器市場から購入できます。

それでは、回路図に飛び込みましょう。

プッシュボタンMp3プレーヤーのデザイン:

ArduinoとDFPlayerを使用したMP3プレーヤー

上記の回路は非常に単純で、arduinoはDFPlayerモジュールにコマンドを送信して曲を制御します。ユーザーはプッシュボタンを介して選択を入力できます。

プログラムでは、arduinoの内蔵プルアップ抵抗がアクティブになっているため、プッシュボタンに物理的な抵抗を取り付ける必要はありません。

DFPlayerが非常に高品質のサウンドを提供できる高品質のスピーカーを使用してみてください。

より高い音量レベルでサウンドに歪みが見られる場合は、arduinoとDFPlayerの間の共通のアース接続を使用して、DFPlayerモジュールに5VDCで外部から電力を供給します。

ステレオサウンドを設定する場合は、スピーカーの1つをDFPlayerのSPK1に接続し、もう1つのスピーカーを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------//

それでは、IRリモートベースの設計に移りましょう。

IR制御のMP3プレーヤーの回路図:


上記の設計は単純です。プッシュボタンベースの唯一の違いは、プッシュボタンの取り外しとTSOP 1738IRレシーバーの組み込みです。 IRリモコンからの受信信号はarduinoのA0ピンに送られます。

このMp3プレーヤーを制御するには、予備のテレビ、またはジャンクボックスにある可能性のあるその他のIRベースのリモートが必要です。再生や一時停止などの機能を制御するためのボタンを決定する必要があります。

6つの機能があります:

1)再生して一時停止します
2)次の曲
3)前の曲
4)ボリュームの増加
5)音量の減少
6)サウンドイコライザー(ノーマル/ポップ/ロック/ジャズ/クラシック/ベース)

リモコンのボタンを選択し、リモコンから送信されるボタンの16進コードを見つける必要があります。 16進コードを見つけるには、そうでない場合はIRライブラリをダウンロードします。

github.com/z3t0/Arduino-IRremote

ライブラリをarduinoソフトウェアに追加し、[ファイル]> [例]> [IRremote]> [IRrecvDemo]に移動して、ハードウェアのセットアップが完了したコードをアップロードします。

シリアルモニターを開き、リモコンのボタンを押すと、16進コードが表示され、紙の対応するボタンに書き留めます。

以下のプログラムで16進コードを入力する必要があります。指定されたプログラムに16進コードを入力したら、それをアップロードします。リモコンから曲をコントロールする準備が整いました。

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

注1:コンパイル中にプログラムに警告が表示される場合があります。無視してください。

注2:フォルダのないSDカードにすべての曲を入れてみてください。

著者のプロトタイプ:




前:LiFiインターネット送信機回路–LEDを介したUSB信号転送 次へ:7ワットLEDドライバーSMPS回路–電流制御