LoginSignup
3

More than 1 year has passed since last update.

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

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

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

 その結果・・・

 「ここまで育ててくれてありがとう」と子ども言われたい!

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

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

 目指したことは

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

 ① obniz × 超音波距離センサー × マトリックスLED を 100均カチューシャ にくっつける
かちゅーしゃ.PNG

 ②娘自身がLINEからobnizの距離センサーを起動。LINE上に計測された自分の身長が表示される。
 
 ➡親が測っても面白くないので、娘に操作させる。「私大きくなった」を実感できるように。
 ➡当初特定のメッセージでセンサーが起動するようにしていたが、
  6歳はタイプミスだらけだったので、LINEリッチメニューでイラストと
  デフォルトメッセージを挿入。1クリックでobniz距離センサーが起動できる
、ようにした。
 
 完成したLINEbotの様子はこちら
 

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

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

 ③身長計測後 ママに伝えるメッセージをマトリックスLEDで流す
 

 「おかあさんそだててくれてありがとう」

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

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

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

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

obniz距離センサー LINEbot

全体コードはこちら (クリックで表示)


'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",
   })
  }

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

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

 obnizのセンサーから返ってきた値をLINEbotで表示させることに一苦労。
 Qiitaでも質問し、助けていただきました。@Yamazinさんに感謝です。

 LINEbotとの連携はこちらの記事を参考にしました。
 参考:LINEでメッセージを送ると メロディを奏でるBOT

マトリックスLED

全体コードはこちら (クリックで表示)


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);
    };

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

 参考:マトリックスLEDをnode.jsで動かす

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

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

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

だめ.PNG

 こっちは大喜びだったのに残念!今度はあなたも楽しめるobnizにするから待っててね💛

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
What you can do with signing up
3