Help us understand the problem. What is going on with this article?

obniz+距離センサー+MP3モジュールでAmazon Echoを起動させる

Amazon Echo買ったらやっぱり音声受付システム作りたいですよね?
そして、センサー使って自動でスキル起動させたいですよね?

ということで、周回遅れのネタですが、以下の記事にインスパイアされて、obnizでやってみました

使ったもの

IMG_2067.JPG
※配線汚くてごめんなさい

動画

alexaとgoogle homeでAPL対応音声受付システムをvoiceflowで作ってみた+距離センサーによるスキル自動起動付き

コード

50cmの距離で5秒間というのが基準です。配線はコードを参照してください。

とりあえず手元のMacで動かしてます。そのうちRPi Zero Wに移す予定。

ロジックはM5Stackと超音波距離センサーでAmazon Echoを起動させるを大いに参考にさせてもらいました。ありがとうこざいます。

$ npm init
$ npm install obniz —-save
index.js
var Obniz = require("obniz");
var obniz = new Obniz("OBNIZ_ID_HERE");

const DISTANCE = 500; 
const DETECT_COUNT = 5;

obniz.onconnect = async function () {

  // mp3初期化
  const mp3 = obniz.wired("Grove_MP3", { gnd: 5, vcc: 6, mp3_rx: 7, mp3_tx: 8 });
  await mp3.initWait();

  // 距離センサー初期化
  const hcsr04 = obniz.wired("HC-SR04", {gnd:0, echo:1, trigger:2, vcc:3});
  hcsr04.temp = 20;

  let sayFlg = false;
  let count = 0;

  // ループ
  while(true) {

    let avg = 0;
    let cnt = 0;

    for (let i=0; i<3; i++) { // measure three time. and calculate average
      const val = await hcsr04.measureWait();
      if (val) {
        cnt++;
        avg += val;
      }
    }
    if (cnt > 1) {
      avg /= cnt;
    }

    if (!sayFlg) {
      if (avg < DISTANCE) {
        count++;
        if (count >= DETECT_COUNT) {
          sayFlg = true;
          count = 0;
          await mp3.play(1);
        }
      } else {
        count = 0;
      }
    } else {
      if (avg > DISTANCE) {
        count++;
        if (count >= DETECT_COUNT) {
          sayFlg = false;
          count = 0;
        }
      } else {
        count = 0;
      }
    }

    console.log("----------------")
    console.log(`DISTANCE: ${avg}`);
    console.log(`COUNT: ${count}`);
    console.log(`SAYFLG: ${sayFlg}`);

    await obniz.wait(1000);
  }
}

実行

$ node index.js
DISTANCE: 307.03373200276
COUNT: 0
SAYFLG: true
----------------
DISTANCE: 308.4072286603679
COUNT: 0
SAYFLG: true
・・・

Alexaスキルはこの話の本質ではないので割愛します。詳細は以下をご覧ください。

https://kun432.hatenablog.com/entry/aajug_20190410_lt

その他

  • Amazon Echoを起動するための音声はAmazon Pollyで作りました。
  • 思いのほかスピーカーからの音声が小さかったので、ffmpegでmp3ファイルの音量を上げてます。
  • 距離センサーの精度は少し微妙ですが、こんなものなのかなという印象です。

まとめ

Alexaスキルと同じNode.jsで書けるので違うこと覚えなくて良いですし(とはいいつつ今回はノンコーディングで作ったスキルですが)、公式にサンプルコードもたくさんあるので、私のような見よう見まねでコード書いてるレベルだと非常に助かります。

他のセンサーとかもそのうち試してみたいと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away