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

ramshink が 2021年05月19日23時44分38秒 に編集

コメント無し

本文の変更

# やりたいこと コロナが流行しているので、外出時はもちろん在宅時も置き配で荷物を受け取りたい。 荷物の配達状況と盗難防止を実現したい。 **解決したい課題** 1. 荷物が配達されたらすぐに通知を受信したい 1. 荷物が何者かに持ち出された場合にすぐに通知を受信したい&何かしら威嚇したい 1. 自分が荷物を受け取る(自宅に持ち込む)時にはできるだけシームレスにしたい # 何を作ったか ・荷物の有無を赤外線センサで監視し、荷物が配達されたらLINEで通知する。 ・あらかじめ登録したBluetoothデバイスが近くにない状態で、荷物が所定の場所から意図せず移動されたら(盗まれたら)LINEで通知&音で威嚇する。 ・自分が荷物を受け取る(自宅に持ち込む)時は、自分のBluetoothデバイスをで認証してアラートを送信&威嚇しない。 # 動画 @[youtube](https://youtu.be/7X_ORlMClD8)

-

![キャプションを入力できます](https://camo.elchika.com/b1641ad2c882d31949d737a7279251079e373f2a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64313363323133392d396533612d346133342d613234362d3134643463316236356266302f38646164333966642d356466642d343865322d613730312d386137633463663465363134/)

+

![キャプションを入力できます](https://camo.elchika.com/4ec26e50f0d96a50dd5a4519310d51eec32cc81f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f64313363323133392d396533612d346133342d613234362d3134643463316236356266302f39663766653733392d633332302d343931332d386330302d663131383530383662323766/)

ここにカメラがあり、荷物の有無を判定しています。その他本体等は家の中です。 ・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");

+

``` 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 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); } } ``` # あとがき

+

<困ったところ> スマートウォッチのBluetoothが意外と強く、缶の中に入れるだけでは通信してしまい動画を撮るときに苦労した。 結局、缶の内側にもアルミホイルを敷き詰めて電波の遮蔽性を高めて何とかなった。 <改善点①>

今回は自分が使っているスマートウォッチはマイナーなものだったので、端末名で特定しました。 アップルウォッチなどの場合は、固有のIDで特定したほうが良いと思います。

-

obnizがもう一台あれば、自宅前の駐車場に停めている自家用車のホーンリレー接続して、 荷物が盗まれそうになったらホーンを鳴らせばもっと防犯効果ありそう。

+

<改善点②> obnizがもう一台あれば、自宅前の駐車場に停めている自家用車のホーンリレー接続して、 荷物が盗まれそうになったらホーンを鳴らせばもっと防犯効果ありそう。