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 #includeconst 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ですね。
これを使って、もっと面白い実験をやってみようと思います。
ここで紹介するキットはこちら👇👇👇で販売しています。
コメント