ハッカソン!人生2回目#protoout
— sawa (@sawakoshi_yy) October 24, 2020
アイデア作成方法
①世の中で「強度」が強いキーワードと、強度が弱いキーワードを「適当」に記載
②「カラオケをする」・「カラオケに行く(する)まで」・「カラオケでの出来事」・「カラオケ後の出来事」・「カラオケルームの使い方」なキーワードをみんなで出していく
③ ①×②の組み合わせを作っていく
④ ③のアイデアを考える
自チームのアイデア検討
・合コンBot
コロナの影響でカラオケもソーシャルディスタンス
遠くの人とは話せない
↓
ある程度の時間?光が明るすぎたり、距離が離れすぎてると、アドバイス+きっかけを持たせてくれるLINEBot
2人の思い出に残りそうな(写真にも残せそうな)ドリンクをお店からサービス
感想:使える技術が少ないと考える幅も狭い。。
コード
明るさ1回取得
const voltage3 = obniz.ad10.start();
明るさ変化するたびに取得
obniz.ad10.start((voltage) => {
// センサーの値が変わるたびに実行される
console.log(`changed to ${voltage} v`);
if(voltage>4.9 && ltflg==false){
ltflg=true;
pushAlert(distance_m);
console.log(`明るくなった`);
}
if(ltflg==true && voltage<4.5){
ltflg=false;
console.log(`暗くなった`);
}
});
・LINEのユーザーIDは、同じユーザーであっても取得元によりIDが変わる
→相手先コードと同じ
・自分以外のユーザーIDの取り方
相手のリクエストを受け付けるBot作る
Botを友達追加してもらう
なにか投稿してもらう
VSコードでログ見る
めっちゃアドバイスしてくれる。。#protoout pic.twitter.com/EA6NRsLTF1
— sawa (@sawakoshi_yy) October 24, 2020
池の水全部抜く。
— sawa (@sawakoshi_yy) October 24, 2020
手元にあるセンサ全部使う。#protoout pic.twitter.com/gxVHGS4NAc
コード
// ########################################
// obniz処理部分
// Obniz_ID:自分のobniz ID(XXXX-XXXX)
// ########################################
const fs = require('fs');
const Obniz = require('obniz');
const line = require('@line/bot-sdk');
let ltflg = false;
let message = '';
// 外だしファイルからobniz_idを取得
//const obniz_setting = JSON.parse(fs.readFileSync('./credential/obniz.json', 'utf8'));
const obniz = new Obniz('obnizの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 });
// 温度センサ
const tempsens = obniz.wired('LM60', { gnd: 4, output: 5, vcc: 6 });
// ディスプレイ
obniz.display.clear(); // クリア
obniz.display.print('Stay away!');
//obniz.display.print('Hello obniz!'); // Hello obniz! と表示
// setIntervalで一定間隔で処理
setInterval(async function () {
// 距離を取得
let distance = await hcsr04.measureWait();
// mに変更 小数点以下の桁が多かったので、第1位で切り捨て
let distance_m = Math.floor(distance / 100) / 10;
console.log(distance_m + ' m');
// 温度を取得
const temp = await tempsens.getWait();
console.log('温度' + temp + '度');
// 明るさを取得
obniz.io9.output(true); // io0電圧を5Vに(電源+)
obniz.io11.output(false); // io2電圧を0Vに(電源−)
const voltage = obniz.ad10.start();
console.log('明るさ' + voltage);
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 far!!');
message = 'もうちょっと近づいちゃいなよ。'
// LINEにメッセージをプッシュする関数を呼び出し
await pushAlert(message);
}
//温度が低すぎるか判定
const TEMP_LOW = 23;
const TEMP_HIGH = 28;
if (temp < TEMP_LOW) {
// obnizディスプレイに近接していることを表示
obniz.display.clear();
obniz.display.print('Too cold!!');
// LINEにメッセージをプッシュする関数を呼び出し
message = '寒いからくっついちゃおう。'
await pushAlert(message);
}
if (temp > TEMP_HIGH) {
// obnizディスプレイに近接していることを表示
obniz.display.clear();
obniz.display.print('Too hot!!');
// LINEにメッセージをプッシュする関数を呼び出し
message = '暑いから1枚脱ごっか。'
await pushAlert(message);
}
//明るすぎるか判定
const LUMINANCE = 4.4;
if (voltage > LUMINANCE) {
// obnizディスプレイに近接していることを表示
obniz.display.clear();
obniz.display.print('Too luminous!!');
// LINEにメッセージをプッシュする関数を呼び出し
message = 'もうちょっと暗くした方がいいんじゃない。'
await pushAlert(message);
}
}, 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 user = 'ユーザーID';
// Messaging APIで利用するクレデンシャル(秘匿情報)です。
//const config = {
// channelSecret: credential.channelSecret,
// channelAccessToken: credential.channelAccessToken
//};
const config = {
channelSecret: 'ああああ',
channelAccessToken: 'いいいい'
};
//const userId = user;
const userId = ['ユーザーID','ユーザーID'];
const client = new line.Client(config);
// ソーシャルディスタンス内に人が近づいたらメッセージプッシュ!Messaging APIイベントを渡されて処理するところ
function pushAlert(message){
try{
const messageLine={
type: 'text',
text: message,
};
client.multicast(userId,
[messageLine]
);
// client.pushMessage(userId, {
// type: 'text',
// text: '「肉と酒」と「きなこ」さん。もうちょっと照明をおとしてもいいんじゃない?近づいちゃいなよ。',
// });
}catch(err){
console.log(err.name + ': ' + err.message);
process.exit(-1);
}
// resolveを返す
return Promise.resolve(null);
};