20
4

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.

プロトアウトスタジオAdvent Calendar 2021

Day 7

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

Last updated at Posted at 2021-10-27

ママも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にするから待っててね💛

20
4
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
20
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?