#目的
私の実家では、夏場に玄関を開放し風通しを良くしていると、野良猫が侵入し、食べ物が被害にあいます、そこで今回はobnizで侵入防止システムを製作したいと思います。(効果は保証できません)
#できたもの
距離センサーの50㎝以内に入り5秒経過したら、LEDとスピーカーで警告し、システムが作動したことをLINE Messaging APIを使用してプッシュ通知します。映像ではわかりませんが、スピーカーから11khzの音を鳴らしてます。
#構成野生動物の侵入防止システムを作ってみました!設置してみたら効果あるかな?https://t.co/2TJMhJLdeY#obniz #protoout
— Toshiki (@Hirasawa1987) July 29, 2020
https://t.co/fnvjGlw3V1 pic.twitter.com/J7YWuMazsL
##使用部品
-
obniz Board 1Y
- https://obniz.io/ja/products/obnizboard1y/
- 6,300円(税抜)
-
抵抗内蔵5mm青色LED(5V用) OSB5SA5B64A-5V
-
圧電スピーカー(圧電サウンダ)(13mm)PKM13EPYH4000-A0
-
シャープ測距モジュール GP2Y0A21YK
-
100均のタッパー
-
USB タイプCのUSB2.0ケーブル(家にあったものを使用)
-
モバイルバッテリー(家にあったものを使用)
##環境
- node.js v14.5.0
- @line/bot-sdk 7.0.0
- express 4.17.1
- obniz 3.7.0
#コード
'use strcit';
const Obniz = require('obniz');
const obniz = new Obniz('××××-××××'); // Obniz_IDに自分のIDを入れます
const line = require("@line/bot-sdk");
const express = require("express");
const PORT = process.env.PORT || 3030;
const config = {
channelSecret: '{チャネルシークレット}',
channelAccessToken: '{アクセストークン}'
};
const userId = '{ユーザーid}';
const app = express();
app.post('/webhook', line.middleware(config), (req, res) => {
console.log(req.body.events);
Promise
.all(req.body.events.map(handleEvent))
.then((result) => res.json(result));
});
const client = new line.Client(config);
obniz.onconnect = async function () {
// 各センサーを呼び出す
// 距離センサーを呼び出す
const GP2Y0 = obniz.wired("GP2Y0A21YK0F", {
vcc:0,
gnd:1,
signal:2
});
// 指す場所を変えているので対応した数字に変更
// LEDを呼び出す
const led = obniz.wired('LED', {
anode:5,
cathode:6
});
// スピーカーを呼び出す
const speaker = obniz.wired('Speaker', {
signal:10,
gnd:11
});
obniz.display.clear(); // 一旦クリアする
obniz.display.print('Hello obniz!'); // Hello obniz!という文字を出す
// setIntervalで間隔を作る
setInterval(async function () {
const distance = await GP2Y0.getWait();
// 距離(mm)をコンソールに表示
console.log(distance + ' mm');
// displayに反映
obniz.display.clear(); // 一旦クリアする
obniz.display.print(distance + ' mm'); // 英語が出力できる
// 近づいてきたら判定する
if (distance < 500) count++;
else count = 0;
switch(count) {
case 5:
obniz.display.clear(); // 一旦クリアする
speaker.play(11000); // スピーカー On 11khz
led.on();// LED ON
//LINEにメッセージ送信
await client.pushMessage(userId, {
type: 'text',
text: '侵入防止システムを発動しました',
});
break;
default:
speaker.stop();// スピーカー OFF
led.off();// LED OFF
}
}, 1000); // 1000ミリ秒 = 1秒
};
app.listen(PORT);
console.log(`Server running at ${PORT}`);
#参考にした記事
LINEmessagingAPIの基礎部分で参考にしました。
1時間でLINE BOTを作るハンズオン (資料+レポート) in Node学園祭2017 #nodefest
Push通知の部分を参考にしました。
[LINE BOTでラズパイから部屋の温度を教えてもらう【Push API】【Node.js】]
(https://qiita.com/mochifuture/items/13bed5e961a1232a660e)
#失敗
LEDはフルカラーを使用し色を使い分ける予定でしたが、途中でショートさせて焼いてしまいました。ですので、今回は青色のLEDを使用しました。
#終わりに
今回は距離センサを使ったので遮るものすべてにはんのうしてしまいます。
公式サイトでは、カメラで画像認識を使用している作例もあり、特定の対象物にのみ反応するようにAI機能を搭載できたらいいなと思いました。