ramshinkのアイコン画像
ramshink 2021年05月19日作成 (2021年05月19日更新)
製作品 製作品 閲覧数 970
ramshink 2021年05月19日作成 (2021年05月19日更新) 製作品 製作品 閲覧数 970

宅配便の配達通知・盗難アラート

やりたいこと

荷物の配達状況通知と置き配された荷物の盗難防止をしたい。

解決したい課題

  1. 荷物が配達されたらすぐに通知を受信したい
  2. 荷物が何者かに持ち出された場合にすぐに通知を受信したい&何かしら威嚇したい
  3. 自分が荷物を受け取る(自宅に持ち込む)時にはできるだけシームレスにしたい

何を作ったか

・荷物の有無を赤外線センサで監視し、荷物が配達されたらLINEで通知する。

・あらかじめ登録したBluetoothデバイスが近くにない状態で、荷物が所定の場所から意図せず移動されたら(盗まれたら)LINEで通知&音で威嚇する。

・自分が荷物を受け取る(自宅に持ち込む)時は、自分のBluetoothデバイスをで認証してアラートを送信&威嚇しない。

動画

ここに動画が表示されます

キャプションを入力できます
ここにカメラがあり、荷物の有無を判定しています。その他本体等は家の中です。

・1回目
荷物が置かれて一定時間がたつと、LINEで荷物が届いたことを送信。
荷物が移動されると、盗まれたと判定してLINEでアラートを送信&ブザーで威嚇音を鳴らす。
・2回目
荷物が置かれて一定時間がたつと、LINEで荷物が届いたことを送信。
缶の中から取り出したスマートウォッチと通信してユーザの存在を判定。
荷物が移動されてもブザーで威嚇音を鳴らさす、荷物が正常に回収されたことをLINE送信。

部品

・obnizBoard1Y
・赤外線センサ(P2Y0A21YK0F)
・電源
・ブザー
・Bluetoothデバイス(スマートウォッチとか)

設計図

キャプションを入力できます

コード

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);
    }
}

あとがき

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

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

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

1
ログインしてコメントを投稿する

投稿者の人気記事