iroha が 2021年05月14日17時33分15秒 に編集
コメント無し
本文の変更
# デモ動画 @[twitter](https://twitter.com/iroha_nano145/status/1393039412678692864)
# デモ動画 @[youtube](https://youtu.be/qFApFEY2LkA)
動画7秒あたりで加湿器が止まってるの分かるかな……分かって欲しいな # 部品 - 300円の加湿器(DAISOで売ってた安いやつ) - obniz Board 1Y - [温湿度センサー(SHT31-D)](https://amzn.to/3vZCoih) - [USB端子](https://amzn.to/3uNU6VH) 正直300円の格安加湿器の高性能化のために1000円の湿度センサーを使うの本末転倒な気がしなくもない # 設計図 ![設計図](https://camo.elchika.com/3d6a92aeabccff2da13f444bd6b4d5350c2468c9/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65393633323932312d333663352d343934322d386562332d3563623031626162613064652f36383564336533662d636436322d346536322d626165332d656538653637346335303332/) # ソースコード サンプルの温度定期測定プログラムを基盤に今回のプログラムを組みました。 湿度の取得について、一度目は高確率で失敗するのでtry…catchを使って失敗したらもう一度湿度を取得するようにしています。 時々湿度100%みたいな結果になるので100%になった時も再測定にしました。 格安加湿器については300円だしUSBの5Vを超音波振動子につなげてるだけだろうと予想して湿度に応じてUSBの5Vを5Vにしたり0Vにしたりすることで制御する。(こういう時、安物って作りが単純でいいよね) [コードはこちら](https://obniz.com/ja/webapp/4414?key=41e6ce8465ebd2d8c502430f3598fc47a4e3e4db) ```html:加湿器制御 <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" /> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://unpkg.com/obniz@3.x/obniz.js" crossorigin="anonymous" ></script> </head> <body> <script> // OBNIZ_ID_HERE will be replaced at run. // インストールされたデバイス情報に書き換わる var obniz = new Obniz("OBNIZ_ID_HERE"); var sensor; obniz.onconnect = async function() { sensor = obniz.wired("SHT31", {vcc:3, sda:0, scl:1, adr:4, gnd:2, address:0x44}); // Read Value. 湿度を取得&表示 try { var humid = await readHumid(); } catch(e) { var humid = await readHumid(); } if (humid.toFixed(1)==100.0){ humid = await readHumid(); } //湿度が45%未満の時加湿器をON if(humid.toFixed(1)<45){ obniz.getIO(5).pull("5v"); obniz.getIO(5).output(true); obniz.getIO(6).output(false); obniz.resetOnDisconnect(false); } //湿度が60%より大きいとき加湿器をOFF if(humid.toFixed(1)>55){ obniz.getIO(5).output(false); obniz.getIO(6).output(false); obniz.resetOnDisconnect(false); } // When Cloud Execusion. クラウド実行の時 if (Obniz.App.isCloudRunning()) { Obniz.App.done({ status: 'success', text: `${new Date().toLocaleString('ja-JP')}: ${humid.toFixed(1)}℃` }); } }; obniz.onclose = async function() { }; window.onload = async function(){ await readHemp(); } // Read Humid. 湿度を取得&表示 async function readHumid() { // Read Temp. 温度を取得 var humid = await sensor.getHumidWait();; // Load current time. 現在日時を取得して、スペース区切りで配列に var datetime = new Date().toLocaleString('ja-JP').split(' '); // Stop drawing for performance. 描画をいったん止める obniz.display.drawing(false); // Clear. ディスプレイを全部消す obniz.display.clear(); // Change font size. フォントサイズを20pxに obniz.display.font(null, 20); // Draw date. 日付を表示 obniz.display.print(datetime[0]); // Draw time. 時刻を表示 obniz.display.print(datetime[1]); // 小数点1桁まで温度を表示 obniz.display.print(`${humid.toFixed(1)}%`); // Transfer all to device. 全て描画させる obniz.display.drawing(true); // If on user's browser. 手動で実行させているとき if (!Obniz.App.isCloudRunning()) // Draw it on HTML. 日時と温度をページに追記 $('#obniz-debug').append(`<p>${new Date().toLocaleString('ja-JP')}: ${humid.toFixed(1)}%</p>`); return humid; } </script> </body> </html> ``` # おわりに もともと湿度センサーを使って加湿器を制御するのは去年の冬に考えてはいたんですがなかなか作業を始めるきっかけが無かったので今回のobnizコンテストをきっかけにやってみようと思いました。 ただ…… 始める時期が遅かった……乾燥との戦いの季節は終わってむしろ梅雨が近づく季節、今回作った湿度調整機能付き加湿器も今の季節では必要ないです。今年の冬にはまた活躍してもらいましょう。 今回は300円の加湿器と1000円の湿度センサーを使いましたがAmazonを見てみると1000円でおしゃれな見た目のデジタル温湿度計が売ってたりします。300円でペットボトルに装着できる加湿器が作れたり1000円でおしゃれなデジタル温湿度計が作れたり、大量生産ってすごいなって感心しました。