11
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 1 year has passed since last update.

obnizにLINEで問いかけて休み方を決めてもらう

Last updated at Posted at 2022-04-25

休憩の仕方を決めてもらうっていうのはいかがだろうか

最近多忙である。
プライベートもお仕事もいろいろやることが多い。
さて休もうかってときに、だいたいコーヒーを飲むことになるのだが、「散歩とか遠くの景色見た方が目にいいんだよな」とか思ってもやらないことが多い。
せっかくだから、最近覚えたobnizを使って、
普段やらないけど、やった方がよさそうな休み方をobnizに発信してもらうことにしようと思う。

反応の仕方は色々とあると思うが、フルカラーLEDを使用することにした。
思いのほか光が強いので、目に留まりやすいと思ったからだ。

あと、本当は休み方を何百通りも用意してランダムに・・・とかしたいところだが、今回はそのプロトタイプってことで数パターンになっている。

完成イメージ

obnizの画面上には休み方が載っていて、ライトも点灯する。

ライン側では、以下の通り、「疲れた」と呟くと反応する仕組み。
ライトの点灯とメッセージの返事の2通りで反応してくれることになった。

環境等

環境
Heroku環境上でNode-REDを使用
API
LINEmessagingAPI
ハード
obniz Board 1Y
フルカラーLED

完成フロー

フローの全体はいたってシンプルだ。
image.png

「疲れた」と呟くとフルカラーLEDが反応してくれて、それ以外であれば、「その調子!」と反応してくれる。
それ以外のパターンが1パターンなので、もうちょっと気の利いた返答が出来るようになるとより良いとは思う。
今回は、obnizの反応の方に注力したかったので、メッセージのやりとりという意味では省力化した。

JSONはこちら。

[{"id":"5e8ede99.4ce0d","type":"obniz-function","z":"6f69e0fd.984ac","obniz":"ffaf4872.dd93c8","name":"フルカラーLED","code":"var min = 0 ;\r\nvar max = 3 ;\r\nvar i = Math.floor( Math.random() * (max + 1 - min) ) + min ;\r\n\r\nobniz.display.clear(); // 画面を消去\r\n\r\nif (i === 1) {\r\n    obniz.display.print('coffee');\r\n    obnizParts.WS2811.rgb(103, 49, 67); // コーヒー\r\n    //const result = msg.payload;\r\n    const result = 'コーヒーでも飲んで休もう!';\r\n    msg.payload  = result;\r\n} else if (i === 2){\r\n    obniz.display.print('sleep');\r\n    obnizParts.WS2811.rgb(255, 148, 255); // 仮眠\r\n    const result = 'たまには仮眠とってもいいんじゃない';\r\n    msg.payload  = result;\r\n} else if (i === 3){\r\n    obniz.display.print('sky');\r\n    obnizParts.WS2811.rgb(139,255,255); // 空\r\n    const result = '気分転換に外でお散歩もありだよ';\r\n    msg.payload  = result;\r\n} else {\r\n    // 押してないとき\r\n    obniz.display.print('nothing');\r\n    obnizParts.WS2811.rgb(255,255,255); // 無\r\n    const result = '瞑想で心穏やかに';\r\n    msg.payload  = result;\r\n}\r\nawait obniz.wait(1000); // led ON for 1sec.\r\nobnizParts.WS2811.rgb(0, 0, 0);\r\nreturn msg;\r\n","x":720,"y":300,"wires":[["e436c204.f0c14"]]},{"id":"fa4c7e8.619e08","type":"Webhook","z":"6f69e0fd.984ac","name":"","url":"/webhook","x":360,"y":380,"wires":[["33c402cc.b49fde"]]},{"id":"33c402cc.b49fde","type":"switch","z":"6f69e0fd.984ac","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"疲れた","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":530,"y":380,"wires":[["5e8ede99.4ce0d"],["21b0f89a.f55238"]]},{"id":"e436c204.f0c14","type":"ReplyMessage","z":"6f69e0fd.984ac","name":"","replyMessage":"","x":920,"y":360,"wires":[]},{"id":"21b0f89a.f55238","type":"obniz-function","z":"6f69e0fd.984ac","obniz":"ffaf4872.dd93c8","name":"その調子!","code":"obnizParts.WS2811.rgb(0, 0, 0);\n\n//const result = msg.payload;\nconst result = 'その調子!';\n// 返信メッセージをhttp requestの結果にする\nmsg.payload  = result;\n\nreturn msg;","x":710,"y":440,"wires":[["e436c204.f0c14"]]},{"id":"ffaf4872.dd93c8","type":"obniz","obnizId":"00000000","deviceType":"obnizboard","name":"","accessToken":"","code":""}]

各種ノードの設定

switchノード

ひとまずobnizに繋ぐための分岐点ということで、特に癖のない内容になっている。
image.png

obniz funcitonノード「フルカラーLED」

最初に提示したように、「どういう休み方をするのか」というのをobnizから発してもらいたい。
今回は、ランダムな値を割り振って、値に応じた休みパターンをobnizから発してもらうことにした。

ランダムな値の割り振りについては、前回Qiitaでも使用して使い勝手が良かったので今回も使うことにしている。

休み方は4通りあって、それぞれに色を割り振ることにした。
各種の色は、RGBが確認できるツールを使用して決めた。

No 休み方 カラー
1 コーヒー 茶色(そのまま)
2 仮眠 ピンク(なんかフワフワしたイメージ)
3 散歩 青(空のイメージ)
4 瞑想 白(無のイメージ)

具体的なパターン別の色設定内容は、以下を参考にして欲しい。

var min = 0 ;
var max = 3 ;
var i = Math.floor( Math.random() * (max + 1 - min) ) + min ;

obniz.display.clear(); // 画面を消去

if (i === 1) {
    obniz.display.print('coffee');
    obnizParts.WS2811.rgb(103, 49, 67); // コーヒー
    //const result = msg.payload;
    const result = 'コーヒーでも飲んで休もう!';
    msg.payload  = result;
} else if (i === 2){
    obniz.display.print('sleep');
    obnizParts.WS2811.rgb(255, 148, 255); // 仮眠
    const result = 'たまには仮眠とってもいいんじゃない';
    msg.payload  = result;
} else if (i === 3){
    obniz.display.print('sky');
    obnizParts.WS2811.rgb(139,255,255); // 空
    const result = '気分転換に外でお散歩もありだよ';
    msg.payload  = result;
} else {
    // 押してないとき
    obniz.display.print('nothing');
    obnizParts.WS2811.rgb(255,255,255); // 無
    const result = '瞑想で心穏やかに';
    msg.payload  = result;
}
await obniz.wait(1000); // led ON for 1sec.
obnizParts.WS2811.rgb(0, 0, 0);
return msg;

あとは、休み方に合わせたコメントを msg.payload に設定して、LINEのメッセージとして返却してもらうようにした。

参考までに、ノード内の内容と初期設定も残しておく。
image.png

obniz.display.clear(); // 画面を消去
obnizParts.WS2811 = obniz.wired('WS2811', { gnd:0, vcc:1, din:2 });

obniz funcitonノード「その調子!」

「疲れた」でなければ、それ以外のルートということで設定しておいた。
LINEメッセージを返却させるためだけのものだ。

obnizParts.WS2811.rgb(0, 0, 0);

//const result = msg.payload;
const result = 'その調子!';
// 返信メッセージをhttp requestの結果にする
msg.payload  = result;

return msg;

解消したいこと

フルカラーLEDの限界なのだろうが、コーヒーの茶色と仮眠のピンクが似て見えるし、散歩の青(空色)と瞑想の白色が殆ど一緒なので、結局どの休み方にすればいいのかがライトから判別がつかない。
もっとくっきりとした赤青緑とかにすればいいのだろうが、遊び心もないし味気無く感じてやらなかった。
ライトだけで難しければ、頼り切らずに音とか動作とかでも分かるようにすればいいんだと思う。

実は追加でやりたかったこと

上述した通り、ライトだけではなく音でも休み方を表現するというのもいいと思って、
「疲れた」と伝えたら海を表現してくれるということも付け足してみようとしたが、実装には至らなかった。
サーボモータを使用して、ペットボトルに入れた砂を傾けさせるといい音になりそうな気がする。
サーボモータがパワーがあるのはわかっているので、音の出し方や固定の仕方を考えると出来ると思う。

おわりに

obnizなどのハード面が合わさると、やれることが増えることを改めて感じた。
先日IoTのハッカソンイベントに参加したのだが、各自がアイデアにあわせて思い思いのものを作ることが出来ており、技術力だけではなくアイデアによっては本当に面白い素敵なものが仕上がっていた。

私もせっかくobnizに触れるようになったし、LINEやAPIなどといった技術面も習得し始めていると思うので、アイデア方面にも磨きをかけて、より魅力的なものを作れるようになりたいと思う。

11
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
11
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?