編集履歴一覧に戻る
ramshinkのアイコン画像

ramshink が 2021年05月19日22時50分57秒 に編集

初版

タイトルの変更

+

置き配の荷物監視&アラート

タグの変更

+

obniz

+

LINE

+

BLE

+

センサー

本文の変更

+

# やりたいこと コロナが流行しているので、外出時はもちろん在宅時も置き配で荷物を受け取りたい。 **解決したい課題** 1. 荷物が配達されたらすぐに通知を受信したい 1. 荷物が何者かに持ち出された場合にすぐに通知を受信したい&(できれば)何かしら威嚇したい 1. 自分が荷物を受け取る(自宅に持ち込む)時にはできるだけシームレスにしたい # 何を作ったか ・荷物の有無を赤外線センサで監視し、荷物が所定の場所に置かれたらLINEで通知する。 ・自分が荷物を受け取る(自宅に持ち込む)時は、あらかじめ登録した自分のBluetoothデバイスを鍵として使用し、 アラートを送信しない。 ・あらかじめ登録したBluetoothデバイスが近くにない状態で、 荷物が所定の場所から意図せず移動されたら(盗まれたら)LINEで通知する。 # 動画 @[youtube](https://youtu.be/Q-Mq-XitL_0) ・1回目 荷物が置かれて一定時間がたつと、LINEで荷物が届いたことを送信。 荷物が移動されると、盗まれたと判定してLINEでアラートを送信&ブザーで威嚇音を鳴らす。 ・2回目 荷物が置かれて一定時間がたつと、LINEで荷物が届いたことを送信。 缶の中から取り出したスマートウォッチと通信してユーザを特定。 荷物が移動されてもブザーで威嚇音を鳴らさす、荷物が正常に回収されたことをLINE送信。 # 部品 ・obnizBoard1Y ・赤外線センサ(P2Y0A21YK0F) ・電源(モバイルバッテリー) ・ブザー ・Bluetoothデバイス(スマートウォッチとか) # 設計図 ![キャプションを入力できます](https://camo.elchika.com/75be04c48f12ac7d5f5d0dd4ac278b6706ff951e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64313363323133392d396533612d346133342d613234362d3134643463316236356266302f33323533666261622d303030612d346339302d386538322d313662326466333934393833/) # コード ```var Obniz = require("obniz"); const lineNotify = require('line-notify-nodejs')('rPbuiD3qFcKrRMlBjiUIfO5eMnUXthv0x7hlDXKe5C9'); // 先ほど生成したトークン var obniz = new Obniz("9364-1479"); var count //荷物あり検出用カウンタ var count2 //荷物なし検出用カウンタ var status //荷物状態 荷物なし:0 荷物あり:1 var user_status //ユーザー状態 いる:1 いない:0 var dist var flag //ループ条件 count = 0 count2 = 0 status = 0 dist = 100 user_status = 0 flag = 1 obniz.onconnect = async function () { const led = obniz.wired('LED', { anode: 10, cathode: 11 }); //LED利用 const sensor = obniz.wired("GP2Y0A21YK0F", {vcc:0, gnd:1, signal:2}) await obniz.ble.initWait(); var target = { localName: "HUAWEI Band 2-b5c" }; while (flag) { var distance = await sensor.getWait(); console.log("distance " + distance + " mm") console.log("count: " + count) console.log("count2: " + count2) console.log("status: " + status) if(distance < dist){ count = count + 1 if(count === 10){ status = 1 lineNotify.notify({ message: '荷物が届きました。' }) } }else{ count = 0 } if(distance > dist && status === 1){ count2 = count2 + 1 if(count2 === 5){ obniz.ble.scan.onfind = async function(peripheral){ console.log("デバイスあり") user_status = 1 }; obniz.ble.scan.onfinish = async function(peripherals, error){ console.log("デバイスなし") }; await obniz.ble.scan.startWait(target); await obniz.wait(2000); await obniz.ble.scan.endWait(); if(user_status === 0){ lineNotify.notify({ message: '荷物が何者かに盗まれました' }) led.on(); await obniz.wait(100); led.off(); await obniz.wait(10); led.on(); await obniz.wait(100); led.off(); await obniz.wait(10); led.on(); await obniz.wait(100); led.off(); await obniz.wait(10); led.on(); await obniz.wait(100); led.off(); await obniz.wait(10); led.on(); await obniz.wait(100); led.off(); } if(user_status === 1){ lineNotify.notify({ message: '荷物がユーザによって回収されました' }) } status = 0 count = 0 count2 = 0 user_status = 0 } } await obniz.wait(100); } } ```