VIVITABLOG

VIVITAで活躍するメンバーの情報発信サイト

小さな子供向けMP3プレイヤー製作 その1

VIVITAの新居です。

また、自分でちょっと作ってみたものを紹介します。 今度は自分の子供向けのMP3プレイヤーを作ってみました。

注意: これは幼児用に設計していませんし、安全性の評価もおこなっていません。そのため、読んだ方が作った場合には、各自ご注意下さい。

なぜMP3プレイヤー?

社内で、MP3プレイヤーを使ったおもちゃを作っている人をみて、私も作りたくなったのでした。部品代千円ちょっとで、光って音が出るものが作れると言うことに驚いたのです。

あと、自分の子供(3才)がよく歌を歌えと言ってくるので、最近は曲をかけながら、歌ったりしています。でも、かけるのがいつも決まった曲なのでこれなら作れるよなと思っていたので、やってみました。 なんとなくアンパンマンの音の出る絵本*1とかを参考にしました。

なにを作るか?

大方針としては、以下の様にしてみました。

  • 息子が5角形好きなので、5角形になるようにスイッチを配置し、5曲をすぐに選択可能に
  • スイッチを押すと、かならず押したことが光ってわかる
  • 曲を演奏中もどこかボタンが光るような仕掛けを入れる
  • 隠れ機能を入れる

主な購入品

  • MP3player基板 280円 *2

    • 十分大きな音の出るアンプを内蔵していて、microSDを差して使うタイプ
  • Arduino Pro-mini互換基板 780円*3

    • Arduinoボードの主要部分だけにして小さくしたバージョン
  • ユニバーサル基板(72mm x 47mm) 60円*4

    • LEDやスイッチなどを載せる基板
  • スピーカ 8Ω0.5W 80円*5

  • あと、電池ボックス 単4 3本型、microSDカード、LEDやタクトスイッチ。

試作方針

まずはユニバーサルボードに、スイッチとLEDを固定し、あまった所にMP3プレイヤーとArduinoボードを搭載します。機能を確認したところで、入るケースを設計してみました。今回はLEDの光とスイッチの関係をわかりやすくするために、数回スイッチ周りの部品を試作しました。

製作開始

回路図について

回路構成はこの図のようになっています。 f:id:hnii1970:20181026003732p:plain

部品点数を抑えた実装です。スイッチのプルアップ抵抗はArduinoの機能で、チャタリング除去もArduinoのソフトで済ませます。 LEDには全て1kΩが付いていますが、異なる種類毎に輝度が全く違いました。そこでソフト側で輝度を調整します。

ここで、ArduinoとDFPlayerMINIの間はシリアル通信で接続しています。それらの間には1kΩの抵抗がありますが、これは電源電圧が変化(今回のような電池直接駆動など)する状況では必要な様です(特にDFPlayerMINI側のRX端子については!)。付けないとスピーカからアンプが発振しているような音が発生することがあります。 電源電圧が低くなったり、内部抵抗の高い電池(ボタン電池!)を使うと、発振音が出やすいようです。 この抵抗を10kΩに変化させたりしましたが、特に変化はありません。

また、アンプの発振が疑われたので、図中C1を100uFや470uFにしてみましたが、発振を開始するタイミングやその波形が変わるだけで、発振が停止はしませんでした。 また、どのタイミングで発振するか調べてみると、DFPlayer初期化コマンドをシリアル経由で送信した瞬間に音がでるようでした。 やはり、DAコンバータからの出力をはじめた瞬間などに発振がどこかで起こっているような感じがします。 しかし、回路図もないこのデバイスでは深く追うことができませんので、このあたりで諦めました。

ユニバーサル基板組み立て

基板の表にこんな感じに部品を並べました。 f:id:hnii1970:20181022233118j:plain

ウラはf:id:hnii1970:20181022233219j:plain 配線はもちろん手作業です。グランドとポートと直接つなげることができる端子についてはスズメッキ軟銅線を使用しています。

ちなみに、最初は電池をLR44というボタン電池にして、ケースに全て収める予定でした。その片鱗がケースの上側に付けられた電池ボックスに残っています。しかし電池容量が小さすぎMP3プレイヤー基板が異常動作してしまい、音が途切れ、ピーという音が止まらない状態になり、どうにもならない感じでした。

そのため、電池を単4に変更すると、まったく安定して動作するので、試作機はこの電池をつなぐことにしました。(電池ボックスははみ出しますが、、、)

これをケースに入れてみます。スイッチの位置を確認して穴を空けます。(穴の位置とかサイズは変更できるように別部品で設計) f:id:hnii1970:20181022233534j:plain

ちなみに最初は光が通りやすいように透明で3Dプリントしてみました。 f:id:hnii1970:20181022233552j:plain

しかし光源のLEDが見えすぎなのが気になったので、蓋の色を変えてみたのがこちらです。 f:id:hnii1970:20181022233624p:plain

こうすることで、スイッチの周りだけが光り、スイッチを押したことがわかりやすくなりました。

ソフトウェア

方針

極力外部の部品点数を減らしたため、チャタリング除去もソフトウェアで行っています。 また、スイッチの同時押しの検出をできるようにして、隠れ機能を実装します。

ソースファイルについて

スイッチをArduinoにそのままつなぐと、チャッタリングが発生して、何度も押したことになってしまうと思います。その場合には、 ソフトウェアで以下のような、スイッチを押した瞬間からの時間を記録し、十分時間が経ったときのみ反応するようにすると、役に立つ場合も多いです。

int Switch;       /// 一つ前の状態を保持
int Wait;         /// 最後のスイッチを押した瞬間からの時間

void loop() {
  delay(50);      /// 待ち時間50mS
  now = checkSW();/// スイッチの状態を取得. 何も押してない:0, スイッチを押した場合: 1..5
  if((now>0)&&(Switch==0)) {/// スイッチを押した時
    if(Wait>10) { ///前回のスイッチONから0.5秒以上経っていたら
      playMUSIC(now);
      Wait = 0;
    }
  }
  if(Wait < MAXWait) Wait++;
  Switch = now;
}

実装した機能

  • ボタンをどれか1つ押すと、それぞれ異なる曲を再生
  • ボタンをどれでも2つ同時に押すと、曲の停止
  • ボタンをどれでも3つ同時に押すと、音量小(寝室に持ち込んだときの対策)
  • ボタンをどれでも4つ同時に押すと、音量大(音量を電源投入時の状態に)
  • ボタンをどれでも5つ同時に押すと、ルーレット開始

実際の動作の様子は以下の通りです。

vimeo.com

ユーザーテスト

このようにキチンと動くようになりました。スイッチを押すとすぐ音楽が流れて音量も十分大きいです。そこでユーザーテストです。

最初は目新しくて子供も使ってくれましたが、数日で曲に飽きてしまいます。曲を新しく入れ替えると、どの曲がどのボタンか分かりにくいと苦情。

次に秘密機能を教えると、ルーレットを起動するための5個同時押しができなくて、泣いていまうということに。そのうち、私にボタンを1つだけ押せと指示を出して、両手で残り4個を同時押しすることでこれもクリア。

しかしながら、使ってみて問題点がでてきました。

  • スピーカを裏側に付けると机の上で操作するときに音がとても小さくなってしまう。スピーカは上に付けるべき。
  • 蓋がちょっと高すぎて、ボタンのてっぺんがギリギリとなりちょっと押しにくい。
  • 線がそのうち断線するので、外付け電池は非実用的。

今度、これらを解消して作り直してみたいです。