6
2

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 スピーカーを使って家を学校みたいにした

Last updated at Posted at 2022-10-30

1.在宅勤務で集中しすぎる問題

2020年春にコロナ禍が始まり、3年が経過する。
コロナ禍をきっかけに在宅勤務がスタートし、週3日在宅・週2日出勤の生活に慣れてきた。
ただ、1点なかなか解決しない問題がある。
在宅勤務だとたまに集中しすぎてしまうことがあるのだ。

集中することはいいことだ。しかし、集中しすぎることは逆に体に良くない。
まばたきの回数が減ってドライアイになるし、同じ姿勢が続くと肩や腰が痛くなる。
学生時代は時間割が決まっており、強制的に休憩時間が取れたうえ適
度に集中状態を管理できていた気がする。
しかし、社会人である以上、自分自身で管理しなければいけない。
在宅勤務中にチャイムを鳴らすことで学校っぽくなり
うまく集中状態を管理できるのではないだろうか。
また、後々どういうときに集中しすぎるのか分析するために、
タイマーを利用したことを記録するためにLINE botにメッセージを送付することとした。

2.作成したかったもの

作成したタイマーは以下のとおり。
  ①obnizのスイッチを押す
  ②タイマー開始のLEDが光る
  ③タイマー開始のチャイムが鳴る
  ④25分計測
  ⑤タイマー終了のチャイムが鳴る
  ⑥タイマーを使用したことをLINE botにメッセージを送る

3.成果物

1.動画
2.Node-REDの構成

スクリーンショット 2022-11-01 210951.png

obnizのスイッチが押されたら、obniz functionでチャイムが鳴る設定とした。
その後、LINE botにメッセージを送信する

[{"id":"d3915e317c9317dc","type":"obniz-function","z":"6bdd95107d414e70","obniz":"3d79e9e625d01588","name":"","code":"obniz.display.clear(); // 画面を消去\r\nif (msg.payload === 'push') {\r\n obniz.display.print('start');\r\n // 赤: rgbled.rgb(255, 0, 0);\r\n // 緑: rgbled.rgb(0, 255, 0);\r\n // 青: rgbled.rgb(0, 0, 255);\r\n \r\n obnizParts.WS2811.rgb(0, 255, 0);\r\n await obniz.wait(300); // led ON for 0.3sec.\r\n obnizParts.WS2811.rgb(0, 0, 0)\r\n await obniz.wait(150)\r\n \r\n obnizParts.WS2811.rgb(0, 255, 0);\r\n await obniz.wait(300); // led ON for 0.3sec.\r\n obnizParts.WS2811.rgb(0, 0, 0)\r\n await obniz.wait(150)\r\n \r\n obnizParts.WS2811.rgb(0, 255, 0);\r\n await obniz.wait(300); // led ON for 0.3sec.\r\n obnizParts.WS2811.rgb(0, 0, 0)\r\n await obniz.wait(150)\r\n \r\n obniz.display.clear(); // 画面を消去\r\n \r\n //前半\r\n obnizParts.Speaker.play(698.456);//ファ\r\n await obniz.wait(500);\r\n obnizParts.Speaker.stop();\r\n await obniz.wait(200);\r\n \r\n obnizParts.Speaker.play(880.000);//ラ\r\n await obniz.wait(500);\r\n obnizParts.Speaker.stop(); \r\n await obniz.wait(200);\r\n\r\n obnizParts.Speaker.play(783.991);//ソ\r\n await obniz.wait(500)\r\n obnizParts.Speaker.stop(); \r\n await obniz.wait(200);\r\n\r\n obnizParts.Speaker.play(523.251);//ド\r\n await obniz.wait(1000);\r\n obnizParts.Speaker.stop(); \r\n await obniz.wait(200); \r\n \r\n obnizParts.Speaker.play(698.456);//ファ\r\n await obniz.wait(500);\r\n obnizParts.Speaker.stop();\r\n await obniz.wait(200);\r\n \r\n obnizParts.Speaker.play(783.991);//ソ\r\n await obniz.wait(500)\r\n obnizParts.Speaker.stop(); \r\n await obniz.wait(200);\r\n \r\n  obnizParts.Speaker.play(880.000);//ラ\r\n await obniz.wait(500);\r\n obnizParts.Speaker.stop(); \r\n await obniz.wait(200);\r\n \r\n obnizParts.Speaker.play(698.456);//ファ\r\n await obniz.wait(1000);\r\n obnizParts.Speaker.stop();\r\n await obniz.wait(200);\r\n \r\n //後半\r\n obnizParts.Speaker.play(880.000);//ラ\r\n await obniz.wait(500);\r\n obnizParts.Speaker.stop(); \r\n await obniz.wait(200);\r\n \r\n obnizParts.Speaker.play(698.456);//ファ\r\n await obniz.wait(500);\r\n obnizParts.Speaker.stop();\r\n await obniz.wait(200);\r\n \r\n obnizParts.Speaker.play(783.991);//ソ\r\n await obniz.wait(500)\r\n obnizParts.Speaker.stop(); \r\n await obniz.wait(200);\r\n\r\n obnizParts.Speaker.play(523.251);//ド\r\n await obniz.wait(1000);\r\n obnizParts.Speaker.stop(); \r\n await obniz.wait(200);\r\n \r\n obnizParts.Speaker.play(523.251);//ド\r\n await obniz.wait(500);\r\n obnizParts.Speaker.stop(); \r\n await obniz.wait(200);\r\n \r\n obnizParts.Speaker.play(783.991);//ソ\r\n await obniz.wait(500);\r\n obnizParts.Speaker.stop(); \r\n await obniz.wait(200);\r\n \r\n obnizParts.Speaker.play(880.00);//ラ\r\n await obniz.wait(500);\r\n obnizParts.Speaker.stop();\r\n await obniz.wait(200);\r\n \r\n obnizParts.Speaker.play(698.456);//ファ\r\n await obniz.wait(1000);\r\n obnizParts.Speaker.stop();\r\n await obniz.wait(200); \r\n \r\n obnizParts.Speaker.play(698.456);//ファ\r\n await obniz.wait(1500);\r\n obnizParts.Speaker.stop();\r\n await obniz.wait(200); \r\n \r\n await obniz.wait(2000);//ミリ秒単位で設定\r\n\r\n obniz.display.print('in the middle');\r\n\r\n await obniz.wait(2000);//ミリ秒単位で設定\r\n \r\n obniz.display.clear(); // 画面を消去\r\n obniz.display.print('end')\r\n\r\n obnizParts.Speaker.play(698.456);//ファ\r\n await obniz.wait(1500);\r\n obnizParts.Speaker.stop()\r\n}else{\r\n    \r\n}\r\n ","x":560,"y":280,"wires":[["2d34fabe4924b628"]]},{"id":"3b8da1d70e26bb22","type":"obniz-repeat","z":"6bdd95107d414e70","obniz":"3d79e9e625d01588","name":"","interval":"100","code":"msg.payload = await obniz.switch.getWait();\r\n\r\nreturn msg;","x":350,"y":280,"wires":[["d3915e317c9317dc"]]},{"id":"2d34fabe4924b628","type":"delay","z":"6bdd95107d414e70","name":"","pauseType":"delay","timeout":"50","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":740,"y":280,"wires":[["e3b23d7e32ba40f2"]]},{"id":"0fc020120f5cba20","type":"BloadcastMessage","z":"6bdd95107d414e70","name":"","x":890,"y":360,"wires":[[]]},{"id":"e3b23d7e32ba40f2","type":"template","z":"6bdd95107d414e70","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"timer end","output":"str","x":900,"y":280,"wires":[["0fc020120f5cba20"]]},{"id":"3d79e9e625d01588","type":"obniz","obnizId":"9999-9999","deviceType":"obnizboard1y","name":"","accessToken":"","code":""}]

※動作確認のため、25分計測せず2秒で終了する設定としている
※タイマーの感覚を25分の理由は ポモドーロテクニックをもとに設定した
wikipedhia ポモドーロテクニック

・obnizの初期化コード

obniz.display.clear(); // 画面を消去
obnizParts.Speaker = obniz.wired("Speaker",{ signal:0, gnd:1 });

obnizParts.WS2811 = obniz.wired('WS2811', { gnd:3, vcc:4, din:5 });
obnizParts.WS2811.rgb(0, 0, 0)
3.使用した技術

  obniz
  Node-RED
  LINE bot

4.まとめ

obnizを使って家を学校ぽくするチャイムは作成してみた。
スピーカーを使ってチャイムを鳴らすところまで上手く作成することができた。
学生時代の条件反射が残っているのか、チャイムを聞くと気が引き締まる感じがする。

ただ、LINE botへのメッセージ送信で躓いてしまった。
アドバイスをいただいてノードを一つ追加したが、上手く反応してくれなかった。
おそらく、何かの設定が誤っているだろうと推測しているが、原因を解明するには至らなかった。
もう少し、LINE botやobnizの知識を習得してから再チャレンジしたい。

6
2
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
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?