今まではブザーでなんとかメロディを作ってマイコンで音を出していたが、「スピーカーで音楽を!」ということで色々探していたらMK-156という音声もジュールが良いらしいので研究費で購入してみた。
色々探してみると、Arduinoで使っている事例がなかったためまとめてみる。
MK-156とは?
MK-156とは、マイコンキットドットコムから発売されているアンプ内蔵で小型の多機能MP3/WAVボイスプレーヤーモジュールです。
シリアル通信(RS232C)で操作できるため、マイコンでも簡単に音を出力ができるモジュールです。
MK-156を操作するMK-157というコントローラボードキットも発売されています。
音楽データの取り込み
SDカードに音楽データを入れるときに少し工夫が必要です(結構ここで迷った)
また、再生できる音楽データはmp3かwavのみです。
下記のように音楽データを入れること!
フォルダ(01~99) \ 音楽ファイル(001 ~ 255)
ex) 01\001.wav というふうに音楽ファイルを入れていく
フォルダは01~99まで作成可能
音楽ファイルは001~255でフォルダ名をつけてください ex)001.mp3 002.wav
接続
下記の画像のとおりにArduinoと接続する
スピーカーは適当なものを購入して接続してください。(私はマルツパーツで小型スピーカーを購入しました)
注意してほしい点として、この記事では “SoftwareSerial.h” のライブラリを利用します。
プログラム
テストプログラムを下記に記述します。
最初に003番の曲が流れます。
play_file(0x01,0x03);
のところで、play_file(0x01,0x01);と変更すると001番目の音楽が流れます。
このプログラムでは、音量と次、前の音楽ファイルの再生、再生/一時停止の機能をつけています。
その他は、マニュアルを参照してください。
#include <SoftwareSerial.h> #define HEAD 0x7E #define END 0xEF SoftwareSerial MK156(10, 11); // RX, TX int inputvalue = 0; // 受信データ用 void setup() { Serial.begin(9600); MK156.begin(9600); Serial.println("volume: up='q' down='a'"); Serial.println("music: next music='w' before music='s'"); Serial.println("play or stop: 'z'"); //play(); play_file(0x01,0x03);//ディレクトリ,ファイル } void loop() { if (Serial.available() > 0) { // 受信したデータが存在する inputvalue = Serial.read(); // 受信データを読み込む switch(inputvalue){ case 'q'://音量増 command(0x05); break; case 'a'://音量減 command(0x06); break; case 'w'://次のファイルを再生 command(0x03); break; case 's'://前のファイルを再生 command(0x04); break; case 'z'://再生/一時停止 command(0x0c); break; } } } /*音楽を選択して再生*/ //arg_folder (ディレクトリ名)01~99まで指定可能 //arg_file (音楽ファイル名)001~255まで指定可能 void play_file(uint8_t arg_folder, uint8_t arg_file){ MK156.write(HEAD); MK156.write(0x04); MK156.write(0x42); MK156.write(arg_folder); MK156.write(arg_file); MK156.write(END); } /*コマンド*/ //音量 //0x05 1ステップ増 //0x06 1ステップ減 //music //0x03 次の音楽再生 //0x04 前の音楽再生 //play music //0x0c 再生/一時停止 //0x01 再生 //0x02 一時停止 //0x0e 停止 void command(uint8_t arg_command){ MK156.write(HEAD); MK156.write(0x02); MK156.write(arg_command); MK156.write(END); }
ArduinoとMK-156の接続方法は、
MK-156 Arduino
RXDピン ー 11ピン(TXD)
TXDピン ー 10ピン(RXD)
としてください。
実行結果
※音量が小さいので注意
センサーの値を読み取ってそこから効果音とかでたら面白そう
参考文献
- AVRマイコン総合スレ Part37 http://wc2014.2ch.net/test/read.cgi/denki/1455035922/l50
- マイコンキットドットコム MK-156マニュアル http://www.mycomkits.com/reference/MK156manual.pdf
コメント
はじめましてタカハシと申します。貴ブログを参考にarduinoでmk156を動作させることができました。
しかし間違っていると思われる箇所があると思うので指摘させていただきます。
・mk156のRxとTxが逆
・シリアル通信のピンがRx→Rx、Tx→TxではなくRx→Tx、Tx→Rx
の二点です。ご確認くださいませ。
お読み頂きありがとうございます。また、ご指摘ありがとうございました。
早速、MK-156とArduinoの接続の箇所を修正いたしました。
これからもよろしくお願いします。