8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【obniz×LINE】音と光を使い侵入防止システムを製作する

Last updated at Posted at 2020-07-29

#目的
私の実家では、夏場に玄関を開放し風通しを良くしていると、野良猫が侵入し、食べ物が被害にあいます、そこで今回はobnizで侵入防止システムを製作したいと思います。(効果は保証できません)

#できたもの
距離センサーの50㎝以内に入り5秒経過したら、LEDとスピーカーで警告し、システムが作動したことをLINE Messaging APIを使用してプッシュ通知します。映像ではわかりませんが、スピーカーから11khzの音を鳴らしてます。

#構成

##全体像
今回製作したシステムの全体像です。
Image from Gyazo

##配線図
obnizの配線図です。
Untitled Sketch_ブレッドボード.png

##使用部品

##環境

  • node.js v14.5.0
  • @line/bot-sdk 7.0.0
  • express 4.17.1
  • obniz 3.7.0

#コード

index.js
'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機能を搭載できたらいいなと思いました。

8
0
0

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
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?