obniz スピーカーを使って家を学校みたいにした

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

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

### 2.作成したかったもの
作成したタイマーは以下のとおり。
　　①obnizのスイッチを押す
　　②タイマー開始のLEDが光る
　　③タイマー開始のチャイムが鳴る
　　④25分計測
　　⑤タイマー終了のチャイムが鳴る
　　<font color="Red">⑥タイマーを使用したことをLINE botにメッセージを送る </font>

### 3.成果物
##### 1.動画
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">スイッチを押したらチャイムを鳴らすところは成功したけど、そのあとLINE botにメッセージが送られない。なぜだ？<boa href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://twitter.com/hashtag/linedc?src=hash&amp;ref_src=twsrc%5Etfw">#linedc</a> <a href="https://twitter.com/hashtag/obniz?src=hash&amp;ref_src=twsrc%5Etfw">#obniz</a> <a href="https://twitter.com/hashtag/%E5%88%9D%E5%BF%83%E8%80%85?src=hash&amp;ref_src=twsrc%5Etfw">#初心者</a> <a href="https://t.co/xoJleycq7x">pic.twitter.com/xoJleycq7x</a></p>&mdash; きく (@AYE7WvdouqRwaNp) <a href="https://twitter.com/AYE7WvdouqRwaNp/status/1586733508604547072?ref_src=twsrc%5Etfw">October 30, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

##### 2.Node-REDの構成

![スクリーンショット 2022-11-01 210951.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885686/2d50c235-6596-1aca-f17c-ff2dc3365278.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 ポモドーロテクニック](https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%A2%E3%83%89%E3%83%BC%E3%83%AD%E3%83%BB%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF)

・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の知識を習得してから再チャレンジしたい。