ママもX'masプレゼント欲しい!
と、いうことで「子供からどんなプレゼント欲しい?」とママにヒアリング。
その結果・・・
「ここまで育ててくれてありがとう」と子ども言われたい!
「育ててくれた」と「感謝」をobnizで表現してみることにしました。
わたし大きくなったよ × ママありがとう
目指したことは
①LINE×obniz距離センサーで「娘が自分で」身長を調べる
②マトリックスLEDでメッセージを流し 子供からママに言ってもらう
① obniz × 超音波距離センサー × マトリックスLED を 100均カチューシャ にくっつける
②娘自身が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のメッセージは別で起動させています。今度リトライしたいです。
ちなみに売っているところが公式含め見つからず、灯台下暗しでamazonで発見。
##次女(1歳)にも使ってみた!
大喜びするだろうな~と思いましたが全くダメでした。w
こっちは大喜びだったのに残念!今度はあなたも楽しめるobnizにするから待っててね💛