家に帰っても返事はありません
私は独り身のため、家に帰って「ただいま」と言っても、「おかえり」は返ってきません。
そこで、家に帰ったタイミングでテンションが上がるように、玄関で歓声を浴びることにしました。
HC-SR04という超音波センサー(写真上側)を用いて距離を測ることで、玄関を通ったかどうかを判断しました。
作成したもの
obnizに超音波センサーを繋いで、一定の距離より近くを通ると音声ファイルが自動的に流れるものを作成しました。
obnizとは、Wi-Fi経由で専用のクラウドに接続、インターネット経由で電子部品を操作できる開発ボードになります。
流す音声はリンク先にある「スタジアムの歓声1」です。
実装
コードまとめ
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や温度センサーなども使用できるので、触ってみようと思います。