【MKZ4特別企画2】プログラミングでIoT改造ミニ四駆から音楽を鳴らしてみよう


こんにちは、押切です。今年のGWはいかがだったでしょうか。
電子工作ははかどりましたか?Cerevoはカレンダー通りの休日ですが、まだ休みの方も多いのではないでしょうか。

今回は、前回に続きスマートフォンから操作できるように改造できるキット「MKZ4」を使ったワイルドミニ四駆の改造について紹介していきます。5月10日まで無料公開中の「徹底解説!MKZ4ガイドブック」ではMKZ4に使っているマイコンのESP8266を活用してLEDライトをLチカする方法を解説をしていますが、今回はそれをアレンジしてWaveファイルの音声を鳴らしてみましょう。

MKZ4についての詳細は、以下の前回の記事をご覧ください。
【MKZ4特別企画1】Arduinoで改造ミニ四駆の動きの精度を上げるチューニング

●MKZ4で音声を鳴らす方法

音声ファイルは外部メモリを利用せず、CPUのFlashメモリの一部に埋め込みます。 多少手間が掛かりますが電子工作はスピーカー部分のみと、少ない改造で音を出せるようになります。

この改造ではESP8266Audioという Library を使います。
このLibraryはUART端子に音声を出力するので、動作時は前回記事のデバック時に利用したシリアルモニタが使えなくなります。あわせて前回記事のキャリブレーションスケッチのコマンドが使えないため、前回キャリブレーションして決めた値を 今回のスケッチの初期値としていれて補正してください。

手順は以下のようになります。

  1. 準備するもの
  2. 電子パーツのはんだ付け
  3. プログラミング
  4. 応用編:音声を変える

1. 準備するもの

以下の電子パーツをそれぞれ別途用意してください。オンライン通販で購入することも可能です。

2. 電子パーツのはんだ付け

  1. まずピンソケットの内4ピン目の中身のピンを抜きます。(図の赤い部分)
  2. 次にスピーカー、アンプ、4pinソケットをはんだ付けします。(図のオレンジ部分)
  3. 最後にアンプのIN-端子(図の4ピン目にあたる部分)とGND(図の2ピン目にあたる部分)をジャンプワイヤー(ジャンパー)ではんだ付けします。

完成するとこのような状態になります。

アンプがなくてもスピーカーをVCCとTXDに直結するだけでも、小さいですが音が鳴りますのでスピーカーとはんだごてさえあえれば試すことができます。

3. プログラミング

■スケッチの書き込み

1) MKZ4にプログラムを書き込むためのスケッチを以下から、ダウンロードしてArduino IDEで開きます。
https://github.com/MasatoOshikiri/MKZ4/tree/master/custom/Cerevo_MKZ4_BGM1
ここでは、SSIDはMKZ4_BGMとしています。

//*** BGM
・・・//
で囲ってあるところが今回追加して部分ですので参考にして下さい。

2) Arduino IDEメニューの「スケッチ」から「ライブラリをインクルード」を選択し「.ZIP形式のライブラリをインストール…」で、以下のZipライブラリを追加します。
https://github.com/earlephilhower/ESP8266Audio

3) メニューの「ツール」からボードの書き込み設定を2ヶ所変更します。

  • CPU Freqency: 160MHz
  • lwIP Variant: V2 Higher Bandwidth

4) CN3をD側に刺し、MKZ4にMKZ4WKをつないで書き込みます。

■動作確認

MKZ4WKを外して、作ったスピーカーをRXDが接続されない向きに差し込んで
CN3をB側に 戻し、MKZ4のスイッチを入れて下さい。

音楽が流れたでしょうか。これで完成です。


MKZ4の操作はノーマルと同じなのでスマホフリックで操作できます。
操作中、音が途切れるのは他の処理で音声処理が止まってしまうためで、その点では未完成なので、興味のある方はスケッチやハードを改良できないか試してみて下さい(Tickerとか試してみましたが、自分には無理でした。ESP8266は内部DACがないので、外付けでDACを付ければいけそうです)。


この仕様の場合は起動した1回のみ、レースのカウントダウンの音を出すなどが面白いかもしれません。

4. 応用編:音声を変える

スケッチの”audio.h”は、Waveファイルを16進数で表したものです。
今回は30secの音声を8kHz 16bitに変換して容量を減らしました(2.75MB程度)。
このくらいが上限で、スケッチにもよりますがこれ以上容量が大きいと内蔵Flashに入りきらずコンパイルでエラーとなります。
容量で聞いてくるので、音を短くすれば44.1kHz等高音質化も可能です。

なので、手順としては以下の通りになります。


1) Waveファイルを用意する(容量は2.5MBを目標)
元の音声ファイルを変換するには、Windowsなら、えこでこツール等を使います。
https://www.vector.co.jp/soft/winnt/art/se445019.html
音声の相互フォーマット変化や音質が簡単にできて長く使っています。
ここでは用意した音声のファイル名を”audio.wav”と仮定します。

2) Waveファイルをaudio.hファイルに変換する

2-1) VIMエディターを起動
下記からダウンロード可能です。
ここではWindowsで使う前提で説明します。
https://www.kaoriya.net/software/vim/

2-2) VIMのフォルダを移動
解答したフォルダごと、例えば D:\VIM 等に移動して、フォルダ名も=>vim等に変更すると後が楽です。

2-3) PATHを切る(できれば)
この後コマンドプロンプトでwaveファイルを変換しますが、どこのフォルダでもvimコマンドが使えるようPATHを切っておいた方が便利です。
とはいえ、Windows10での設定は多少煩雑なのと今回のスケッチのためだけに使うならそのままでもいいです。
興味のある方は、検索してみてください。

2-4) 1)で作った”audio.wav”をvimフォルダにコピーする
※2-3でPATHを切った人は不要です。

2-5) xxdコマンドでファイル変換
コマンドプロンプトで(Winsowsキー+rでcmdと入力してエンター)vimがあるフォルダに移動します。

$ D:
$ cd vim
$ xxd -i audio.wav audio.h

と入力すると同じフォルダにaudio.hが作成されます。
audio.wavは1)で用意したファイル名ですので異なる場合は変えて下さい。

3) audio.hの編集
できたaudio.hファイルをテキストエディタで開いてみると、WaveファイルがHEXの値に変換されているのが分かると思います。

この1行目の

unsigned char audio2_wav[] = {

const unsigned char audio[] PROGMEM = {

とスケッチに合わせてに書き換えて上書き保存します。

4) audio.hをスケッチのあるフォルダのものと入れ替え

5) 再度コンパイルしてMKZ4で書き込み
音声は変わったでしょうか?

ちょっと手順が煩雑な気もしますが、一度できれば変換の手間だけですので、いろいろと試して楽しんで貰えればと思います。

さいごに

次回は近いうちにリベンジして音声モジュールを使って、もっと自由に高音質な音声を鳴らしたいと思います。

改造についてのご希望は、Twitterでハッシュタグ #cerevo #mkz4 でのつぶやきもまだ募集中です。

関連リンク

MKZ4の他の記事をみる

Cerevo 採用情報
Cerevoではエンジニアや広報など、様々な職種の採用活動を行なっています。
IoTプロダクト開発やスタートアップ支援、企画、営業に関心が高い方からのご応募をお待ちしております。

採用情報を見る