Help us understand the problem. What is going on with this article?

振り向かずに「俺に何か用かい?さっきから尾けてきてるね」とシティーハンターっぽく言えるようになるプロダクト

目的

 昨今ソーシャルディスタンスと言われ、人と人との距離があくようになりましたね。
 そんな中で後ろから近づいてくる人がいたら、怖いですよね。
 早く気づいて、先手を打ってシティーハンターっぽく話しかける準備をするためのツールを作りました。
 (セリフはお好みです。)
 そう、まずは気づくことが大事なのです!

 シティーハンターって何?と思った方はこちら

出来上がったもの(CHになれたか)

 こうしてみると?


 
 こうなります↓ あまりメッセージがないのでキャプチャ
 ushiro.PNG

 ★参考 取得した距離とまるめた後の距離
 image.png

 5秒単位で後ろに超音波を飛ばして、その跳ね返りから距離を測定するセンサーを使いました!
 ★参考URL
  超音波センサー

環境

 Node.js v14.9.0
 Visual Studio Code v1.49.3
 @line/bot-sdk

使い方

 1.情報を受けるプログラムを起動しておく
 2.リュックからひょっこりセンサーを出しておく
   (obnizは電源にはつないカバンの中へ。センサーはボタンかな?と思われそう。)
 3.後ろから人が尾けてくる
 4.最後は決め台詞でどうぞ!

処理の流れ

 センサーで検知!
 →obnizで拾う
 →サーバのプログラムで受ける
 →LINEサーバ
 →LINEのトーク画面にプッシュ!

今回できなかったけど、やってみたいこと

 1.セリフは自分→シティーハンターの音声を再生
 2.コードをさしっぱなし→電池式
 3.センサーで受けたことに対して、動作も何か入れたい

ソース

alert_distance
// ########################################
//          obniz処理部分
//  Obniz_ID:自分のobniz ID(XXXX-XXXX)
// ########################################
const fs = require('fs');
const Obniz = require('obniz');

// 外だしファイルからobniz_idを取得
const obniz_setting = JSON.parse(fs.readFileSync('./credential/obniz.json', 'utf8'));

const obniz = new Obniz(obniz_setting.id);

// obnizと接続確立したとき
obniz.onconnect = async () => {
    obniz.display.clear();
    obniz.display.print('obniz Ready');
}
obniz.onconnect = async function () {
    // 超音波測距センサを利用する
    const hcsr04 = obniz.wired('HC-SR04', { gnd: 0, echo: 1, trigger: 2, vcc: 3 });

    // ディスプレイ
    obniz.display.clear(); // クリア
    obniz.display.print('Stay away!');
    //obniz.display.print('Hello obniz!'); // Hello obniz! と表示

    // setIntervalで一定間隔で処理
    setInterval(async function () {
        // 距離を取得
        let distance = await hcsr04.measureWait();
        console.log(distance);
        // mに変更 小数点以下の桁が多かったので、第1位で切り捨て
        let distance_m = Math.floor(distance / 100) / 10;
        // 距離(m)をターミナルに表示
        console.log(distance_m + ' m');
        // obnizディスプレイに表示
        // 一度消してから距離+mmの単位を表示
        obniz.display.clear();
        obniz.display.print(distance_m + ' m');
        const SOCIAL_DISTANCE = 2.0;
        // 距離が一般的なソーシャルディスタンス未満かどうかの判定
        if (distance_m < SOCIAL_DISTANCE) { 
            // obnizディスプレイに近接していることを表示
            obniz.display.clear();
            obniz.display.print('Too close!!');
            // LINEにメッセージをプッシュする関数を呼び出し
            await pushAlert(distance_m);
        }

    }, 5000); // 5000ミリ秒 = 5秒おきに実行
}


// ########################################
//          LINEBot イベント処理部分
//  channelSecret:LINE Developers → チャネル基本設定 → チャネルシークレット
//  channelAccessToken:LINE Developers → Messaging API設定 → チャネルアクセストークン(長期)
// ########################################
// Messaging APIで利用するクレデンシャル(秘匿情報)です。
const credential = JSON.parse(fs.readFileSync('./credential/credential.json', 'utf8'));
const user = JSON.parse(fs.readFileSync('./credential/line_user.json', 'utf8'));

const config = {
    channelSecret: credential.channelSecret,
    channelAccessToken: credential.channelAccessToken
};
const userId = user.source.userId;

const line = require('@line/bot-sdk');
const client = new line.Client(config);
// ソーシャルディスタンス内に人が近づいたらメッセージプッシュ!Messaging APIイベントを渡されて処理するところ
function pushAlert(distance_m){
    try{
        client.pushMessage(userId, {
                type: 'text',
                text: '後ろに、、、いるよ、、、距離 '+ distance_m +'m',
        });
    }catch(err){
        console.log(err.name +  ': ' + err.message);
        process.exit(-1);
    }
    // resolveを返す
    return Promise.resolve(null);
};
Sugizo50073508
肉と酒と、あとカレーを愛するオニイサンです。 美味しいお店や初めて訪れた街のお店を素早く見つけるには?を考えています。 最近プログラムを書くことが減ってましたが、再燃しています。
protoout-studio
プロトアウトスタジオは日本初のプロトタイピング専門スクールです。プログラミングだけではなく、企画力と発信力を身に付けて”自分で課題を見つけて実装し、発信し続ける人”を育成しています。 圧倒的なアウトプット力を身に付けましょう。 学生募集中です。
https://protoout.studio
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away