我が家の悩み
引っ越してきて約1年経ちましたが、まだ慣れない(忘れてしまう)ことがあります。
それは、夜家に帰ると気付かされるのです。暗い玄関の先に木漏れ日のように微かに漏れる光。
要するに、玄関の先にはトイレがあり、トイレの明かりをつけっぱなしだったことに気付かされるのです。
そして、消し忘れは高頻度で起きてしまっています。
前の家ではトイレのドアノブは右側にあり電気スイッチも右側にありました。
しかし今の家ではトイレのドアノブは左にあり電源スイッチは右側にあります。
動線が変わったことによる影響なのか定かではありませんが、これを何とか解決したい!
人感センサー付きのライトは市販されていますが、システムエンジニアとして別の方法で解決へのアプローチを試みることにします。
モノづくり
システムエンジニアらしい解決方法としてIoTを活用して解決を目指します。
IoTツールは、利用経験のあるobnizを選定しました。パーツが充実していてドキュメントも整備されている点で使いやすいと思うIoTツールでもあります。
obniz&パーツ
obniz
パーツ
左から照度センサ(CdS)、抵抗、LED(抵抗内蔵)、サーボモータ
プロトタイプ
obnizは2つ使用して、1つは明るさを計測する用、もう1つはスイッチを操作する用にします。
①明るさを計測(写真の左上部分)
暗い時にはブルーのLEDを点灯させ、明るい時にはレッドのLEDを点灯させるようにして、視覚的にも認知できるようにしています。プログラム実装では、照度計測を定間隔で実施するようにしているため、明かりの点灯を感知できるようにしています。
②スイッチを操作(写真の右部分)
サーボモータを2つ使用することで、安定性向上と力強さ増強をしています。
サーボモータが動くタイミングは、①で明るさを検知するとタイマーが起動し、カウントゼロとなったときになります。
開発・実行環境
・Node-RED
・Railway
Node-RED フロー図&開発ソース
[{"id":"6a823dab5189e372","type":"tab","label":"フロー 2","disabled":false,"info":"","env":[]},{"id":"cb1d6d3a.017e1","type":"debug","z":"6a823dab5189e372","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":490,"y":60,"wires":[]},{"id":"11a346f0.5a4c19","type":"obniz-function","z":"6a823dab5189e372","obniz":"0245e7d23ffbdfd4","name":"led","code":"msg.payload = msg.payload + \"finish_led\";\nawait obniz.wait(1000); \nobniz.close();\n\nreturn msg;","x":315,"y":60,"wires":[["cb1d6d3a.017e1"]],"l":false},{"id":"76e43759.3dff68","type":"inject","z":"6a823dab5189e372","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":60,"wires":[["11a346f0.5a4c19","58f1ff5f9173305a"]]},{"id":"5fa9057f.f2e0ac","type":"obniz-repeat","z":"6a823dab5189e372","obniz":"0245e7d23ffbdfd4","name":"","interval":"1000","code":"//msg.payload = await obniz.switch.getWait();\n//var voltage = await obniz.ad1.getWait();\nmsg.payload = await obniz.ad1.getWait();\n\nreturn msg;","x":110,"y":300,"wires":[["ebafa559.00b978"]]},{"id":"ebafa559.00b978","type":"obniz-function","z":"6a823dab5189e372","obniz":"0245e7d23ffbdfd4","name":"","code":"obniz.display.clear(); // 画面を消去\r\n\r\nvar flg = \"off\";\r\n\r\nif (msg.payload >= 0.2) {\r\n // スイッチが押されている状態\r\n //obniz.display.print('LED ON');\r\n obnizParts.ledRed.on();\r\n obnizParts.ledBlue.off();\r\n flg = \"on\"\r\n} else {\r\n // スイッチが押されていない状態\r\n //obniz.display.print('LED OFF');\r\n obnizParts.ledRed.off();\r\n obnizParts.ledBlue.on();\r\n flg = \"off\"\r\n}\r\n\r\nmsg.flg = {\r\n f : flg,\r\n v: msg.payload\r\n}\r\n\r\nreturn msg;","x":280,"y":300,"wires":[["7f11b5a06b2c355b","1fec8e865f43dd8b"]]},{"id":"58f1ff5f9173305a","type":"obniz-function","z":"6a823dab5189e372","obniz":"a8a977e355ae00e6","name":"servo","code":"msg.payload = msg.payload + \"finish_servo\";\nawait obniz.wait(1000); \nobniz.close();\n\nreturn msg;","x":315,"y":120,"wires":[["cb1d6d3a.017e1"]],"l":false},{"id":"0c16ce3c79aea1c3","type":"obniz-function","z":"6a823dab5189e372","obniz":"a8a977e355ae00e6","name":"","code":"var servo = obniz.wired(\"ServoMotor\", { gnd: 0, vcc: 1, signal: 2 });\r\nservo.angle(120.0); // half position\r\n\r\nreturn msg;","x":620,"y":220,"wires":[["11a346f0.5a4c19","58f1ff5f9173305a"]]},{"id":"7f11b5a06b2c355b","type":"debug","z":"6a823dab5189e372","name":"msg.flg","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"flg","targetType":"msg","statusVal":"","statusType":"auto","x":440,"y":360,"wires":[]},{"id":"1fec8e865f43dd8b","type":"switch","z":"6a823dab5189e372","name":"","property":"flg.f","propertyType":"msg","rules":[{"t":"eq","v":"on","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":470,"y":300,"wires":[["03d01f518bf5db28"]]},{"id":"03d01f518bf5db28","type":"delay","z":"6a823dab5189e372","name":"","pauseType":"delay","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":620,"y":300,"wires":[["2a52a09657bba878"]]},{"id":"2a52a09657bba878","type":"obniz-function","z":"6a823dab5189e372","obniz":"a8a977e355ae00e6","name":"","code":"var servo = obniz.wired(\"ServoMotor\", { gnd: 9, vcc: 10, signal: 11 });\r\nservo.angle(60.0); // half position\r\n\r\nreturn 0;","x":420,"y":220,"wires":[["0c16ce3c79aea1c3"]]},{"id":"0245e7d23ffbdfd4","type":"obniz","obnizId":"1111-1111","deviceType":"obnizboard1y","name":"","accessToken":"","code":"obniz.display.clear(); // 画面を消去\r\n\r\n\r\nobniz.io0.output(true); //io0を5vに\r\nobniz.io2.output(false); //io2をGNDに\r\n\r\n\r\nobnizParts.ledRed = obniz.wired('LED', { anode: 9, cathode: 10 });\r\nobnizParts.ledBlue = obniz.wired('LED', { anode: 6, cathode: 7 });"},{"id":"a8a977e355ae00e6","type":"obniz","obnizId":"2222-2222","deviceType":"obnizboard1y","name":"","accessToken":"","code":""}]
テスト
プロトタイプのテスト風景になります。
まずまずの動きをしているので一安心。
電気の消し忘れからの解放
さて、実際にトイレに設置してみます。
不格好すぎて言葉になりませんが、努力の結晶になります。
設置
・トイレの中
照度センサーを付けているobnizはトイレの中に設置します。
・スイッチ操作
はじめはテープでサーボモータを固定してみましたが、しっかり固定されずスイッチを切り替えられなかっため、割りばしで固定を強化しました。
2つのobnizはモバイルバッテリーから電源供給しています。
ついに、消し忘れからの解放!
トイレの明かりをつけたことを検知して、自動で消灯するIoTツールの完成です!
動画撮影のためタイマーは短めに設定しています。
もう電気を消し忘れません!
電気の消し忘れを防止するアプローチではなく、忘れても自動で消してくれるアプローチ方法はいかがだったでしょうか。実際に設置してみるとスイッチ回りがごちゃごちゃしていて、使い勝手はやや悪いものでした。むしろこの経験がトイレの電気を消すという意識付けになったのではと思います。