google-site-verification: google3bd66dd162ef54c7.html

Arduinoとアナログ電力量計で作った電力ロガーの測定事例

 完成した誘導式電力量計を使った消費電力ロガーは、消費電力がゼロ近くになるとうまく測定出来ないという問題があります。でも、データーが変になったところは後である程度は修正出来ます。それにSDカードに記録しているので長時間の記録が可能という特長があります。

 ということで実際に記録を採ってみました。まずはウォーターサーバーです

▼ウォーターサーバー(クリクラ サーバー04Le)消費電力測定中
ウォーターサーバーの消費電力測定中

▼生データー
ウォーターサーバー生データ
 大きなピークは回転検出穴でパルス割れが発生したため発生しています。また、円盤の回転が止まるとデーターが更新されなくなるため同じ値が連続して記録されています。

 このような異常値を取り除いたのが次のグラフです。

▼ウォーターサーバーの消費電力
ウォーターサーバー消費電力
 約27時間の連続測定結果で、記録間隔は1分です。

 80ワット付近の値は冷凍用のコンプレッサーの動作時、330ワット付近の値は加熱ヒーターの動作時で、410ワット付近の値はその両方が動作している状態と思われます。半日くらい電源を切った状態からスタートしたので、定常状態に持って行くために、最初はヒーターとコンプレッサーが動き続けています。

 平均の消費電力はエクセルで簡単に計算出来ますが、異常値の修正処理がうまくいっていない可能性があるので、あえて細かい値は書きませんが、およそ50Wくらいの消費電力になっていました。

 次は冷蔵庫です。この冷蔵庫の消費電力は以前回路を使って測定したことがあるのでその時の結果と比較出来るはずです。なお、前回は皮相電力測定でしたが今回は有効電力測定になっています。

▼冷蔵庫の消費電力測定中
冷蔵庫の消費電力
 この冷蔵庫は3年前に買った物で、PanasonicのNR-F568XGで、555リットルの6ドアです。

▼エクセルで測定結果の整理中
ロガーの出力をエクセルで整理中

▼生データー
冷蔵庫消費電力、生データ
 クリーピング防止穴の誤検出が原因の大きなピークがあります。

▼異常値を除いた消費電力
パナソニック冷蔵庫の消費電力
 約92時間分のデーターです。180ワットくらいのピークは霜取りを行っているものと思われ、その後消費電力が100ワットくらいになっているのは温度の上がったコンデンサを再度冷やしているのだと思います。
 定常状態では50ワットくらいで運転していて、時々コンプレッサを止めているようです。コンプレッサが止まっている状態の消費電力は7ワットくらいで、これは主にドアまわりの結露防止ヒーターの消費電力ではないかと思います。
 なおこの測定期間全体の平均消費電力は51.2Wでした。

 同時に記録しているデーターです。

▼温度(CPU温度)
温度変化
 このところ涼しくなったので、その様子が記録されているようです。

▼周囲の明るさ
明るさ
 このグラフは下側が明るい状態を示しています。ということで値が上に張り付いている期間は部屋が真っ暗だったことを表しています。このロガーはRTCを持たないので正確な時刻は判りませんが、明るさのデーターがあれば、およその時刻を推定することが可能です。

◆まとめ
 異常値が記録されてしまう問題を何とかする必要がありますが、そこそこ使えるデーターロガーが出来ました。SDメモリーカードなのでデーター量を気にしないでいいのが嬉しいです。

 ところである程度予想していたのですが、ウォーターサーバーの消費電力はかなり大きかったです。大雑把に言うと、最近の大型冷蔵庫と同じくらいの消費電力はあるようです。我が家では使わない時は出来るだけメイン電源を切るようにしていましたが、こういう使い方で正解だったと思います。
 冷蔵庫の消費電力は各社が熾烈な競争を行った結果ここまで下がった訳ですが、ウォーターサーバーでもこのような競争が行われて欲しいところです。

Arduinoとアナログ電力量計で作る消費電力ロガー、完成しました

 このあいだから取り組んでいた誘導式の電力量計(電気メーター)とArduinoを使った消費電力ロガーが完成しました。実は完成したと言っても、ちょっと問題のある物になっているのですが、これ以上改善するのも難しそうなので現状を記事にしておきたいと思います。

 少し間が空いたので、測定原理からざっと説明しておきます。

▼電力量計
誘導式電力量計
 これはヤフオクで落とした機械式(誘導型)の電力量計です。この円盤の動きをレーザー光で検出して電力ロガーを作るというのが今回の試みです。

▼回路図 (クリックで別窓に拡大)
電力ロガーの回路図
 Arduinoを使って液晶表示とSDメモリーカードへデーターを記録します。

▼配線の様子
Arduinoで作る電力ロガー
 木で作った電力量計のスタンドの裏側に、Arduinoとブレッドボードを取り付けています。

 電力量計のパルスを読んで電力を計算するプログラムと、データーをSDメモリーカードに書き込むプログラムを既に作っているので、両者を合体させれば消費電力ロガーのプログラムが完成します。

 完成した電力ロガーのスケッチはこちら (Shift-JISエンコードになっています)

▼液晶表示
表示
 1行目は以前のSDカードロガーと同じで、先頭から記録インターバル表示、記録行数表示、温度表示です。2行目は現在の電力と、累積電力を表示します。なお、記録開始前には LogConf.txt で指定した記録条件の一部を表示しますが、ここは以前作ったSDカードロガーと同じです。

▼ログ出力例
ログの例
 csv ファイルをエクセルで表示したものです。

▼動作テスト
クリクラの電力測定
 ウォーターサーバー(クリクラ サーバー04Le)の消費電力を測定してみました。 仕様の銘板によると、73Wの冷凍用のコンプレッサーと、湯沸用の350Wのヒーターが入っているようです。実際に消費電力を記録してみると、最初は410Wくらいの消費電力で、時間が経って安定すると、ヒーターとコンプレッサーが各々断続運転モードに入っていました。

◆問題発覚
 これで、めでたく完成かと思っていたら、思わぬ問題がありました。

 このウォーターサーバーはヒーターなどが入っていない時は消費電力がほとんどゼロになりますが、そうなると電力量計の円盤が廻らないので電力の測定が出来ません。
 例えば直前に400Wの消費電力があって待機状態に移行したとします。この場合、新しい値が得られないので、測定結果はずっと400Wのままになってしまいます。実際の消費電力はゼロなので、これでは大きな測定誤差が発生してしまいます。

 長時間円盤が回転していないことはプログラムで検出できるので、補正をかけるようにすればある程度の解決策にはなりそうですが完全な補正は難しいと思います、それにアルゴリズムはかなり面倒になります。
 別の解決策として、5Wくらいのダミーロードを入れて、消費電力がゼロにならないようにしてしまう手があります。でもこれって、簡単ですが、あまりスマートな方法ではありません。

 あと、円盤の回転速度が遅い場合、レーザー光の立ち上がり速度が遅くなるため、検出パルスが割れてしまって異常に大きな消費電力として検出される問題があります。これはハードかソフトで対策可能ですが、上に書いたような本質的な問題が解決できたら考えることにします。

◆今後の予定
 作ってみたら本質的な問題にぶち当たってしましました。少なくても数ワットの消費電力はあると思っていたのですが、まさか完全にゼロになるものがあるとは思いませんでした。仕様検討不足です。

 電力が小さくなると測定時間が長くなるので感度を倍にするなどの手を打っていたのですが、完全にゼロになられるともうお手上げです。ということで、この話はおしまいにすることにします。いつもなら記事に掲載するプログラムは清書しているのですが、今回はモチベーションがすっかり下がってしまったので、書きっぱなしになっています。ご容赦ください。

 とは言っても、せっかく作ったロガーなので、データー取りが終わったら出力例のグラフをちょっとだけ次の記事で公開したいと思います。

電力量計の計量パルスをArduinoで読む(割込み版)

 電力量計の話の続きです。一つ前の記事でArduinoから電力の測定結果を読むプログラムを作りましたが、このプログラムで残念な点は、デ-ターはアラゴの円板の穴を検出したタイミングで出力されるということです。つまり電力の大きさによってデーターが出力される間隔が変化します。

 これでも、人間が値を読む場合はあまり問題は無いと思います。でもデーターをファイルに落としてPCでグラフ化して分析したい、などという場合は、一定の時間間隔のデーターでないと使い難いです。

 この対策として、タイマー割り込み(MsTimer2)を使って測定間隔を一定にするようにしました。あと、せっかくなので、円板の穴の検出も割り込みで行うようにしました。こうしておけば、後で別の機能を追加するのが楽になるはずです。

▼回路図
回路図
 円板の回転検出の表示用のLED(D1)をハードで点灯させるようにしました。同じことを割込みで動くプログラムでやろうとすると、ちょっとやっかいです。
 それと、C2はノイズ対策用に入れています。パルスの検出を割り込みでやっているので、ノイズが入ると誤動作するので注意が必要です。あと、回路図にはうまく表現出来ませんが、アナログ回路部分のノイズ対策はしっかりやる必要があります。

▼プログラム
// 電力ロガー
// 誘導型電力量計の円盤の回転を検出して電力表示
// (回転検出と測定間隔決定に割り込みを使用)
// 2018/8/26 ラジオペンチ http://radiopench.blog96.fc2.com/

#include <MsTimer2.h>

#define holeSigPin 2

volatile unsigned long tLast; // 前回のパルス時刻(ms)
volatile unsigned long tDiff; // パルス間隔
volatile unsigned long tNow; // 現在時刻
volatile unsigned long holeCount = 0; // 穴数カウンタ
volatile unsigned long NN = 0; // 累積時間カウンタ
volatile int timeUpFlag = 0; // タイムアップフラグ

float Watt = 0.0; // 電力
float Wh = 0.0; // 積算電力量

const float SFw = 1500.0; // (ScalFactor) 電力換算係数 SFw / パルス間隔(s) = W 
// 600rev/kWhで穴2個×2相合成で2400パルス/kWh → 1W = 1000*3600/2400=1500
const float SFe = 2.4; // 電力量換算係数 パルス数 * SFe = Wh

void setup() {
Serial.begin(9600);
pinMode(holeSigPin, INPUT_PULLUP); // クリーピング防止穴割り込み入力ピン

Serial.println();Serial.println("AC power logger start"); // 開始メッセージ
Serial.println("time(s), HoleCnt, Power(W), Enargy(Wh)");

// 割込み処理の設定
MsTimer2::set(1000, sensInterval); // 1000msごとにMsTimer2割込み
MsTimer2::start();
attachInterrupt(0, holeDetect, FALLING); // pin2(int0)のネガエッジで割込み
}

void loop() {
while (timeUpFlag == 0) { // タイマー割込みが入るのを待つ
}
timeUpFlag = 0;
if (holeCount >= 2) { // 2つ目以降の穴だったら電力計算
Watt = SFw / (tDiff / 1000.0); // 電力計算
Wh = (holeCount - 1) / SFe; // 累積電力量計算
}
logPrint(); // 測定結果をシリアル出力
Serial.flush(); // シリアル出力完了待ち
}

void logPrint() { // 測定結果室力
Serial.print(NN); Serial.print(", ");
Serial.print(holeCount); Serial.print(", ");
Serial.print(Watt); Serial.print(", "); Serial.println(Wh);
}

void sensInterval() { // Mstimet2の割り込み処理(タイマー割り込み)
timeUpFlag = 1; // タイムアップグフラグを立てる
NN++; // 累積時間インクリメント
}

void holeDetect() { // クリーピング防止ホール割り込み処理(ピン割り込み)
tNow = millis(); // 現在のシステム時刻取得
if ((tNow - tLast) > 30) { // 前回パルスから30ms以上経過している場合だけ計算(気休め)
tDiff = tNow - tLast; // 時間差計算 (50日でオーバーフローするので注意)
tLast = tNow; // 前回値として記録
holeCount++; // 穴数カウントアップ
}
}
 32~34行目が割り込み条件の設定です。55行目のsensInterval() がタイマー割り込み発生時の処理ルーチン。60行目のholeDetect() がアラゴの円盤の穴を検出した場合の処理ルーチンです。

 これ、二種類の割り込みを使っているので Arduino のプログラムとしてはちょっと高級な部類に入ると思います。でも、10行くらいの小さな関数の組み合わせで出来ているので、判り易いのではないかと思います。

▼出力例-1 (開始時)
出力リスト1
 開始直後の出力です。穴の数(HoleCnt)が2にならないと電力が計算できないので、最初はゼロになっています。

▼出力例-2 (測定中)
出力リスト1
 電力測定中のリストです。左から開始からの秒数、穴のカウント数、電力(W)、電力量(Wh)が表示されています。なお、電力の値は、円板から次のパルスが来るまで同じ値が連続して出力されます。

◆まとめ
 これで電力量計の測定結果が使い易いデーターとして取得出来るようになりました。

 この話はこれで終わりにしようかと思ったのですが、測定結果をSDカードに保存すると使い勝手がもっと良くなりそうです。以前気圧ロガーを作った時にSDカードを使いましたが、それ以来ずっとSDカードを使うプログラムを作っていません。

 そんなことで、久しぶりにSDカードへのデーターの記録をやってみたいと思います。ヤフオクで1500円で落とした電力量計ですが、これをネタにずいぶん楽しんでいるのですが、まだまだ遊べそうです。
カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード