フレッシオーニ師匠

© CC BY 4+ visibility339
© CC BY 4+
visibility339

腕立て伏せを判定し、しっかりできているものをカウントしつつLEDとスピーカで通知。
目標設定ができるモードを搭載、目標到達したらLEDが点灯。
腕立て伏せの結果はLINEに通知。

動画
開発素材

デバイス

システム構成
system image

【説明】 超音波距離センサーを活用することで、煩わしい回数のカウントや、フォームの正しさを意識することなく、腕立て伏せに集中することが可能になります。 フレッシオーニ(Flessioni)はイタリア語で“腕立て伏せ”です。

【構成物】 obniz Board 1Y 抵抗内臓5mmLED 5V 赤・黄緑 ミニブレッドモード ブレッドボード・ジャンパーワイヤ 超音波距離センサー 圧電スピーカー

【How to Use】

  1. フレッシオーニ師匠を起動

  2. モード選択 ・カウントモード…シンプルに回数だけをカウントしてくれるモードです ・シンプルモード…事前に設定した目標回数までカウントしてくれるモードです。目標に到達したら終了ランプが点灯してレベルアップのメロディが流れます ・ランダムモード…目標を勝手に設定してカウントしてくれるモードです。目標に到達したら終了ランプが点灯してレベルアップのメロディが流れます。

  3. モード選択したら腕立て伏せを開始します。正しい深度まで到達しないとカウントされません。カウントされると、okランプが点灯しつつ、ブザーでお知らせします。

  4. リザルトがLINEに通知されるので確認してください。

【仕組み】

  1. 超音波距離センサーで使用者との距離を計測、一定の距離まで近づくとカウントする。カウントするとフラグが立つので離れてフラグをクリアしないと再カウントされない。不正はできない。 2.obnizのディスプレイでモード選択する。選択結果に応じて目標やリザルトのメッセージなどの設定が行われる。 3.目標を達成すると完了ランプ(緑のランプ)が点灯して、ドラクエのレベルアップメロディ(そうは聞こえない)が流れます。
  2. 終了するとLINE Notifyを通じて通知が届きます。
【ソースコード】
```Flessioni.js

const Obniz = require('obniz'); const { exit } = require('process'); const obniz = new Obniz('xxxxxxx); // Obniz_IDに自分のIDを入れます const axios = require('axios'); const qs = require('querystring'); const BASE_URL = 'https://notify-api.line.me'; const PATH = '/api/notify'; const LINE_TOKEN = xxxxxxxxxxxxxxxxxxxx; const sleep = (msec) => new Promise(res => setTimeout(res, msec));

obniz.onconnect = async function () { // 超音波距離センサを利用 const hcsr04 = obniz.wired('HC-SR04', { gnd: 0, echo: 1, trigger: 2, vcc: 3, }); // RGB LEDを利用 const led1 = obniz.wired('LED', { anode: 4, cathode: 5 }); const led2 = obniz.wired('LED', { anode: 6, cathode: 7 });

const speaker = obniz.wired('Speaker', { signal: 10, gnd: 11 });

//カウンター・フラグ
var count = 0;
var flg = 0;
var goal = 0;
var mode = 0;
var min = 1 ;
var max = 10 ;
var today = new Date();
var dmes = '';
var lmes = '';

obniz.display.clear();
obniz.display.print('Flessionni?\npush:count\nleft:simple\nright:random');

//最初にモードを選ぶ
obniz.switch.onchange = function (state) {
    if (state === 'push') {
        mode = 1;
        goal = 99999;
        obniz.display.clear();
        obniz.display.print('count mode start!!');
    }
    if (state === 'left') {
        mode = 2;
        goal = 10;
        obniz.display.clear();
        obniz.display.print('simple mode start!!\n' + 'Goal:' + goal);
    }
    if (state === 'right') {
        mode = 3;
        goal = Math.floor( Math.random() * (max + 1 - min) ) + min ;
        obniz.display.clear();
        obniz.display.print('rundom mode start!!\n' + 'Goal:xxxx');
        console.log(goal);
    }
// setIntervalで定期実行
setInterval(async () => {
    // 距離を取得
    let distance = await hcsr04.measureWait();
    // 小数点以下がたくさんあるのでここでは整数にします
    distance = Math.floor(distance);
    // 距離をコンソールに表示
    console.log(distance + ' mm');
    // 距離をobnizディスプレイに表示
    obniz.display.clear();
    obniz.display.print('count:' + count + '\nflg:' + flg + ' mode:' + mode + '\n' + distance + ' mm\n' + dmes);
    // 距離によって判定
    if (distance < 50.0) {
        // 50mm = 5cm 未満の場合はカウント
        if (flg == 0){
            count +=1;
            flg =1;
            led1.on();
            speaker.play(698); await sleep(200); speaker.stop();
        }
    } else {
        // 50mmを超えたらフラグをクリア
        flg =0;
        led1.off();
    }

    //回数に応じてメッセージを編集
    if ( 1 < count && count < 10 ){
        dmes = 'good!!!!';
    }else if ( 10 <= count && count < 100 ){
        dmes = 'Great!!!!';
    }else if ( 100 <= count ){
        dmes = 'Marvelous!!!!';
    }

    //目標に到達したら、LEDを点灯してリザルトを発信
    if (count == goal){
        led2.on();
        lmes = `よくやった!感動した!`
        const message = `\n日付:` + today + `\n回数:` +count + `\n` + lmes //LINEに表示するメッセージ
        let config = {
            baseURL: BASE_URL,
            url: PATH,
            method: 'post',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
                'Authorization': `Bearer ${LINE_TOKEN}`
            },
            data: `message=${message}`
            };
        axios.request(config).then((res) => {
            console.log(res.status);
        })
        count = 0;
        speaker.play(698); await sleep(200); speaker.stop(); await sleep(50); //ファ
        speaker.play(698); await sleep(100); speaker.stop(); await sleep(50); //ファ
        speaker.play(698); await sleep(100); speaker.stop(); await sleep(50); //ファ
        speaker.play(698); await sleep(100); speaker.stop(); await sleep(100); //ファ
        speaker.play(659); await sleep(200); speaker.stop(); await sleep(100); //ミ
        speaker.play(783); await sleep(200); speaker.stop(); await sleep(100); //ソ
        speaker.play(698); await sleep(700); speaker.stop(); //ファ
    }
    //obnizのボタンを押したらリザルトを発信
    obniz.switch.onchange = function (push) {
            if (mode == 1){
                lmes = `今日はこのくらいにしておくのかい?`
            }else{
                lmes = `この未熟者が、がっかりだ`
            }
            const message = `\n日付:` + today + `\n回数:` +count + `\n` + lmes //LINEに表示するメッセージ

        let config = {
            baseURL: BASE_URL,
            url: PATH,
            method: 'post',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
                'Authorization': `Bearer ${LINE_TOKEN}`
            },
            data: `message=${message}`
            };
        axios.request(config).then((res) => {
            console.log(res.status);
        })
        count = 0;
    };
}, 1000); // 1000ミリ秒 = 1秒ごとに実行

} }

	
</details>
ストーリー

初ハッカソン、テーマは“運動”でした 大好物の超音波距離センサを使用しての腕立て伏せ用のアイテムです。 ゲームっぽくしたかったので最初にモード選択できるようしています。ランダムモードがおすすめです。いつ終わるかわからない中でひたすら腕立てに集中してください。やり切った後に見る終了ランプの光はいつもよりきれいに見えるはず。

メンバー
  • user
    tishiyama @tishiyamaa

関連イベント
  • event ヒーローズ・リーグ 20212021-09-06 開催
  • event IoTLTハッカソン ~ #obniz 縛り!2021-11-07 開催
user
沖中(おきなか) @okinakamasayos1

いいねしました(*^▽^*)
モードを選べたり、音楽がいろいろなったり、
ただの実装プラスのこだわりがとても面白かったです♪
子どももとても喜びそう!!


同じニオイがする作品
  • event 歩行リハビリエンタメシステム Melody Shoes
  • event ROHM(老無)ゲーム
  • event 熊手のIoT化によるアップデート
  • event 【業務】彼女の怒りを早急に鎮火。いや、むしろ怒りを遊びに転換したい。

Proto lovers ♥
user
user
user
user
user
user
user
user
user

イベントまとめ

コンテストまとめ

作品を登録しよう

モノづくりしている人に、つくった作品を見てもらえ、リアクションがもらえるかも?

close

目次


Proto lovers ♥
user
user
user
user
user
user
user
user
user