寒冷地に行ってきたのでenebularのInfoMotionで室内と室外の温度変化を測定してみる

はじめまして、外部ライター ワンフットシーバス 田中正吾です。ウフル様とはMilkcocoaやenebularを使ってみて事例づくりやそれを伝えることを中心に関わっております。

個人的にクローズドな技術交流会がありまして結構な寒冷地に行ってきたので、enebularのInfoMotionで室内と室外の温度変化を測定してみました。

image

今回やること

image

測定機器の設定

まず測定機器の設定をします。

image

スイッチサイエンス製の以下の製品を使います。

D12のGROVEの差込口に挿して、以下のようにプログラムを書き込みます。(室内で行いました)

Milkcocoa以外のセンサーをつなげるソースコードは、umi_kappaさんのESP-WROOM-02 Arduino互換ボードで温湿度センサーを使うを参考にさせていただきました。

#include 
#include 

// ライブラリを読み込む
#include "DHT.h"

/************************* WiFi Access Point *********************************/

#define WLAN_SSID       "WLAN_SSID"
#define WLAN_PASS       "WLAN_PASS"

/************************* Milkcocoa *********************************/
#define MILKCOCOA_APP_ID      "MILKCOCOA_APP_ID"
#define MILKCOCOA_DATASTORE   "MILKCOCOA_DATASTORE "
#define MILKCOCOA_SERVERPORT  1883

const char MQTT_SERVER[] PROGMEM    = MILKCOCOA_APP_ID ".mlkcca.com";
const char MQTT_CLIENTID[] PROGMEM  = __TIME__ MILKCOCOA_APP_ID;

WiFiClient client;

Milkcocoa milkcocoa = Milkcocoa(&client, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID);

// 接続するピン
#define SENSOR_PIN 12
// 今回は温湿度センサーはDHT22
#define DHT_TYPE DHT22
// センサーのインスタンス
DHT dht(SENSOR_PIN, DHT_TYPE);

void setup() {
  Serial.begin(115200);
  // センサ初期化
  dht.begin();
  //
  Serial.println(F("Milkcocoa SDK demo"));
  //
  // Connect to WiFi access point.
  Serial.println(); Serial.println();
  Serial.print("Connecting to ");
  Serial.println(WLAN_SSID);
  WiFi.begin(WLAN_SSID, WLAN_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  // onpush
  Serial.println( milkcocoa.on(MILKCOCOA_DATASTORE, "push", onpush) );
  //
  Serial.println("---- start DHT22 Milkcocoa----");
}

void loop() {
  milkcocoa.loop();
  delay(5000);

  // 湿度を取得
  float humidity = dht.readHumidity();
  // 温度を取得
  float temperature = dht.readTemperature();

  // センサーから値を取得できたか判定
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("sensor error.");
    // loop()関数の始めに戻る
    return;
  }

  // push
  DataElement elem = DataElement();
  elem.setValue("t", temperature);
  elem.setValue("h", humidity);
  // Milkcocoaに送信
  milkcocoa.push(MILKCOCOA_DATASTORE, &elem);
}

void onpush(DataElement *elem) {
  Serial.println(elem->getInt("t"));
  Serial.println(elem->getInt("h"));
};

enebularのInfoMotionで可視化の準備をする

では、測定先はMilkcocoaに投げてenebularのInfoMotionで可視化の準備をします。

image

DataSourceで新しいDataSourceを作成します。

image

今回の送りこむMilkcocoaのAppIDとDataSourceを設定します。

image

つづいて、InfoMotionで新しいグラフを作成します。

image

BarChartで温度を示す t 値を見張るようにしておきます。

それでは、いざ測定

では、宿泊しているホテルの室内から室外に出て温度変化と湿度の変化を測定してみます。

まず室内の様子。

image

乾燥していますが、あたたかいですね。

image

いざ外に移動してみます。さむい。。。

image

ぐんぐんさがります。

image

数分待ってみると、無事、天気予報と同じ-1℃程度になりました。よかった。そしてたんまり雪が積もっていたので、湿度は高めでした。センサーに温度が伝わりきるまでに少々時間がかかりますね。

可視化を確認

さて、さきほどのグラフはどうなっているでしょう?

室内ですこし温まったら確認してみました。

image

みてみると無事測定できてます!

また、別立てで温度と湿度を比べるグラフ形式では、室内では温度が高く乾燥しているところから、室外へ行くと温度は低いが湿度が高いクロスした現象が確認できました。

image

このように、ひとまずセンサーを取り込んでみて、環境の様子を確認することがすぐできるenebularおもしろいですね。

また測定の機会があればお知らせしていきます。

余談

一緒に行った方にこっそり撮影していただいてました。なかなかあやしいw

image

image