500円以下のArduino用mp3プレーヤー”DFPlayer Mini”で適当なもの作ってみた
以前”暗くなるとGet Wildが流れる”ネタで盛り上がったときに、ArduinoにMP3再生機能をつけたいなぁと思ったんですが、案外Arduino用MP3プレーヤーシールドって高い(3~4,000円前後)ものが多くて手が出ませんでした。
が、こちらはなんと送料込みで420円!
中国発送なのでえらい時間がかかりましたが、ワンコインで買えるお手軽なMP3プレーヤーを見つけました。
Amazon上では”HiLetgo TFカード U Disk Mini MP3 Player 音声ヴォイスモジュール ボード For Arduino DFPlay”という商品名でしたが、世界的には”DFPlayer Mini”って名前で通ってるみたいです。
大きさは20mm四方ほど。MP3データを入れた32GBまでのmicroSDカードを挿して使います。
裏はこんな感じ。
基板上にはピンの名前が一切ありませんが・・・
下記サイトを参考にArduinoに接続、使用してみました。
DFPlayer Mini SKU:DFR0299 - Robot Wiki
ピン配置は以下の通り。
で、こんな感じにArduinoにつなぎます。
このボード以外にArduino本体、microSDカード、1kΩの抵抗×2、そしてスピーカー。
手ごろなスピーカーがなかったので、Ichigojamについてた圧電スピーカーを使用。
音質は最悪ですが、とりあえず音が出てるところを確認できればOKなので。
さて、このDFPlayer Miniに挿すmicroSDカードに入れるMP3データですが、
・ SDカード内に「mp3」というフォルダを作成
・ ここに入れるデータは、0001***.mp3、0002***.mp3 ・・・というように、頭に4ケタの半角数字をつけたファイル名にする
というmicroSDカードを準備します。
こんな感じです。
これをDFPlayer Miniに挿します。
さて、早速プログラムを入れるんですが、まずはDFPlayer用のライブラリを登録。
まずは、ライブラリを以下からダウンロードします。
ダウンロードしたZIPファイルは解凍せずにそのまま登録。
Arduino IDEを開き、”スケッチ”-”ライブラリをインクルード”-”.ZIP形式のライブラリをインストール”を選び、
先にダウンロードしたZIPファイルを選択します。
こういうのができれば成功です。
さて、早速サンプルコードを走らせます。
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
void setup () {
Serial.begin (9600);
mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module
delay(1); // delay 1ms to set volume
mp3_set_volume (20); // value 0~30
}
void loop () {
mp3_random_play ();
delay (100000);
}
10秒おきに曲がランダムで再生されるはずです。
コンパイルしてArduinoに転送すると
鳴りました!
音楽再生時は、基板上の青色LEDが点灯します。
これでは芸がないので、もうちょっと応用してみました。
「Arduinoで赤外線測距センサー”GP2Y0A710K”を使ってみた」の記事で使った赤外線測距センサー”GP2Y0A710K”をつないで、物体がある距離まで近づいたら音楽を再生するようにしてみました。
GP2Y0A710KのVCCをArduinoの”5V”に、GNDは”GND”に、V0はアナログ端子の”A0”番にそれぞれ接続。
ついでに、動作チェックモニター用にI2C 16×2のLCDも接続。
”GND”と”VCC”はArduino側の”GND”、”5V”に、”SDA”、”SCL”はそれぞれ”A4”、”A5”端子に接続。
LCDのライブラリ登録など、詳しくは上のリンクを参照。
こんなのができました。
プログラムは以下。
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup() {
Serial.begin(9600) ;
lcd.init();
lcd.backlight();
mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module
delay(1); // delay 1ms to set volume
mp3_set_volume (20); // value 0~30
}
int flag ;
void loop() {
int ans ;
float volt ;
float distance ;
ans = analogRead(0) ;
volt = ans * 5.0 / 1023 ;
distance = ( 9.5974 / volt ) -3.0086 ;
Serial.println(ans) ;
Serial.println(flag) ;
lcd.print(distance);
lcd.print("m");
delay(300) ;
lcd.clear();
if (distance<2.0 && flag == 0 ){flag = 1;}
if (distance>=2.5){flag = 0;}
if (flag==1){
mp3_random_play ();
flag = 2;
}
if (flag==0) {mp3_stop (); }
}
距離が2m以内だとMP3をランダム再生、2.5m以上離れると停止します。
センサーのとらえた距離はLCDに表示されてます。なくても動作は可能ですが、LCDをつけておくと距離を正確に測定できているかどうか確認するには便利です。
早速テスト。
この通り、手をかざすとDFPlayer Miniが起動し音楽再生。
離れるとPlayerの青色LEDが消えて、音楽も止まります。
さすがに圧電スピーカーでは忍びないので、百均のスピーカーをいじってくっつけてみました。
ついでに、チェック用のLCDも廃止。
コンパクトで、音質も向上。なかなかGoodな出来です。
ネットで見つけたファ○マの入店音などを入れて遊んでます。
こういうやつ。これ入れて、子供と遊んでます。
さて、作ってから言うのもなんですけど、こんなものいったい何の役に立つのやら。勢いで作ったので、あまり用途は考えてませんが。
でも、例えば車の死角に入ると音で知らせてくれるセンサーなんてのに使えそう。
車線変更しようかと思ったら車がいることってありますよね。死角に何かいることを音楽で知らせてくれるとありがたい。
他にも、接近するとしゃべり始める音声ガイドに使えそうですね。その場合は赤外線測距センサーより、人感センサーの方がよさそうですが。
他にも、例えば照度センサーと組み合わせて、明るいときは音楽再生、暗くなったら止まるというプレーヤーも作れそうです。まさにGet Wildネタに使えます。
などなど、アイデア次第でいろいろ使えそうですね。何に使いましょうかね?
HiLetgo TFカード U Disk Mini MP3 Player 音声ヴォイスモジュール ボード For Arduino DFPlay |
« スマホがジカ熱治療に!? | トップページ | iPhone 7の”ブラック”モデル想像図 »
「Raspberry Pi・Arduino・電子工作」カテゴリの記事
- 名古屋 大須へ行ってきました(2024.04.28)
- Raspberry Pi 5用電源購入(2024.04.19)
- Interface 2024年5月号はRaspberry Pi 5特集(2024.03.26)
- Raspberry Pi 5とPCがつながらなかった理由は「プライバシーセパレーター機能」のせいでした(2024.03.12)
- Raspberry Pi 5に日本語LLM(ELYZA-Japanese-Llama-2-7b-fast-Instruct)を入れてみた(2024.03.10)
電話の最初の応答なんかにはどうでしょう
女性の一人暮らしとかで、女性がいると教えたくないとか
男性の「どちら様?」と再生させるといいかなとか
今時の人は携帯だろとか電話番号で誰かわかるだろとかは
どっちにしても登録してない人からだとわかりませんからね
投稿: mokekyo | 2016年7月 3日 (日) 14時36分
こんにちは、mokekyoさん。
自動応答させるというのはいいですね。せっかくだから、相手の話しに応じて応答を変えるというプログラムを組んで・・・というのは、Raspberry Piでやった方が速そうです。
どちらかというと、知らない電話番号からかかってきたら、ボイスチェンジできる機能とかあるといいですね。これなら、女性でも安心です。
投稿: arkouji | 2016年7月 3日 (日) 17時14分
自動化はかなり難しいですね
電話番号を調べるにしても電話器から
どう取得しますか?
現実的にみて、コナンよろしく受話器の近くに
スピーカーを当ててボタンを押して再生でしょうか
自動化は面白いんですが、それは技術を身につけ始めた方に
ある何でも技術で解決が最良ってパターンだと思います
投稿: mokekyo | 2016年7月 3日 (日) 18時09分
あ、そもそも、このMP3装置ってシリアルポートで
コントロール出来るんですね。ならば、X1でもコマンド
さえ送れば再生する事が可能なんでしょうね。
わざわざX1でする必要はありませんけど(w
投稿: mokekyo | 2016年7月 4日 (月) 22時24分
こんにちは。いつも記事を楽しく拝見しています。
再来月から高齢者に向けたデバイスを企画しますので
とても参考になります。
これからも頑張ってくださいね。
投稿: KeisukeMa | 2016年7月 5日 (火) 09時09分
こんにちは、mokekyoさん。
X1と連携ですか、胸熱ですね。プロセッサ性能はきっとこのプレーヤーの方が上でしょうが、新旧のハードウェアの融合にロマンを感じます。って、うちのX1にはシリアル端子がありませんね。残念。
投稿: arkouji | 2016年7月 5日 (火) 18時28分
こんにちは、KeisukeMaさん。
参考にされてるとは嬉しい限りです。いつもご覧いただき、ありがとうございます。
プログラムは多少できるものの、電子工作はど素人なので、まわりくどい記事になりがちですが、なるべく初心者目線でわかるように心がけてるつもりではいます。今後も何かいいアイデアを提供できるといいんですが…頑張ります。
投稿: arkouji | 2016年7月 5日 (火) 18時34分
シリアルポートがあれば、色々と操作
出来るんですけど、そもそもその選択すら
無いってのも時代を感じさせますね。
Turboだったら標準でしたっけか。
投稿: mokekyo | 2016年7月 5日 (火) 20時57分
電気工作初心者です。基本的な質問をさせてください。
DFPlayer Mini単体で、基本構成(電源、スピーカー、ADKEY1のみ配線)で操作を試みています。
mp3ファイルを1つだけ記録して再生を試みるのですが、ファイルの出だしが1秒だけされて、その後はビ~~ という雑音が数秒発せられて止まってしまいます。
対処方法などアドバイス頂けたら助かります。
もしよろしければ、お返事の程よろしくお願いします。
投稿: TK | 2016年11月 6日 (日) 12時23分
こんにちは、TKさん。
いろいろ調べてみましたが、該当する対処方法は見つかりませんでした。すいません。
まったく再生できないわけではないので、考えられるのは未対応のビットレートだったりするんでしょうかね?ちょっと音質を落とした低ビットレートの音源で試してみるといいかもしれません。
あるいはDFPlayerそのものが壊れているということもあり得ます。でもそれだったら1秒の再生もかなわないので、考えられるのはファイルそのものの問題じゃないかと。
あまり大したヒントにはなりませんが、一度お試しください。
投稿: arkouji | 2016年11月 6日 (日) 19時34分
私もそれ、はまりました。
ループの中にボリューム設定コマンドが入っていませんか?
一定回数以上のボリューム設定コマンドを受け取ると正常に再生ができない現象を起こすようです。
投稿: | 2017年4月20日 (木) 07時22分
こんにちは、??さん。
そんな不具合があるんですね。ありがとうございます。
結局ほとんど使ってないこのパーツですが、値段も安い上にアイデア次第では面白いものも作れそうな気がするんで、ちょっと使い道考えて見たいところです。
投稿: arkouji | 2017年4月21日 (金) 04時35分
MP3ミュージック再生で、1曲で停止してしまう、次の曲に続かない、何かほうほうは、何方か教えてください。
投稿: 興味のおじさん | 2020年12月29日 (火) 10時28分