ママのテンション爆上げ!?　obnizで娘からママへX'masプレゼント

## ママもX'masプレゼント欲しい!

　と、いうことで「子供からどんなプレゼント欲しい？」とママにヒアリング。
 
　その結果・・・

　<font color="Red">**「ここまで育ててくれてありがとう」と子ども言われたい!**</font>

　「育ててくれた」と「感謝」をobnizで表現してみることにしました。

## わたし大きくなったよ　×　ママありがとう

　目指したことは

:::note
①LINE×obniz距離センサーで「娘が自分で」身長を調べる
②マトリックスLEDでメッセージを流し　子供からママに言ってもらう
:::


　**①　obniz　×　超音波距離センサー　×　マトリックスLED　を　100均カチューシャ　にくっつける**
![かちゅーしゃ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1793443/410bd52b-f2c5-b223-601e-024743e2cfa4.png)

　**②娘自身がLINEからobnizの距離センサーを起動。LINE上に計測された自分の身長が表示される。**
　
　➡親が測っても面白くないので、娘に操作させる。「私大きくなった」を実感できるように。
　➡当初特定のメッセージでセンサーが起動するようにしていたが、
　　<font color="Red">**6歳はタイプミスだらけだったので、LINEリッチメニューでイラストと
　　デフォルトメッセージを挿入。1クリックでobniz距離センサーが起動できる**</font>、ようにした。
　
　完成したLINEbotの様子はこちら
　<iframe width="853" height="480" src="https://www.youtube.com/embed/KVHppXp_JqI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

　お姉ちゃん心をくすぐるために、自分だけじゃなく妹(1歳)の身長を計るボタンも追加。

## ママ感動のメッセージ!!

　**③身長計測後　ママに伝えるメッセージをマトリックスLEDで流す**
　<iframe width="700" height="394" src="https://www.youtube.com/embed/83U3-ZA_7ns" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

　<font color="Red">**「おかあさんそだててくれてありがとう」**</font>

　6歳なりに一生懸命目で追い、嬉しそうにママに話す姿にパパが涙腺崩壊。

　「おかあさんのいちばんすきなところはどこ」
　「おかあさんのつくったいちばんすきなりょうりをおしえて」

　などランダムに表示させることが今後の目標。

　その都度違うメッセージだと、娘もママもワクワク！
　あとパパ用も。。。

## obniz距離センサー LINEbot

 <details><summary>全体コードはこちら　<font color="Red">**(クリックで表示)**</font></summary><div><br><br>


```js
'use strict';
const Obniz = require('obniz');
const obniz = new Obniz('****-****');

obniz.onconnect = async function () {
    obniz.display.clear();
    obniz.display.print("obniz meets LINE Bot!");
  }

const express = require('express');
const line = require('@line/bot-sdk');
const axios = require('axios');

const PORT = process.env.PORT || 3000;

const config = {
    channelSecret: '********',
    channelAccessToken: '********'
};


const sampleFunction = async (event) => {
    if (event.type !== 'message' || event.message.type !== 'text') {
      return Promise.resolve(null);
    }
  
    let mes = ''
    if(event.message.text === 'わたしおおきくなったかな・・・'){
      mes = 'はかってみるね！☻'; //処理するまでこちらを表示
      getkyori(event.source.userId);
    }else{
      mes = event.message.text;
    }
  
    return client.replyMessage(event.replyToken, {
      type: 'text',
      text: mes
    });
  }
  const getkyori = async (userId) => {
    // 距離センサーを呼び出す
    var hcsr04 = obniz.wired("HC-SR04", {gnd:8, echo:9, trigger:10, vcc:11});
    const distance = await hcsr04.measureWait();{{
    var height=((2242-distance)/10)
    //天井の高さから距離を引いて身長を割り出す
    }
      console.log("身長は" + height + " cm")
      }

    await client.pushMessage(userId, {
     type: 'text',
     text: "身長は" + height + " cm",
   })
  }
```
</div></details>

　身長はあらかじめ天井までの高さを測っておき、その差を算出することで表示させた。

```js
 var height=((2242-distance)/10)
    //天井の高さから距離を引いて身長を割り出す
    }
      console.log("身長は" + height + " cm")
```


　obnizのセンサーから返ってきた値をLINEbotで表示させることに一苦労。
　<font color="Red">**Qiitaでも質問し、助けていただきました。@Yamazinさんに感謝です。**</font>
 
https://qiita.com/okinakamasayoshi/questions/71d3611aa7e6e1515cca


　LINEbotとの連携はこちらの記事を参考にしました。
　参考：[LINEでメッセージを送ると メロディを奏でるBOT](https://qiita.com/Naru0607/items/b523cf9f67fa18bcf7d7)

## マトリックスLED

<details><summary>全体コードはこちら　<font color="Red">**(クリックで表示)**</font></summary><div><br><br>

```js
const Obniz = require('obniz');
const obniz = new Obniz('****-****');

obniz.onconnect = async function () {
 
    const matrix = obniz.wired("MatrixLED_MAX7219", {
        vcc: 4,
        gnd: 3,
        din: 2,
        cs: 1,
        clk: 0
      });
      matrix.init(8 * 4, 8);
      matrix.brightness(7);
    
      const ctx = obniz.util.createCanvasContext(matrix.width, matrix.height);
    
      x = matrix.width;
      obniz.repeat(async function() {
        ctx.fillStyle = "black";
        ctx.fillRect(0, 0, matrix.width, matrix.height);
        ctx.fillStyle = "white";
        ctx.font = "9px sans-serif";
        ctx.fillText("おかあさんそだててくれてありがとう", x, 7);
        x--;
    
        matrix.draw(ctx);
      }, 1000 / 80);
    };
```
</div></details>

　今回は「LINEで値が返って来たら自動でLEDが流れる」ところまで行きつけず
　LEDのメッセージは別で起動させています。今度リトライしたいです。

　参考：[マトリックスLEDをnode.jsで動かす](https://ysk38.hatenablog.com/entry/2020/05/06/174922)

　ちなみに売っているところが公式含め見つからず、灯台下暗しでamazonで発見。

 https://www.amazon.co.jp/dp/B07FFV537V?psc=1&smid=A1XEAMF1H64GNM&ref_=chk_typ_imgToDp

##次女(1歳)にも使ってみた!

　大喜びするだろうな～と思いましたが全くダメでした。w

 ![だめ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1793443/70df1d59-6661-e31f-86ea-62525f7034da.png)

　こっちは大喜びだったのに残念！今度はあなたも楽しめるobnizにするから待っててね💛
 
 https://qiita.com/okinakamasayoshi/items/77d1db045acef6984533