この記事は obniz Advent Calendar 2020 5日目の記事です。
obniz + 赤外線 LED で、リモコンコンセント OCR-05W を動かしてみます。
4 日目は@tseigo さんの「Node-RED から obniz ノードをつかって Grove Water Level Sensor をつなげてみる」でした。
朝起きると喉が痛い
最近、冬になって空気が乾燥してきていますね。
夜寝るときは気にならないのですが、朝起きると口から鼻から粘膜が乾燥してしまいます。
我が家にも超音波式の加湿器があるのですが、つまみで噴出量を調整するタイプのもので、
- 量が少ないと加湿しきれず、朝喉がカラカラになり、
- 量が多すぎると加湿は良いが、床がびちょびちょになり、
ちょうどつまみの回し具合を探し当てるのが大変です。
本記事では、加湿器の電源を自動で ON/OFF させることで、いい感じの湿度にしてくれるコントローラーを実働 2 時間で作成していきます。
(※材料は前もって用意しておいてください)
睡眠時の適切な湿度は50%~60%
布団の西川さんによると、寝室の湿度は**50%~60%**が丁度良いみたいです[1]。
今回はこの範囲を狙っていきましょう。
動作イメージ
ちょっと見えにくいけど動くようになった pic.twitter.com/y6jnFNpDqz
— Takahiro Mitsuoka (@tmitsuoka0423) November 19, 2020
用意する材料
HS105のエラー解決しなそうなので、赤外線でコントロールできるコンセントOCR-05Wに変更#朝活 pic.twitter.com/hpvGVPc1nC
— Takahiro Mitsuoka (@tmitsuoka0423) November 19, 2020
- obniz Board
- IoT プロトタイピングボード。JavaScript で動くので Web アプリエンジニアにも優しい。
- 6000 円くらい
- 公式で購入:https://obniz.com/ja/products/obnizboard/
- 温湿度センサー SHT31
- 湿度が測定できれば何でも OK。
- 1000 円くらい
- 秋月で購入:https://akizukidenshi.com/catalog/g/gK-12125/
- リモコンコンセント OCR-05W
- 赤外線リモコンで ON/OFF できるコンセント
- 2000 円くらい
- Amazon で購入:https://www.amazon.co.jp/dp/B01ABMGGQ8
- 赤外線 LED
- 何でも OK
- 100 円くらい
- 秋月で購入:https://akizukidenshi.com/catalog/g/gI-03261/
- 抵抗
- 5Ωのもの
- セットで 100 円くらい
- 秋月で買えます(ページ見つからなかった)
- 加湿器
- 電源をつけたり消したりしても継続して動くもの
- ホームセンターで購入
- その他あると良いもの
- ブレッドボード
- オスオスのピン or ジャンパワイヤ
加湿器コントローラーを作っていく
obnizと湿度センサー&赤外線LEDを接続する
こんな感じで、”obnizの0番ピン”と”SHT31のV+”がつながるようにブレッドボードにさす pic.twitter.com/9kO4jqUFn1
— Takahiro Mitsuoka (@tmitsuoka0423) November 13, 2020
ブレッドボードには赤外線LEDと抵抗を追加。
— Takahiro Mitsuoka (@tmitsuoka0423) November 19, 2020
obnizの6番ピンと11番ピンに接続。#朝活 #obniz pic.twitter.com/Pka7gwQa0I
プログラムを書く
基本動作としては、湿度を取ってきて、赤外線 LED から信号を送るだけのシンプルなプログラムです。
1 分間隔で動作するようにループさせています。
(追記:@il9437 さんのアドバイスにより改良。ありがとうございます。)
const Obniz = require('obniz');
const { on, off } = require('./signal');
const callback = async () => {
const obniz = new Obniz(process.env.OBNIZ_ID);
obniz.connect(); // obnizに接続
await obniz.connectWait();
const sensor = obniz.wired("SHT31", { vcc: 0, sda: 1, scl: 2, adr: 3, gnd: 4, addressmode: 5 });
const irLed = obniz.wired('InfraredLED', { anode: 6, cathode: 11 });
const { temperature, humidity } = await sensor.getAllWait();
console.log(new Date(), temperature, humidity);
if (humidity < 50) { // 湿度に応じてOCR-05WをON/OFF
irLed.send(on);
} else if (humidity > 60) {
irLed.send(off);
}
obniz.close(); // 繰り返し実行するので1回毎に切断する
};
setInterval(callback, process.env.INTERVAL || 60 * 1000); // 1分毎に実行する
ソースコードは GitHub にアップしています。
https://github.com/tmitsuoka0423/obniz-auto-humidifier
SHT31 を使用して、上記の写真通りピンを接続すれば、そのまま使えるはずです。
ピンの位置を変える場合は、プログラムを修正してください。
実行する
以下のコマンドで動作します。
OBNIZ_ID
は、obniz Board の画面に表示されている 4 桁-4 桁の数字を入れてください。
$ npx cross-env OBNIZ_ID=xxxx-xxxx node index.js
使ってみてわかったこと:ON/OFFさせる条件には幅を持たせた方が良い
さっそく動かしてみてるけど、数分おきに加湿器が動いたり止まったりして、めっちゃ気になる👀
— Takahiro Mitsuoka (@tmitsuoka0423) November 19, 2020
最初は、
if 湿度 < 55% → 加湿器ON
else → 加湿器OFF
で制御していたのですが、湿度が 55%を行ったり来たりするたびに加湿器が ON/OFF され、気になり寝られず、すぐに以下の条件にプログラムを修正しました。
if 湿度 < 50% → 加湿器ON
else if 湿度 > 60% → 加湿器OFF
こうすることで、湿度が 50%未満になったら加湿器が ON になり 60%を超えるまで OFF になりません(逆も然り。)。
気にならないレベルになりました。使ってみるって大事ですね。
まとめ
実働 2 時間くらいで作りましたが、割と満足いくものができました。
寝てる間は加湿器を調整することはできないので、自動で制御させるのが良いですね。
6 日目は@youtoy さんです!