超リアルなザクを目指して!obnizでぐぽーんと音がしてモノアイが光るプロトタイプを作成!!


ぐぽーんと音がしてモノアイが光るのは男のロマン

ガンダムの色んな作品でよく見かける演出として、
格納庫でスタンバってるMS(モビルスーツ)の目が「ぐぽーん」という音と共に光る
というのがあります。(ザクやドムなどバリエーションも豊富)

この演出、個人的に大好物なんですが、いつかこれをガンプラで再現したいなーと思っています。

今回は100均で見かけたおもちゃとIoT基盤「obniz」を組み合わせてプロトタイプを作ったので記事にしていきます。

完成品(ぐぽーんとなってモノアイ光るぜ)

実際に作ったものはこんな感じで動きます。

作り方

用意する(した)もの

ハードウェア

obniz Board 1Y
 制御の要となります。
■赤色LED
 抵抗内蔵のもの。モノアイに見立てて使います。
■ブレッドボード
 配線用。そのままだとLEDからobnizへの配線が厳しかったため。
Grove_MP3
 グポーンという音を出すための装置。obnizから命令を送るとMP3ファイルを再生してくれます。
■スピーカー
 Grove_MP3に繋げて音を出してもらいます。今回はダイソーで300円のものを購入。
Keyestudio_Button
 音と光を制御するためのボタン。INPUTになれば良いのでセンサーの類でも代用できます。
プチブロック ロボットシリーズ
 ザクの代わりにするべくダイソーで購入。今回はスナイプをベースにナイトのパーツを少し混ぜてます。
■適当な箱
 作ったロボットと各種機器を固定するためのもの。ダイソーで購入。

ソフトウェア

■Node.js
 obnizの制御に使いました。

組み立て


ロボットはこんな感じで組み立てました。(LEDをモノアイ代わりにするので顔だけちょっと改造しています)


箱に穴をあけてブレッドボードと赤色LEDを取り付けます。
配線は穴を通して裏側へ。


裏側はこんな感じになってます。
(黒く塗りつぶしているのはobniz-IDを隠すためです。)


後は、LEDの位置に顔が来るようにロボットを配置して完了!
制御用プログラムを実行してボタンを押せばぐぽーんという音とともにモノアイが光ります!

制御用プログラム

obnizの制御用コードは以下の通りです。
起動後、ボタンを押すとMP3の再生とLEDの点灯処理が実行されます。
(LEDは3秒後に消えるようにしています。)

const Obniz = require('obniz');
const obniz = new Obniz('XXXX-XXXX'); // 自分のObniz_ID

const sleep = (msec) => new Promise(res => setTimeout(res, msec));

obniz.onconnect = async function () {

    // MP3プレーヤーを利用
    const mp3 = obniz.wired("Grove_MP3", { gnd: 0, vcc: 1, mp3_rx: 2, mp3_tx: 3 });
    await mp3.initWait();
    mp3.setVolume(20);

    // 赤色LEDを利用
    const led = obniz.wired("LED", { anode: 5, cathode: 6 });

    // 入力用にボタンを利用する
    const button = obniz.wired("Keyestudio_Button", {signal:9, vcc:10, gnd:11});

    // ディスプレイ
    obniz.display.clear(); // クリア
    obniz.display.print('Ready!');

    // ボタンが押されたら処理
  button.onchange = async function (pressed) {
    if (!button.isPressed) {
      //ぐぽーんという音を再生
      mp3.play(1);
      ///モノアイを点灯
      led.on();
    //3秒経ったらLEDをオフにする。
    await sleep(3000); led.off();
    }
  }

}

補足(Grove_MP3の使い方)

今回、どうしても「ぐぽーん」が聞きたかったのでobnizでMP3ファイルを再生できる機器を探したところ、
公式ドキュメントで紹介されていたGrove_MP3に行きつきました。
ただ、こいつを使うまでに色々あったので補足しておきます。

そのままではobnizに接続できない。

Grove_MP3は名前の通り、Grove規格のコネクタを持っています。
当然、付属のケーブルもGrove規格のものなのですが、obnizはGrove規格のソケットを持っていないのでそのままだと接続できません。
なので、ケーブルを別途購入しました。
GROVE - 4ピン - ジャンパオスケーブル(5本セット)

使用できるのはマイクロSDカード(8GB以下のもの)

obniz公式にSDカードという記載がありますが、実際にはマイクロSDカードを使うことになります。
容量も8GB以下しか使えないのでご注意を。

使用する際はマイクロSDカードに「MP3」というフォルダを作って「0001.mp3」みたいに数字4桁を頭につけたファイル名のMP3ファイルを格納しておけば再生できます。

プログラムの書き方

プログラム自体は以下のような形で記述します。
※音量は明示的に設定しないと最大値で再生されるので注意

const mp3 = obniz.wired("Grove_MP3", { gnd: 0, vcc: 1, mp3_rx: 2, mp3_tx: 3 });
await mp3.initWait();//初期化
mp3.setVolume(20);//音量設定(0~31)※デフォルトは31
mp3.play(1);//MP3フォルダ内の「0001」から始まるMP3ファイルを再生

最後に

今回のプロトタイプ作成ではソフトウェアではなくハードウェアに力を入れました。
初心者なりにカッコいいものができたと満足しております。
次は実際にザクのプラモデルにLEDを仕込んで「ぐぽーん」やりたいですね。