DFPlayerとはいっても、違う!!!!!! すごく違う!!!!!
気づいたこと 概要
◎ IO_1やIO_2に抵抗を挟んでタクトスイッチをつなげると、ADKEYのように使えそうだ。
◎ 異なるメーカーのDFPlayerでは、DFRobotDFPlayerMiniのライブラリのenableLoopAllを使ったときの反応が違う。またそれに関連して、play、next、previousを使ったときの反応も違う。DFRobotDFPlayerMiniのライブラリを使わず、直接データを送信したときでも、同じことがいえる。
DFPlayer と Arduino とで、マイクロSDプレーヤーを作ろうとしてみた
いろいろしたいことがあって、DFPlayerをArduinoでコントロールして、SDプレーヤーを作ろうと思い立った。DFPlayer mini MP3プレーヤー みたいに検索すると、いろいろなところから手に入れることができる。また、DFPlayer単体でも、アンプなしに使えるということで、面白がって手に入れた。ちょっと高いけど(とはいっても1個当たり、300円もしない)すぐ手に入るところからと、1つ100円しないので時間はかかるが中国からも手に入れた(送料がかかってしまう。送料は個数で変化する。送料込みだと百数十円くらい)。
写真の青いLEDは国内から手に入れたもの、赤いLEDは中国から手に入れたもの。たとえ、国内から手に入れたものでも、おそらくは、中国製。
DFPlayerのことをいろいろ調べるのに、もちろん、ネット上でいろいろ探してみた。探して見ると使っているICや抵抗の値とか違うということもわかってきた。でもまあ、それなりに使えるということだった。なので、手に入れた2種類で、気が付いたことを記す。特にその2:は衝撃だった。これほどまでに違うとは思ってもみなかった。
その1:
確かに、IO_1やIO_2をGNDにつなぐと、再生できる。音量調節もできる。スピーカーさえあれば、簡単に、使える。安いし、面白い。
チャタリング・バウンシングなどの防止にハード的に抵抗とコンデンサを使うことがある。そこで、図のようにタクトスイッチの部分をしてみた。すると、play、stopのようになった。DFPlayerには、ADKEY_1、ADKEY_2があり、そこにつなぐ抵抗の大きさを変えることで、異なる指示をDFPlayerに与えることができる。でも、IO_1でも、多少はできそうだ。IO_1でもできるかもしれない。少なくとも、図の回路の時は、IO_1はpreviousではなく、play、stop(pauseかもしれないが)のように働いた。それ以上は試していないので、それ以上のことはわからないが。また、それは青いLEDのほうで、赤いLEDの方では試していない。
その2:
ブレッドボード上で、結線をどうするかを試した。
スケッチで、タクトスイッチの操作も試した。必要に迫られ、一つのスピーカーから複数のDFPlayerの再生音を出力することにした。タクトスイッチを複数用意し、どのDFPlayerを選択するかのスイッチ一つ、音量をコントロールするスイッチ2つ、play/stopとnextとpreviousの3つのスイッチ、計6つのスイッチを設けることにした。ソフトウェアシリアル3系統を作り、また各スイッチとの関連をスケッチにして確認した。3つのDFPlayerからの音はミキシングし、アンプを通して出力することにした。少なくとも、結線的には十分確認した。ただ、ブレッドボード上で、ジャンパ線だらけだと、ものすごくノイズを拾ってしまう。しっかり作ったらどの程度ノイズが減るかは、実際に試しに作ってみるしかない。
なので、ブレッドボードで確認した回路をユニバーサル基板上に作った。容器の加工もした。スイッチやスピーカーもしっかりと容器に収めた。Arduinoとしてスケッチの書きこまれたATmega328pをArduinoから取り外し、5V、GND、0.1μFのコンデンサ2つ、resetの部分には10KΩの抵抗、これらを配線した。内部クロックの8MHzを使う5Vの仕様にしておくと、外部に発振器が不要だし、その部分をGPIOとしても使えるので、何かと便利だ。(ただし、これらは、ArduinoIDEに関連して、多少書き換えないといけないし、ブートローダーを書く時にも、いろいろしないといけないので、あちこちちょっと面倒だが、一度やっておくと後々とても便利である。今回は5Vスピーカーを鳴らすアンプなどの関係で5Vにしたが、3.3V内部クロック8MHzのマイコンは電力消費の点でも実によい。ちょっと面倒な部分があるにしても、とってもおすすめである。)(この辺のことについては「作って遊べるArduino互換機」(鈴木哲哉著)が詳しいと思うが、古い本で手に入らないかもしれない。3.3V、8MHzはネット上でも探しやすいと思う。5V、8MHzもネット上で情報は得られる。)
実際に作ってみると、ノイズはびっくりするほど減少し、十分に実用的なレベルになった。
あとは、スケッチをさらに考えればよい。動作にやや不安定な点があった。再生しようとしてもうまくいかないことがあった。どうもSDカードに入っている量によって処理速度に差があるらしく、カードによってうまくいったりいかなかったりする。
そうこうしているうちに、中国からのDFPlayer到着。新しくついたDFPlayer(LEDが赤) ひとつだけにし、タクトスイッチは前述の6個で、Arduinoとブレッドボードを、ジャンパー線でいろいろつないで、よりよいスケッチを作ってみた。何とかうまくいった。
それをDFPlayer3つに拡張し、マイコンにスケッチを書き込み、すでに作ったDFPlayer3つ(LEDが青)の機器のマイコンとして入れて動作確認をした。うまくいかない。いろいろ試すがうまくいかない。DFPlayer一つではうまくいくのに。いろいろスケッチをいじってもやってもやはりうまくいかない。原因がわからず頭をかかえる。まさか、ひょっとして、DFPlayerのせいか?と思い、せっかくはんだ付けしたLEDが青のDFPlayerを外してそれをブレッドボード上のLEDが赤のDFPlayer と交換してみた。さっきまでうまく動いていたスケッチがうまく動かない!なんと、スケッチのせいではなく、DFPlayerそのものが同じスケッチに対して異なる反応をしていたのだ!本来のDFPlayerの仕様とどちらがどう違うのかはわからない。2種類しか試していないので。ただ、少なくとも言えることは、ネット上にある情報の通りのスケッチを使い、ネット上にある通りの回路を組んでも、その通りには動かないことがある!ということである。
気が付いたこと
DFPlayerをLEDの色で(赤)と(青)と表現する。
*イヤホン端子からの出力がとても違う。最大にした時、スピーカーで何とか聞こえるくらい(赤)と、十分に聞こえるくらい(青)違う。
*playやnextやpreviousの信号を送った場合、その通りに動くかどうかが、かなり違う。(青)はかなりの確率で失敗する。特にSDカードにファイルがたくさんあると失敗しやすい。(赤)はそれに比べれば安定して動作する。
*enableLoopAllの動きが全く違う。
(青)の場合、それまで再生していたのをすべてresetし、一番初めから再生を始める。再生中であっても、一番初めから再生を始めてしまう。enableLoopAll で再生中であっても、もう一度一番初めから再生を始める。stopやnextやpreviousをしても、enablLoopAllはキャンセルされる。つまり、nextやpreviousで1曲の再生が終わると、そこでstopしてしまう。つまりenableLoopAllは無効になってしまう。
(赤)の場合、enableLoopAllが既に設定されていて、再度enableLoopAllの指示を出しても、変化はない。enableLoopAllは有効のままである。それまでの再生を続ける。nextやpreviousをすると、次の曲や前の曲に移動し再生を続ける。そしてその曲の再生が終わってもそのまま次の曲を再生する。enableLoopAllは有効のままである。stopした後にplayしても、enableLoopAllは有効のままである。
このように大きく動きが違う。現在私が求める動きは(赤)では実現できるが、(青)では実現できない。どんなにスケッチを書き換えても、実現できない。
0コメント