MP3 再生ユニットを作ってみる(Arduino使用)

 DIY 記事  ー 要素の製作

概要

 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形式のライブラリをインストール」
③ ダウンロード済みのライブラリを選択して「開く」をクリック
あとは自動で処理してくれます。

 ただし、今回ダウンロードしてインストールしたところ、エラーが出てうまくいきませんでした。
試しに以前使っていたものをインストールしてみたところ、成功したので、仮にダウンロードできるようにしておきます。

DFPlayer_Mini_mp3.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度うまくいけば使える範囲は広いと思います。
 いろいろな工作に組み込んでみましょう。

タイトルとURLをコピーしました