2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ハッカソンでのリアルタイムメモ

Posted at

アイデア作成方法

①世の中で「強度」が強いキーワードと、強度が弱いキーワードを「適当」に記載

②「カラオケをする」・「カラオケに行く(する)まで」・「カラオケでの出来事」・「カラオケ後の出来事」・「カラオケルームの使い方」なキーワードをみんなで出していく

③ ①×②の組み合わせを作っていく

④ ③のアイデアを考える

自チームのアイデア検討

・合コン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コードでログ見る

コード

// ########################################
//          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);
};
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?