振り向かずに「俺に何か用かい?さっきから尾けてきてるね」とシティーハンターっぽく言えるようになるプロダクト
目的
昨今ソーシャルディスタンスと言われ、人と人との距離があくようになりましたね。
そんな中で後ろから近づいてくる人がいたら、怖いですよね。
早く気づいて、先手を打ってシティーハンターっぽく話しかける準備をするためのツールを作りました。
(セリフはお好みです。)
そう、まずは気づくことが大事なのです!
シティーハンターって何?と思った方はこちら
出来上がったもの(CHになれたか)
こうしてみると?
何かを近づけてみる pic.twitter.com/V8FJNOvpCJ
— Sugizo (@Sugizo50073508) October 17, 2020
こうなります↓ あまりメッセージがないのでキャプチャ
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);
};
// ########################################
// 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);
};
Author And Source
この問題について(振り向かずに「俺に何か用かい?さっきから尾けてきてるね」とシティーハンターっぽく言えるようになるプロダクト), 我々は、より多くの情報をここで見つけました https://qiita.com/Sugizo50073508/items/df81d8c11f498cfa6287著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .