試作
前回の記事
ty-note.hatenablog.com
で大まかに仕様を決めたので、実際に回路を作って実験をしてみます。
ハードウェアは、以前の記事
ty-note.hatenablog.com
と同じ以下とします。
回路構成は以下とします。とりあえずの機能実証と精度確認が目的なので、表示機能は設けず、プログラム書き込みに使うUSB-シリアル変換基板を介してシリアルモニタでデータを受け取ります。Arduino IDEはよく出来ていて便利ですね。
Arduino IDEのサンプルコードは以下の通りです。
setup()でADS1015の初期設定と読み取りレジスタの指定を行った後、loop()で16.66msの間に取れるだけデータを読み取り、二乗平均の平方根を取って値を換算しシリアル通信で出力します。
コメントアウトしているFor文を実行すると、計算に使った全サンプルデータをCSVで吐き出します。
#include <Wire.h>
#define ADS1015_ADRS 0x48
int data_L, data_H;
int i;
long data, buffer;
int measurement[200];
unsigned long t1,t2;
float Vrms, Watt;
void setup() {
Serial.begin(9600);
Wire.begin();
Wire.setClock(400000);
Wire.beginTransmission(ADS1015_ADRS);
Wire.write(0x01);
Wire.write(B00000110);
Wire.write(B11100011);
Wire.endTransmission();
Wire.beginTransmission(ADS1015_ADRS);
Wire.write(0x00);
Wire.endTransmission();
Serial.println("Init done");
}
void loop() {
delay(500);
i = 0;
data = 0;
Vrms = 0;
buffer = 0;
t1 = micros();
do {
Wire.requestFrom(ADS1015_ADRS,2);
while(Wire.available()){
data_H = Wire.read();
data_L = Wire.read();
}
data_H = data_H << 8;
measurement[i] = (data_H + data_L) >> 4;
buffer = measurement[i];
data = data + (buffer * buffer);
i = i+1;
t2 = micros();
} while ((t2-t1)<16666);
Vrms = data;
Vrms = sqrt(Vrms / i) * 0.5;
Watt = Vrms * 3;
Serial.print("i=");
Serial.print(i);
Serial.print(",data=");
Serial.print(data);
Serial.print(",Vrms=");
Serial.print(Vrms);
Serial.print(",Watt=");
Serial.print(Watt);
Serial.print(",");
Serial.println("EndOfData");
}
実行すればシリアルモニタに以下が表示されます。
サンプル数は約140個取れており、ADS1015のサンプルレートを大幅に超えている(無駄に同じ値を読んでいる)ため問題ないと思います。
取得した波形
内部バッファmeasurement[i]に溜めたデータをシリアルモニタで出力し、Excelで波形にした結果が以下です。
スイッチングACアダプタを接続したとき。力率の悪そうな波形になっています。
gootのセラミックヒータ式はんだごてを追加で接続した場合。
一応きっちり1周期分取れているようです。所詮3300サンプル/秒なので、特にスイッチング電源などのピーク電流を取りこぼしている可能性もあり、数回はサンプルを取って平均するような動作がいいでしょう。
精度の確認
都合のいい測定器は持ち合わせていないので、比較対象としてサンワサプライのワットチェッカーを使います。
www.sanwa.co.jp
かなり前に購入したものですが、これは皮相電力・有効電力を分けて表示できる(=力率の概念がある)優れものです。
いくつか手元の家電でチェックした結果が以下です。
当たり前ですが力率が高い機器ほど測定値とワットチェッカーの値が近く、力率の悪いスイッチング電源ではかなりの差(50W⇔80W)が出ています。
想定外だったのがエアコンです。インバータ式の2.2kW機で、Panasonicの最廉価グレードです。Panasonicはカタログで力率を書いていない(ダイキンは書いてある)ので仕様はわかりませんが、ワットチェッカーでは力率0.81となっています。ある程度運転が安定した状態で測定しているので、立ち上げ時などフルパワー近くで運転しているときはもう少しましなのかもしれませんが・・。エアコンによる冷暖房費、および同じ仕組みを使っているエコキュートの電気代は季節によっては大きなウエイトを占めるので、これが2割近い誤差を生むのはちょっと困りものです。
測定対象 |
自作メータ(W & VA) |
ワットチェッカー(W) |
ワットチェッカー(VA) |
力率 |
セラミックヒータ・弱 |
615 |
643 |
647 |
0.99 |
セラミックヒータ・強 |
1067 |
1094 |
1085 |
0.99 |
ドライヤー・弱 |
600 |
580 |
828 |
0.69 |
ドライヤー・強 |
1110 |
1132 |
1136 |
0.99 |
スイッチングACアダプタ |
80 |
50 |
91 |
0.55 |
エアコン(暖房) |
710 |
578 |
711 |
0.81 |
以下は、それぞれの電流波形です。
セラミックヒータ 弱
セラミックヒータ 強
ドライヤー 弱
半波整流して50%出力にしているんですね・・
ドライヤー 強
ACアダプタ
インバータエアコン 暖房運転 立ち上げ時
思いのほか力率が悪いのは安物だからでしょうか。
まとめ
皮相電力での比較であればワットチェッカーとかなり近い(5%以内)の値が出ており、CTの電圧波形のRMSを測定しての電流換算は計算通り動作しているようです。
電子工作で商用100Vを直接触るのにちょっと抵抗があるので、力率をたとえば0.9で固定するなどして換算するしか手がないように思います。
CTでの電力計測は目途がついたので、次は電力量計算および多チャンネル測定に進みます。