PR 記事には広告が含まれています
スポンサーリンク
Translate

BL0940で測定した消費電力をクラウド(Ambient)に送信して消費電力の変化をグラフ化できました

スポンサーリンク

ESP32とBL0940で電力が測定できるようになったので、クラウドに測定結果を送信して、グラフ化できるようにしました。

前回の記事はこちらです。

スポンサーリンク

Ambient

Ambientは、無料で使えるデータの可視化サービスです。以前、はかり式の離床センサを作った時に使いました。Ambientや他のサービスや使い方は、そちらをごらください。

はかり式の郵便受けの配達センサーにも使っています。

スポンサーリンク

Ambientに対応させる

Ambientの使い方はとても簡単です。ユーザー登録をして、チャンネルIDとライトキーを取得します。Ambientのライブラリを導入し、

  ambient.set(1, data1);
  ambient.set(2, data2);
  ambient.set(3, data3);
  ambient.set(4, data4);
  ambientSendOk = ambient.send();

とするだけで、4つのデータを送信できます。

完成したプログラムは、こうなりました。

//WiFi
#include 
const char* WifiSSID = "SSIP";
const char* WifiPassword = "PASS";

//Ambient
#include "Ambient.h"
const unsigned int WriteChannelId = ChannelID; // Ambient channel ID
const char* writeKey = "WriteKey"; // wirte key
WiFiClient wifiClient;
Ambient ambient;

#include "BL0940.h"
BL0940 bl0940;

float voltage = 100.0;
float current = 0.0;
float power = 0.0;
float powerFacotor = 100.0;

float momentaryVoltage = 100.0;
float momentaryCurrent = 0.0;
float momentaryActivePower = 0.0;
float momentaryPowerFactor = 100.0;

void setup() {
  Serial.begin(115200);

  bl0940.Reset();
  bl0940.setFrequency(50); //50[Hz]
  bl0940.setUpdateRate(800); //800[ms]

  //Connect WiFI
  if ( connectWiFi() != true )
    ESP.deepSleep(60 * 1000 * 1000);  //deepsleep till 60min

  //Initialize Ambient
  ambient.begin(WriteChannelId, writeKey, &wifiClient);

}

void loop() {

  voltage = 100.0;
  current = 0.0;
  power = 0.0;
  powerFacotor = 100.0;

  for ( int i = 0 ; i < 60*5 ; i++) { bl0940.getVoltage( &momentaryVoltage ); Serial.printf("%.2f [V] ", momentaryVoltage ); bl0940.getCurrent( &momentaryCurrent ); Serial.printf("%.2f [A] ", momentaryCurrent ); bl0940.getActivePower( &momentaryActivePower ); Serial.printf("%.2f [W] ", momentaryActivePower ); bl0940.getPowerFactor( &momentaryPowerFactor ); Serial.printf("%.1f [%%]\n", momentaryPowerFactor ); if ( abs(100.0 - momentaryVoltage) > abs(100.0 - voltage) )
      voltage = momentaryVoltage; //Maximum error for 100V
    if ( momentaryCurrent > current )
      current = momentaryCurrent; //Maximum current
    if ( momentaryActivePower > power )
      power = momentaryActivePower; //maximum power
    if ( momentaryPowerFactor < powerFacotor )
      powerFacotor = momentaryPowerFactor;  //minimum power factor

    Serial.flush();
    delay(1000);
  }
  
  Serial.printf("send ambient %.2f [V] %.2f [A] %.2f [W] %.1f [%%]\n", voltage, current, power, powerFacotor);

  //Write to Ambient
  writeToAmbient( voltage , current , power, powerFacotor);
  
  Serial.println("");

}

//connect WiFi
bool connectWiFi()
{
  Serial.println("connecting WiFi");

  //10 times trials
  for ( int i = 0 ; i < 10 ; i++ )
  {
    Serial.print("Try");
    Serial.print(i + 1);

    WiFi.mode(WIFI_STA);
    WiFi.disconnect();
    WiFi.begin(WifiSSID, WifiPassword);

    for ( int j = 0 ; j < 300 ; j++ )
    {
      if ( j % 10 == 0)
      {
        Serial.print("*");
      }
      delay(100);
      if (WiFi.status() == WL_CONNECTED)
        break;
    }

    if (WiFi.status() == WL_CONNECTED)
      break;

    WiFi.disconnect();
    WiFi.mode(WIFI_OFF);
    delay(5000);  //wait 5 sec
  }

  Serial.print(" WiFi connected.\nIP address: ");
  Serial.println(WiFi.localIP());
  return (WiFi.status() == WL_CONNECTED);
}

//Write data to Ambient
bool writeToAmbient( double data1 , double data2, double data3, double data4)
{
  ambient.set(1, data1);
  ambient.set(2, data2);
  ambient.set(3, data3);
  ambient.set(4, data4);
  bool ambientSendOk = ambient.send();
  Serial.print("Ambient write:");
  if ( ambientSendOk == true ) Serial.println("ok"); else Serial.println("NG");

  return ambientSendOk;
}

1秒毎に電圧、電流、電力、力率を取得して、電圧は100Vから一番ずれた値、電流・電力は一番大きな値、力率は一番小さな値を、5分間隔でAmbientに送信します。

プログラム全体は☝️☝️☝️からダウンロードできます。CC0です。ご自由にお使いください。

スポンサーリンク

冷蔵庫の消費電力をモニターしてみる

冷蔵庫とコンセントの間に、完成した電力計を接続して、冷蔵庫の消費電力の時間変化を見てみます。

この冷蔵庫は、冷却するためのコンプレッサーの消費電力が116W、霜取り用の電熱ヒーターの消費電力が179Wとなっています。

冷凍庫は、常に冷やし続けると霜が大量に付いてしまい冷却効率が下がるため、定期的にヒーターで加熱して霜がつかないようにしています。冷やしたり温めたり大変ですね。

約半日動作した結果がこちらです。

左のグラフの赤が消費電力(左軸)水色が力率(右軸)です。基本的に100W以上消費していて平均120Wというところでしょうか。力率が100%の時間は電熱ヒーターがフルでONしているのでしょう。力率が75%程度と低めな気がしますが、コンプレッサーの誘導負荷によって75%程度になってしまうのでしょうか。

右のグラフは、青がコンセントの電圧(左軸)黄色が消費電流(右軸)です。コンセントの電圧は100Vで一定だと思っていたのですが、結構変動しているんですね。夜の0時と、昼間の12時に大きく(2Vですが)変化しています。このタイミングで発電所の何かが切り替わっているのでしょう。

電力を測定すると、いろいろわかって面白いですね。

スポンサーリンク

機器の電力をモニターする装置ができました

接続された機器の消費電力をモニターする装置が完成しました。BL0940は便利なICですね。

これを使って、もっと面白い実験をやってみようと思います。

ここで紹介するキットはこちら👇👇👇で販売しています。