概要
DIYで音声を自在に扱うことができると、作れるものの幅が広がって面白いです。
ただ、Arduino単体では、「tone関数」等を利用して簡単な音階を鳴らすことはできるのですが、「音声」を扱うことは難しいです。
そこで今回は、「DFPlayer mini」というモジュールを使用してみようと思います。
このモジュールは、「MP3音声を記録したmicroSDカード」を取り付けることで、音声を流すことができます。
少々ややこしい作業もありますが、頑張って作ってみます。
(まだ作ってみたばかりで、バグなどがあるかも知れません。予めご了承ください。)
基本構想
5年程前、このモジュールを扱ったことがあるのですが、他のモジュール等もいろいろArduinoに繋げて同時に制御したところ、不具合が出て苦労した記憶があります。
そこで今回は、Arduino nano と組み合わせて「MP3 再生ユニット」を作り、「メインのArduino」から簡単な信号を送るだけで、使えるようにしたいと思います。こうすれば、メインのArduinoはプラグラムが複雑になったり、他のモジュールとの競合が起きたりせずに済むと思います。
なお、単体で動作確認ができた方が便利なので、タクトスイッチを1つ付けておきました。
使用したもの
使用した機器
・PC
・Arduino IDE (いつも使っているArduino用のソフト)
・Arduino書込み用ケーブル
・基板製作用品(はんだごて・ニッパー・ラジオペンチ 他)
MP3 再生ユニット に 使用したパーツ
・ユニバーサル基板(サンハヤトICB-288 or もう少し大きな基板)
・Arduino nano ( \500くらいの互換品を使用した)
・DFPlayer mini( \300くらいの互換品と¥1,050の正規品、両方を使用してみた)
・micro SD カード (32GB以下のもの)
・スピーカー(とりあえず秋月電子の112587を使用した)
・1kΩ 抵抗 x 2本
・タクトスイッチ x 1個
・ピンソケット 15ピン x 2個 (長いものをニッパーで切って使う)(秋月の分割用も便利)
・ピンソケット 8ピン x 2個
・ピンソケット 4ピン x 2個
・ピンソケット 3ピン x 1個
・電線 少々 (0.3sq 程度の適当なもの)
・はんだ 少々
・リード線 少々
メインArduinoからの 動作確認で使用したもの
・メイン用Arduino ( uno・mega・nano など、適当なもの)
・ジャンパーワイヤー 3本 (できれば、赤・黒・白)
必要なデータ
・MP3形式の音声データ (後述の通り記録する)
・ライブラリのデータ「DFPlayer-Mini-mp3」
・ユニット用のプログラム
・メインArduinoから送る用のプログラム
作業工程
MP3 再生ユニットの製作
配線図
製作の写真
↑ パーツを集める。(※写真の他に、もう少し必要)
↑ パーツを並べてみて、配置を考える。
↑ ピンソケット・1kΩ抵抗・タクトスイッチをはんだ付けする。
↑ 必要な配線を行う。( KV0.3のカラー電線を使用した)
↑ Arduino ・ DFPlayer mini ・ スピーカー を取り付けたら、基板は完成です。
音声の用意
MP3形式の音声データをmicroSDカードに書き込みます。
まだ音声データが無い場合は、とりあえず、フリーのMP3音声をインターネットからダウンロードして動作確認に使えば良いと思います。(動作確認のために4本くらいは用意しましょう。)
音声書き込みのルール
① microSDカードの中に「MP3」というフォルダを作り、その中に音声のデータを入れる。
② 音声のデータは、先頭に4桁の半角数字を入れる。
(例)「0001_起動音」・「0002_効果音A」・「0003_効果音B」 など
このルールを守って、microSDカード内にデータを保存します。
Arduino IDE に 専用ライブラリをインストール
「GitHub」というサイトから「DFPlayer-Mini-mp3」というライブラリを ZIP形式でダウンロードして、Arduino IDE にインストールします。
ダウンロードした後の手順は
① Arduino IDE を起動する。
② 「スケッチ」→「ライブラリをインクルード」→「.ZIP形式のライブラリをインストール」
③ ダウンロード済みのライブラリを選択して「開く」をクリック
あとは自動で処理してくれます。
ただし、今回ダウンロードしてインストールしたところ、エラーが出てうまくいきませんでした。
試しに以前使っていたものをインストールしてみたところ、成功したので、仮にダウンロードできるようにしておきます。
プログラムの作成・書き込み・MP3 再生ユニットの動作確認
以下のようなものを作ってみました。MP3 再生ユニットに書き込んだ後、タクトスイッチを押して動作確認をしてみて下さい。
「タクトスイッチを押した秒数」の番号の音声が再生されれば成功です。
#include "SoftwareSerial.h"
#include "DFPlayer_Mini_Mp3.h"
SoftwareSerial mySerial(10, 11); // シリアルポートの設定
void setup() {
delay(2000);
mySerial.begin(9600);
mp3_set_serial(mySerial);
mp3_set_volume(10); // 1 ~ 30 の間で自由に設定できる。
pinMode(A1, INPUT_PULLUP);
pinMode(A5, INPUT_PULLUP);
}
void loop() {
int x = 0; // 秒数カウント用
int y = 0; // 秒数カウント用
int i = 0; // for文用
///////// Mainマイコンからの信号 ((例)70ミリ秒間信号が送られ場合、「0007」が再生される。)/////////
if (digitalRead(A1) == LOW) { // もしマイコンから信号が入ったら
delay(5);
for (int i = 0; i < 20; i++) { // 最大20回繰り返す(信号が終わったら、曲を再生して、breakで抜ける。)
if (digitalRead(A1) == HIGH) { // もし信号が終わったら
mp3_play(x); // x番目の曲を再生
delay(100);
break; // ループを抜ける
}
x++; // xに 1加算
delay(10); // 10ms秒待つ
}
}
///////// 押しボタンスイッチからの信号 ((例)12秒間ボタンを押した場合、「0012」が再生される。)/////////
if (digitalRead(A5) == LOW) { // もしスイッチが押されたら
delay(500);
for (int i = 0; i < 20; i++) { // 最大20回繰り返す(スイッチが戻されたら、曲を再生して、breakで抜ける。)
if (digitalRead(A5) == HIGH) { // もしスイッチが切れたら
mp3_play(y); // y番目の曲を再生
delay(100);
break; // ループを抜ける
}
y++; // xに 1加算
delay(1000); // 10ms秒待つ
}
}
delay(1); // 1ms秒待つ
}
メインの Arduino から音声を再生させてみる
↑ 写真のように「メインのArduino」と「音声用の基板」を GND・5V・信号線 の3本で結びます。
↓ このプログラムをメインの Arduinoに書き込んで、実行してみます。
void setup() {
pinMode(2, OUTPUT); // 2番ピンから信号を出力します。
delay(3000); // MP3基板が安定するまで3秒待ちます。
}
void loop() {
/// 10msの信号を送ると 0001が再生されます。///
digitalWrite(2, LOW);
delay(10);
digitalWrite(2, HIGH);
delay(10000); //10秒間再生
/// 20msの信号を送ると 0002が再生されます。///
digitalWrite(2, LOW);
delay(20);
digitalWrite(2, HIGH);
delay(10000); //10秒間再生
/// 30msの信号を送ると 0003が再生されます。///
digitalWrite(2, LOW);
delay(30);
digitalWrite(2, HIGH);
delay(10000); //10秒間再生
/// 40msの信号を送ると 0004が再生されます。///
digitalWrite(2, LOW);
delay(40);
digitalWrite(2, HIGH);
delay(10000); //10秒間再生
/// 3ms程度の信号を送ると 0000が再生されたことになり、音声が止まります。///
digitalWrite(2, LOW);
delay(3);
digitalWrite(2, HIGH);
delay(10000); //10秒間停止
}
0001 ~ 0004 まで、10秒ずつ再生されれば成功です!
まとめ
今回は、MP3 再生ユニットを製作してみました。
作業工程が多く大変だったかと思いますが、1度うまくいけば使える範囲は広いと思います。
いろいろな工作に組み込んでみましょう。