1.はじめに
 コロナによる緊急事態宣言により帰省が出来なくなり、一人住まいの母親とは電話では話しているものの全く顔を合わせる事もなく半年以上経ってしまいました。
 母親は高齢のためガラケーを使っておりしかもメールやSNSも全く使えない世代。今更メールやLINEの使い方を教えることもできない。
 一時期Apple Watchを持ってもらおうかとも考えたが、転倒検知がかなりの勢いで倒れないと検知しないみたいなので断念した。
 今回はobnizに超音波距離センサー(HC-SR04)を組み合わせ、一定時間距離に変化がなければ母親の具合が悪くなっているとみなして、twilioを使用しショートメッセージを自分のスマホに送信する様にした。
2.環境
ハードウェア
  obniz 1Y
  HC-SR04
ソフトウェア
  node.js v16.0.0
3.obniz
 非常に簡単なセットアップとJavaScriptで操作できるため私の様な初心者にはありがたい仕組みであった。
4.twilio
https://cloudapi.kddi-web.com/availability 
twilioの利用はいたって簡単で。
 無料アカウント登録→アカウントSIDとAUTHTOKENを取得→トライアル発信用番号を取得あとはコードを書くだけである。
5.node.js
obnizを利用するために以下のコマンドを実施
npm install obniz
twilioを利用するために以下のコマンドを実施
npm install twilio
 ソースは以下の通り。
const Obniz = require('obniz');
const obniz = new Obniz('foo'); // Obniz_IDに自分のIDを入れます
const accountSid = "hoge"; //twilioのアカウントSID
const authToken = "hogehoge"; //twilioのAUTHTOKEN
const client = require('twilio')(accountSid, authToken);
let pre_distance = 0;
obniz.onconnect = async function () {
    // 超音波測距センサを利用する
    const hcsr04 = obniz.wired('HC-SR04', { gnd: 0, echo: 1, trigger: 2, vcc: 3 });
    obniz.display.clear(); // クリア
    // setIntervalで一定間隔で処理
    setInterval(async function () {
        // 距離を取得
        let distance = await hcsr04.measureWait();
        // そのままだと小数点以下の桁数がやたら多いので整数に丸めてもよい
        distance = Math.floor(distance);
        // 距離(mm)をターミナルに表示
        console.log(distance + ' mm');
        let diff = pre_distance - distance 
        console.log('今回' + distance + ' mm');
        console.log('前回' + pre_distance + 'mm');
        console.log('差分' + diff + 'mm');
        if ( diff < 40) {
            client.messages
            .create({
                body: '実家に電話してください。',
                from: 'トライアル用発信番号',
                to: '送信先番号'
            })
            .then(message => console.log(message.sid));
        }
        pre_distance = distance;
    }, 2000); // 1000ミリ秒 = 2秒おきに実行
}
6.結果
 距離測定を2秒おきに行い前回との差分が40mm未満だとショートメッセージを発信する。
 HC-SR04は測定時の誤差がそれなりにあるので40mm未満は誤差と考えた。私の部屋では20mm程度の揺らぎがあった。
 今回は2秒としたが、実際には1時間〜2時間のインターバルで屋内の数カ所、居間、台所、寝室、トイレ前に設置し、全てのobnizで距離測定の変化がない時にアラートをあげるようにしたい。
                       
                           
                       
                     ↧