ramshink が 2021年05月19日23時35分43秒 に編集
コメント無し
本文の変更
# やりたいこと コロナが流行しているので、外出時はもちろん在宅時も置き配で荷物を受け取りたい。 荷物の配達状況と盗難防止を実現したい。 **解決したい課題** 1. 荷物が配達されたらすぐに通知を受信したい 1. 荷物が何者かに持ち出された場合にすぐに通知を受信したい&何かしら威嚇したい 1. 自分が荷物を受け取る(自宅に持ち込む)時にはできるだけシームレスにしたい # 何を作ったか ・荷物の有無を赤外線センサで監視し、荷物が配達されたらLINEで通知する。 ・あらかじめ登録したBluetoothデバイスが近くにない状態で、荷物が所定の場所から意図せず移動されたら(盗まれたら)LINEで通知&音で威嚇する。 ・自分が荷物を受け取る(自宅に持ち込む)時は、自分のBluetoothデバイスをで認証してアラートを送信&威嚇しない。 # 動画
@[youtube](https://youtu.be/Q-Mq-XitL_0)
@[youtube](https://youtu.be/7X_ORlMClD8)
![キャプションを入力できます](https://camo.elchika.com/b1641ad2c882d31949d737a7279251079e373f2a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64313363323133392d396533612d346133342d613234362d3134643463316236356266302f38646164333966642d356466642d343865322d613730312d386137633463663465363134/) ここにカメラがあり、荷物の有無を判定しています。その他本体等は家の中です。
・1回目 荷物が置かれて一定時間がたつと、LINEで荷物が届いたことを送信。 荷物が移動されると、盗まれたと判定してLINEでアラートを送信&ブザーで威嚇音を鳴らす。 ・2回目 荷物が置かれて一定時間がたつと、LINEで荷物が届いたことを送信。 缶の中から取り出したスマートウォッチと通信してユーザの存在を判定。 荷物が移動されてもブザーで威嚇音を鳴らさす、荷物が正常に回収されたことをLINE送信。 # 部品 ・obnizBoard1Y ・赤外線センサ(P2Y0A21YK0F) ・電源 ・ブザー ・Bluetoothデバイス(スマートウォッチとか) # 設計図 ![キャプションを入力できます](<iframe width="560" height="315" src="https://www.youtube.com/embed/7X_ORlMClD8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>) # コード ```var Obniz = require("obniz"); const lineNotify = require('line-notify-nodejs')('*********************'); // LINEトークン var obniz = new Obniz("****-****"); 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); } } ``` # あとがき 今回は自分が使っているスマートウォッチはマイナーなものだったので、端末名で特定しました。 アップルウォッチなどの場合は、固有のIDで特定したほうが良いと思います。 obnizがもう一台あれば、自宅前の駐車場に停めている自家用車のホーンリレーに接続して、 荷物が盗まれそうになったらホーンを鳴らせばもっと防犯効果ありそう。