LoginSignup
2
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-12-24

作ったもの

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/obniz@3.11.0/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は閉じられます。

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

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

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1