obniz+大気センサーで部屋の環境をチェックしよう。健康的なテレワークには換気は大切です!


作ったもの

obniz+大気センサー(MQ135)で自室の環境モニタリングできる仕組みを作りました。
計測した結果はThingSpeakでグラフで見ることができます。

きっかけ

冬になると部屋の換気を忘れがちなので、数値で換気タイミングを知ることができないかな、と思って作ってみました。

参考にしたサイト

obnizの公式サイトに上記センサーを使用した例があります。
obniz Parts Library

サンプルでは

onchangeanalog = function(voltage: number)
電圧が変化した時に呼ばれる関数を指定できます。

sample.js
var mq135 = obniz.wired("MQ135", {vcc:3, gnd:2, do:1, ao:0});
await mq135.heatWait();
mq135.onchangeanalog = function(voltage) {
  console.log(voltage);
}

はあるのですが、数秒毎にThingSpeakへの数値を送る方法が分からなかったので、中に変数を入れてみたら何とかうまくいきました。もしもっと良い方法があれば教えてください。

コード

"count"はThingSpeakの確認用に入れていますので特に不要です。

MQ135,js
<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"
    />
    <link rel="stylesheet" href="/css/starter-sample.css" />
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
    <script
      src="https://unpkg.com/[email protected]/obniz.js"
      crossorigin="anonymous"
    ></script>
  </head>
  <body>
    <div id="obniz-debug"></div>

            <script>
      var obniz = new Obniz("★ここにobnizIDを入れます★");

      obniz.onconnect = async function() {
        var mq135 = obniz.wired("MQ135", {vcc:3, gnd:2, do:1, ao:0});
        obniz.display.clear();
        obniz.display.print("Heating...");
        await mq135.heatWait();
        var val =0;

        await mq135.heatWait();
        obniz.display.clear();
        obniz.display.print("Started");

        mq135.onchangeanalog = function(voltage) {
          console.log(voltage);
          val = voltage;
        }

        var count = 1;
        const request = new XMLHttpRequest();

    while(true){
       const request = new XMLHttpRequest();

        request.open("GET", `https://api.thingspeak.com/update?api_key=★ここにAPIKeyを入れます★&field1=${val}&field2=${count}`);
        request.send();
        obniz.display.clear();
        obniz.display.print(count);
        obniz.display.print(val);
        count++;
        await obniz.wait(60000); 
    }




      };
    </script>



  </body>
</html>

おまけ

本当は上記のコードを10分毎に実行して定期的にモニタリングしたいと思って
サーバーレス イベント
で実行させるつもりでした。
しかし

①このセンサーは暖気に2分必要

このセンサーは加熱を必要とします。十分に加熱されないと値は安定しません(少なくとも2分程度)

②30秒制限

呼ばれない場合は30秒で自動的にHTMLは閉じられます。

で①>②となってしまうせいかうまくいきませんでした。。。

これも良い方法があればコメント頂けると助かります。