子どもの勉強監督botをLINEで実装してみた


自己紹介

大学時代C言語を学んでから十数年以来のプログラミングを始めています。
本業はweb制作で、ホームページとLINE連携の需要がとても多く、LINEbotに興味を持ちました。
今回も練習した事のメモです。

やったこと

子どもが勉強中にあまりにもふらふらするので、
1.obnizを机に設置
2.子供との距離を測る
3.一定距離以上離れたら遊んでいるとみなし
 ーLINEでお知らせを受け取る
 ーLEDを光らせる

obnizで使用した部品

超音波測距センサー
フルカラーLED WS2811

obnizの超音波距離センサーで一定期間は離れるとLEDが光る

という部分の動作確認です。


const obniz = new Obniz('obnizID');

obnizIDを書き換えます。


const Obniz = require('obniz');
const obniz = new Obniz('obnizID');

obniz.onconnect = async() => {
    // 超音波測距センサを利用
    const hcsr04 = obniz.wired('HC-SR04', { gnd: 11, echo: 10, trigger: 9, vcc: 8 });

    // LEDを利用
    const rgbled = obniz.wired('WS2811', { gnd: 0, vcc: 1, din: 2 });

    // obnizディスプレイ(初期表示)
    obniz.display.clear();
    obniz.display.print('obniz Ready');

    // setIntervalで定期実行
    setInterval(async() => {
        // 距離を取得
        let distance = await hcsr04.measureWait();
        // 小数点以下がたくさんあるのでここでは整数に
        distance = Math.floor(distance);
        // 距離をコンソールに表示
        console.log(distance + ' mm');
        // 距離をobnizディスプレイに表示
        obniz.display.clear();
        obniz.display.print(distance + ' mm');
        // 距離によって判定
        if (distance > 500.0) {
            // 500mm = 50cm 以上の場合 obnizディスプレイ表示
            obniz.display.clear();
            obniz.display.print('Too distance');
            // LEDオン
            rgbled.rgbs([
                [0xFF, 0x00, 0x00], // red
                [0x00, 0x00, 0xFF] // blue
            ])
        } else {
            // 500mm未満の時は色が反転
            rgbled.rgbs([
                [0x00, 0x00, 0xFF],
                [0xFF, 0x00, 0x00]
            ])
        }
    }, 5000); // 5000ミリ秒 = 5秒ごとに実行
};

LINEbotと接続

ここがなかなかうまくいかず、苦労しました。

エラーが結構出まして。
どこまで動いているのか切り分ける為、細かくコードの中に


console.log('Hello2!');

を入れていきました。
そうする事で、Hello2!が表示されたかされていないのかで、どこの記述が怪しいのか判別する事が出来ました。

時間かかりましたが、ようやくエラー表示が消え距離が出力されるようになりました。
そして、ngrokを実行して、LINE botのwebhookへ入力すると

今回は、子どもとobnizの距離を測り500mm以内離れた時にだけ、LINEに通知が送られるようにしました。

まとめ

今回は超音波測距センサーってなんか凄いな!と思い、超音波測距センサー×LINEを実装したのですが
最初に超音波距離センサーを知った時の概念で、一定期間距離が近づいたらアクションを起こすという発想でいたのですが、距離が離れた時にアクションを起こすというのも面白いなと思いました。

フラフラする子供が近くからいなくなったらLINEで通知するとか。
距離×LINEで実生活に役立つbotを作れそうだなとおもいました。