39
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

独り身で「おかえり」もなく寂しいので、玄関で歓声を浴びることにした

Posted at

家に帰っても返事はありません

私は独り身のため、家に帰って「ただいま」と言っても、「おかえり」は返ってきません。
そこで、家に帰ったタイミングでテンションが上がるように、玄関で歓声を浴びることにしました。

HC-SR04という超音波センサー(写真上側)を用いて距離を測ることで、玄関を通ったかどうかを判断しました。

作成したもの

obnizに超音波センサーを繋いで、一定の距離より近くを通ると音声ファイルが自動的に流れるものを作成しました。

イメージは以下の通りです。

obnizとは、Wi-Fi経由で専用のクラウドに接続、インターネット経由で電子部品を操作できる開発ボードになります。

流す音声はリンク先にある「スタジアムの歓声1」です。

実装

コードまとめ
obniz.js
const Obniz = require("obniz");
const { exec } = require("child_process");
const obniz = new Obniz("ID"); // 自分のIDを入れます

obniz.onconnect = async function () {
  // 超音波測距センサを利用する
  const hcsr04 = obniz.wired("HC-SR04", {
    gnd: 0,
    echo: 1,
    trigger: 2,
    vcc: 3,
  });

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

  // setIntervalで一定間隔で処理
  setInterval(async function () {
    // 距離を取得
    let distance = await hcsr04.measureWait();
    // 距離(mm)をターミナルに表示
    console.log(distance + " mm");

    // obnizディスプレイに表示
    obniz.display.clear();
    obniz.display.print(distance + " mm");

    // 距離が1000mm未満かどうかの判定
    if (distance < 1000) {
      // 1000mm = 100cm 以下の場合

      // 音声ファイルを再生 (MacOS用に修正)
      exec("afplay sound.mp3", (error) => {
        if (error) {
          console.error(`音声再生エラー: ${error}`);
        }
      });

      // obnizディスプレイに近接していることを表示
      obniz.display.clear();
      obniz.display.print("Too close!!");
    }
  }, 1000); // 1000ミリ秒 = 1秒おきに実行
};

準備

obnizのライブラリをインストールしておきます。

npm install obniz

モジュールのインポート

IDには自分のObniz IDを入れてください。

const Obniz = require("obniz");
const { exec } = require("child_process");
const obniz = new Obniz("id");

超音波センサーの接続設定

超音波距離センサ「HC-SR04」をObnizに接続します。gnd, echo, trigger, vcc のピンが、それぞれ指定された番号に対応して接続されます。

const hcsr04 = obniz.wired("HC-SR04", {
  gnd: 0,
  echo: 1,
  trigger: 2,
  vcc: 3,
});

距離の測定と表示

超音波センサーを用いて距離を測定し、測定した結果をターミナルとディスプレイに表示されます。

setInterval(async function () {
  let distance = await hcsr04.measureWait();
  console.log(distance + " mm");
  obniz.display.clear();
  obniz.display.print(distance + " mm");

距離が1000mm未満の場合音声ファイルを再生

測定した距離が1000mm(100cm)未満かどうかを判定し、距離が近い場合に音声ファイルを再生します。
距離が1000mm未満の場合は「Too close!!」という警告をディスプレイに表示します。

if (distance < 1000) {
  exec("afplay sound.mp3", (error) => {
    if (error) {
      console.error(`音声再生エラー: ${error}`);
    }
  });
  obniz.display.clear();
  obniz.display.print("Too close!!");
}

まとめ

今回始めてobnizを使って見ましたが、普段ハードを触らない私でも、思っていた以上に簡単にできました。超音波センサー以外にもLEDや温度センサーなども使用できるので、触ってみようと思います。

39
17
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?