やりたいこと
最近obnizというIoTツールを使ったモノづくり体験をして、温度センサー、照度センサー、超音波センサー、いろいろな計測器を使って手軽にモノづくりができることがわかった。
そこで、実用的でおしゃれなインテリアを作ってみたいと思う。
使用環境
・Node-RED
・obniz
・温度センサー
・LEDライト
アイデア
突然ですが、皆さん「共感覚」というワードは聞いたことがありますか?
「風鈴の音を聞くと涼しく感じる。」のようなある感覚が別の感覚に結びついて感じられるというものです。
最近暖かくなってきたし、共感覚とIoTツールのobnizを使って夏を快適に過ごすためのインテリアを作りたい!
共感覚で涼しさ(や暖かさ)を演出するディスプレイ
30℃~ :青 ・・・涼しい印象
20~30以上:緑 ・・・さわやかな印象
10~20以上:黄色 ・・・心地良い印象
~10℃ :オレンジ ・・・暖かい印象
実装①:obnizで回路を組む。
まずは、obnizに温度センサーを組み込み、温度を取得できるようにする。
この時にobnizが動き続けないように停止処理も入れておく。
コード
[{"id":"dbf97535b85c3daf","type":"debug","z":"2c2d5660c62f51ec","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":590,"y":260,"wires":[]},{"id":"2e1ea09664bd1d56","type":"obniz-function","z":"2c2d5660c62f51ec","obniz":"885bd4a8566eb346","name":"","code":"msg.payload = \"finish\";\nawait obniz.wait(1000); \nobniz.close();\n\nreturn msg;","x":380,"y":260,"wires":[["dbf97535b85c3daf"]]},{"id":"8bb726363f0cc99c","type":"inject","z":"2c2d5660c62f51ec","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":260,"wires":[["2e1ea09664bd1d56"]]},{"id":"b02da749d71e5cfd","type":"obniz-repeat","z":"2c2d5660c62f51ec","obniz":"615761087796b984","name":"Temperature sensor","interval":"10000","code":"msg.payload = await obnizParts.LM60.getWait();\n\nreturn msg;","x":170,"y":180,"wires":[["d77c4e3ad87a4acc"]]},{"id":"d77c4e3ad87a4acc","type":"debug","z":"2c2d5660c62f51ec","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":590,"y":180,"wires":[]},{"id":"885bd4a8566eb346","type":"obniz","obnizId":"","deviceType":"obnizboard1y","name":"","accessToken":"","autoConnectOnDeploy":true,"code":"obniz.display.clear(); // 画面を消去\r\n\r\nobnizParts.LM60 = obniz.wired(\"LM60\",{ gnd: 0, output: 1, vcc: 2 }); // 温度センサー\r\nobnizParts.WS2811 = obniz.wired('WS2811', { gnd:9, vcc:10, din:11 }); // LEDライト"},{"id":"615761087796b984","type":"obniz","obnizId":"","deviceType":"obnizboard1y","name":"","accessToken":"","autoConnectOnDeploy":true,"code":"obniz.display.clear(); // 画面を消去\r\n\r\nobnizParts.LM60 = obniz.wired(\"LM60\",{ gnd: 0, output: 1, vcc: 2 }); // 温度センサー\r\nobnizParts.WS2811 = obniz.wired('WS2811', { gnd:9, vcc:10, din:11 }); // LEDライト"}]
ひとまず、温度センサーから温度を取得することができた。
実装②:取得した温度に合わせてLEDライトを点灯させる。
実装①で組み込んだ回路にLEDライトを付け足し、温度に合わせて発光させる。
コード
[{"id":"f2297e3178418ac0","type":"debug","z":"b73fc104301b9e6a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":730,"y":600,"wires":[]},{"id":"aa43f62f1c513eb6","type":"obniz-function","z":"b73fc104301b9e6a","obniz":"885bd4a8566eb346","name":"","code":"msg.payload = \"finish\";\nawait obniz.wait(1000); \nobniz.close();\n\nreturn msg;","x":480,"y":600,"wires":[["f2297e3178418ac0"]]},{"id":"76cb94038a5bfd43","type":"inject","z":"b73fc104301b9e6a","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":220,"y":600,"wires":[["aa43f62f1c513eb6"]]},{"id":"bc56618cd7b23fb6","type":"obniz-repeat","z":"b73fc104301b9e6a","obniz":"885bd4a8566eb346","name":"Temperature sensor","interval":"10000","code":"msg.payload = await obnizParts.LM60.getWait();\n\nreturn msg;","x":230,"y":480,"wires":[["28712bd21beda4b1","fdb96ca7793a23d5"]]},{"id":"fdb96ca7793a23d5","type":"debug","z":"b73fc104301b9e6a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":470,"y":540,"wires":[]},{"id":"28712bd21beda4b1","type":"obniz-function","z":"b73fc104301b9e6a","obniz":"885bd4a8566eb346","name":"Led light","code":"obniz.display.clear(); // 画面を消去\r\n\r\nif (msg.payload >= 30) {\r\n // 30℃以上の時\r\n obniz.display.print('pushed');\r\n obnizParts.WS2811.rgb(0, 0, 255); // 青\r\n} else if (msg.payload >= 20){\r\n // 20℃以上の時\r\n obniz.display.print('right');\r\n obnizParts.WS2811.rgb(0, 255, 0); // 緑\r\n} else if (msg.payload >= 10){\r\n // 10℃以上の時\r\n obniz.display.print('left');\r\n obnizParts.WS2811.rgb(255, 69, 0); // オレンジ\r\n} else {\r\n // 10℃未満の時\r\n obniz.display.print('released');\r\n obnizParts.WS2811.rgb(0, 0, 0); // 消灯\r\n}\r\n","x":460,"y":480,"wires":[[]]},{"id":"885bd4a8566eb346","type":"obniz","obnizId":"","deviceType":"obnizboard1y","name":"","accessToken":"","autoConnectOnDeploy":true,"code":"obniz.display.clear(); // 画面を消去\r\n\r\nobnizParts.LM60 = obniz.wired(\"LM60\",{ gnd: 0, output: 1, vcc: 2 }); // 温度センサー\r\nobnizParts.WS2811 = obniz.wired('WS2811', { gnd:9, vcc:10, din:11 }); // LEDライト"}]
実行結果
室温が30℃未満だったので、ドライヤーで温度センサーの測定温度を上げてライトの発色を確認した。
温度に合わせてLEDライトを発光させることができた。
実装③:より見栄えを可愛くインテリアっぽくする。
アクリルスタンドの背後にライトを配置すれば、きっとお洒落なインテリアになるはず!
<稼働動画>
ドライヤーで温度を30℃未満⇒30℃以上に上げた時の稼働場面
<稼働写真>
もしかして青が濃すぎた?
涼し気というより青ざめている印象になってしまった。
雪だるまのアクリルスタンドでおしゃれで涼しげな印象を演出したかった...
その他のアイデア
単なるディスプレイではなく、実用性のあるインテリアも作れそう。
僕は天気予報をこまめにチェックするタイプではないため、必ず目に付くインテリアがお天気情報を知らせてくれると嬉しい。
天気APIから降水確率を取得して、雨が降りそうだったらライトアップする傘立て
感想
実際に自分が作りたいと思ったものを形にできたのは楽しかった。
ライトアップしていない状態よりも少し暑さが和らいだ印象を受けた。
(プラシーボ効果かもしれない…)
ただ、自分が使い続けたいと思うには見栄えもよくしないといけないと感じた。
今度は今回実現できなかったアイデアや使っていないセンサーも取り入れて別のIoTツールを作ってみたい。
参考資料