家族の記憶を守る！obnizで認知症予防脳トレおもちゃ！

#家族を認知症にさせたくない！
先日日曜14時からのザ・ノンフィクション(フジテレビ系列)で認知症の父とその家族ドキュメンタリーが放送されていた。思わず見入ってしまった。
家族が記憶を失くす。その状況がいかに恐ろしいものか改めて考えさせられた。

そしてこう思ったのである。

***　　　　　　　　　　　　　　「家族を認知症にさせたくない！！」***

#日頃の脳トレが大事らしいが・・・？
では家族を認知症から遠ざけるためにどうすればいいか！
それは日頃の脳トレが大事なのでは？

たしかに、近年認知症予防のためのドリル本やアプリは出ているがこんな弊害がある。

・ドリル本 ← リウマチなどで長時間手を動かすことは困難な人もいる。私の祖母はこの例だ。
・アプリ 　← スマホなどの端末操作が困難な場合あり。手にするだけで嫌がるお年寄りは多い。

#これなら脳トレできるのでは？

そこで使えそうと思ったのが、obnizである。
操作方法はここから動画付きで載せていくが、軽い力で操作ができる＆簡単！
これならお年寄りでも操作可能である！

#仕様
obnizを使用し、問題を出題。
答えの選択は左右のみで行い、正解と不正解を音と光で表す。



#Which one is not left?　正解なら高音・不正解なら低音

最初は正解なら正解ぽい雰囲気の高音・不正解なら不正解ぽい雰囲気の低音を出すというもの。

```javascript
const Obniz = require('obniz');
const obniz = new Obniz('XXXX-XXXX'); // Obniz_IDに自分のIDを入れます

obniz.onconnect = async function () {
    // スピーカーを利用
    const speaker = obniz.wired('Speaker', { signal: 0, gnd: 1 });

    // ディスプレイ表示
    obniz.display.clear();
    obniz.display.print("Which one is not left?");

    // スイッチの反応を常時監視
    // 「スイッチ状態が変化した瞬間に1回だけ実行される」ことに注意しましょう
    obniz.switch.onchange = function (state) {
        if (state === 'right') {
            // 右に傾けた状態
            obniz.display.clear();
            obniz.display.print('Excellent!!');
            // 正解ぽい高音を鳴らす
            speaker.play(1000);
        } else if (state === 'left') {
            // 左
            obniz.display.clear();
            obniz.display.print('Fight next!!');
            // 不正解ぽい低音を鳴らす
            speaker.play(30);
        } else if (state === 'none') {
            // 何も押さないとき
            obniz.display.clear();
            obniz.display.print('Which one is not left?');
            // 音を止める
            speaker.stop();
    } 
 
    }
}
```
結果は・・・

https://twitter.com/chihiroxedge/status/1452579905196019712?s=20

なんとも言えない機械音である（笑）


ということで次は音をもう少しそれっぽくしてみた。

#微妙なピンポン
音が鳴るまでに待つ時間を与え、
複数の音を組み合わせることで気持ちのいいピンポンを鳴らすことにチャレンジ！


```javascript
const Obniz = require('obniz');
const { exit } = require('process');
const obniz = new Obniz('xxxx-xxxx'); // Obniz_IDに自分のIDを入れます

const sleep = (msec) => new Promise(res => setTimeout(res, msec));


obniz.onconnect = async function () {
    // スピーカーを利用
    const speaker = obniz.wired('Speaker', { signal: 0, gnd: 1 });

    // ディスプレイ表示
    obniz.display.clear();
    obniz.display.print("Which one is not left?");

    // スイッチの反応を常時監視
    // 「スイッチ状態が変化した瞬間に1回だけ実行される」ことに注意しましょう
    obniz.switch.onchange = async function(state) { 
        if (state === 'right') {
            // 右に傾けた状態
            obniz.display.clear();
            obniz.display.print('Excellent!!');
            // 正解ぽい高音を鳴らす
            // シ
            speaker.play(1975.533); await sleep(300); speaker.stop(); await sleep(700);
            // ソ
            speaker.play(1567.982); await sleep(300); speaker.stop(); await sleep(700);
       } else if (state === 'left') {
            // 左
            obniz.display.clear();
            obniz.display.print('Fight next!!');
            // 不正解ぽい低音を鳴らす
            speaker.play(30);
        } else if (state === 'none') {
            // 何も押さないとき
            obniz.display.clear();
            obniz.display.print('Which one is not left?');
            // 音を止める
            speaker.stop();
    } 

    }
}

```

結果は・・・

https://twitter.com/chihiroxedge/status/1452581243355238401?s=20

ピンッッッッッッポン・・・
すごい溜めるピンポンになった（笑）


#いい感じのピンポン

音を鳴らすまで待つ時間が長すぎたとみて、次は微調整！

```javascript
const Obniz = require('obniz');
const { exit } = require('process');
const obniz = new Obniz('xxxx-xxxx'); // Obniz_IDに自分のIDを入れます

const sleep = (msec) => new Promise(res => setTimeout(res, msec));


obniz.onconnect = async function () {
    // スピーカーを利用
    const speaker = obniz.wired('Speaker', { signal: 0, gnd: 1 });

    // ディスプレイ表示
    obniz.display.clear();
    obniz.display.print("Which one is not left?");

    // スイッチの反応を常時監視
    // 「スイッチ状態が変化した瞬間に1回だけ実行される」ことに注意しましょう
    obniz.switch.onchange = async function(state) { 
        if (state === 'right') {
            // 右に傾けた状態
            obniz.display.clear();
            obniz.display.print('Excellent!!');
            // 正解ぽい高音を鳴らす
            // シ
            speaker.play(1975.533); await sleep(400); speaker.stop(); await sleep(70);
            // ソ
            speaker.play(1567.982); await sleep(300); speaker.stop(); await sleep(700);
       } else if (state === 'left') {
            // 左
            obniz.display.clear();
            obniz.display.print('Fight next!!');
            // 不正解ぽい低音を鳴らす
            speaker.play(30);
        } else if (state === 'none') {
            // 何も押さないとき
            obniz.display.clear();
            obniz.display.print('Which one is not left?');
            // 音を止める
            speaker.stop();
    } 

    }
}

```
結果は・・・

https://twitter.com/chihiroxedge/status/1452582598274797569?s=20


おおお！！これは気持ちがいいピンポンだ！！
音の力ってすごい。達成感が倍になる。



#ランプもつけちゃおう！

正解の音が気持ちよくなったので、次はランプをつけて更に達成感アップを狙おう！
ということでLEDを使用し、正解したら赤いランプが灯る仕様に。

```javascript
const Obniz = require('obniz');
const { exit } = require('process');
const obniz = new Obniz('xxxx-xxxx'); // Obniz_IDに自分のIDを入れます

const sleep = (msec) => new Promise(res => setTimeout(res, msec));


obniz.onconnect = async function () {
    // スピーカーを利用
    const speaker = obniz.wired('Speaker', { signal: 0, gnd: 1 });
    const led = obniz.wired('LED', { anode: 0, cathode: 1 });

    // ディスプレイ表示
    obniz.display.clear();
    obniz.display.print("Which one is not left?");

    // スイッチの反応を常時監視
    // 「スイッチ状態が変化した瞬間に1回だけ実行される」ことに注意しましょう
    obniz.switch.onchange = async function(state) { 
        if (state === 'right') {
            // 右に傾けた状態
            obniz.display.clear();
            obniz.display.print('Excellent!!');
            // 正解ぽい高音を鳴らす
            // シ
            speaker.play(1975.533); await sleep(400); speaker.stop(); await sleep(70);
            // ソ
            speaker.play(1567.982); await sleep(300); speaker.stop(); await sleep(700);
            // LED点灯
            led.on();
       } else if (state === 'left') {
            // 左
            obniz.display.clear();
            obniz.display.print('Fight next!!');
            // 不正解ぽい低音を鳴らす
            speaker.play(30);
        } else if (state === 'none') {
            // 何も押さないとき
            obniz.display.clear();
            obniz.display.print('Which one is not left?');
            // 音を止める
            speaker.stop();
            // LED消灯
            led.off();
        } 

    }
}
```

結果は・・・

https://twitter.com/chihiroxedge/status/1452584088687112200?s=20

まさかのランプだけが光るようになってしまった、、、

ここで気づくのである。
おそらくLEDにしか電流が通っていない。
なぜなら、どちらもobnizの0と1で実装しようとしているからだ。


#音も正解のランプも成功！

ここがobnizの穴と関係していることが分かったので変更。

```javascript
obniz.onconnect = async function () {
    // スピーカーを利用
    const speaker = obniz.wired('Speaker', { signal: 6, gnd: 7 });
    const led = obniz.wired('LED', { anode: 0, cathode: 1 });

```
結果は・・・

https://twitter.com/chihiroxedge/status/1452586204034043908?s=20

スピーカーとLED両方が動きました！



#〇×クイズやってみた
〇×クイズができるかも？と考えチャレンジしてみました。
ついでに不正解の音もクイズ番組ぽくしたいと思い変更！


```javascript

const Obniz = require('obniz');
const { exit } = require('process');
const obniz = new Obniz('xxxx-xxxx'); // Obniz_IDに自分のIDを入れます

const sleep = (msec) => new Promise(res => setTimeout(res, msec));


obniz.onconnect = async function () {
    // スピーカーを利用
    const speaker = obniz.wired('Speaker', { signal: 6, gnd: 7 });
    const led = obniz.wired('LED', { anode: 0, cathode: 1 });

    // ディスプレイ表示
    obniz.display.clear();
    obniz.display.print("Japan is Island country.");
    obniz.display.print("        ");
    obniz.display.print("                ");
    obniz.display.print("false  or  true");

    // スイッチの反応を常時監視
    // 「スイッチ状態が変化した瞬間に1回だけ実行される」ことに注意しましょう
    obniz.switch.onchange = async function(state) { 
        if (state === 'right') {
            // 右に傾けた状態
            obniz.display.clear();
            obniz.display.print('Excellent!!');
            // シ
            speaker.play(1975.533); await sleep(400); speaker.stop(); await sleep(70);
            // ソ
            speaker.play(1567.982); await sleep(300); speaker.stop(); await sleep(700);
            // LED点灯
            led.on();
       } else if (state === 'left') {
            // 左
            obniz.display.clear();
            obniz.display.print('Fight next!!');
            // 不正解ぽい低音を鳴らす
            speaker.play(34.648); await sleep(400); speaker.stop(); await sleep(70);
            speaker.play(32.703); await sleep(300); speaker.stop(); await sleep(700);
        } else if (state === 'none') {
            // 何も押さないとき
            obniz.display.clear();
            obniz.display.print("Japan is Island country.");
            obniz.display.print("        ");
            obniz.display.print("                ");
            obniz.display.print("false  or  true"); 
            // 音を止める
            speaker.stop();
            // LED消灯
            led.off();
        } 

    }
}

```
結果は・・・

https://twitter.com/chihiroxedge/status/1452587584299802626?s=20


ピンポンとブッブーで何とかクイズっぽい仕上がりになりました！！
LEDのランプがつくのが遅いのはご愛嬌ということでしょうか・・・？（笑）


#実際に使うとなると・・・

今回製作してみて、応用すれば脳トレにも使えるのではないか？！という手応えもありつつ
愛が湧いてきたが故に、ここもう少しどうにかならない？！というポイントも出てきました。

・全体的に小さい。(老眼だと画面が見づらくて手の長さがいくらあっても足りません！
　操作はもっと大振りな操作がしたい。他の装置と繋げることで可能そう？）
・obnizの形が生々しくて持つのが怖い。(これはカバーとかで改善できそう！)
・日本語でディスプレイに表示は可能なのか？

などなど課題はまだまだありそうです。


#obnizの可能性は大きい！
課題は山積みではあるものの、今回は最初にこんなものが作りたいなと思うものをそれっぽく作ることができて、楽しさも感じることができました！

手元で直感的に動かすことができる点も、アイデア次第で老若男女みんなにアプローチできる！
obnizとても可能性があるな！と思いました！

手を使ってモノづくりをする感覚久々でなんだかワクワクしました。
次はもっと手の込んだ色々な装置を組み合わせたものを作ってみたいです。

今後の成長に乞うご期待！