google-site-verification: google3bd66dd162ef54c7.html

電力量計の計量パルスを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円で落とした電力量計ですが、これをネタにずいぶん楽しんでいるのですが、まだまだ遊べそうです。

電力量計(積算電力計)、の配線を変えて感度を2倍にする

 レーザーを使って電力量計のアラゴの円盤の回転が検出できるようになったので、Arduinoから(有効)電力の測定が可能になりました。ただ、円板の回転速度が遅いので測定時間が長くかかるのが悩みです。

 この問題を少しでも改善する方法として、電力量計の配線を変えて感度を二倍にする手があったのでご紹介します。たぶん同じことをやる人はいないと思いますが、電力量計の配線を理解するには面白い話だと思います。

▼使った電力量計
100V単相3線式電力量計
 ヤフオクで1500円くらいで買ったものです。どんどんスマートメーターに交換されているので絶滅 危惧 確定種です。

▼感度
600rev/kWh
 銘板に書かれている仕様は600rev/kWhとなっています。これは円盤の600回転が1kWhに相当するという意味です。

 仮に消費電力が100Wだったら円盤が1回転するのに60秒かかるということで、円板の回転を見て電力を測定するためにはこの時間を待たないといけません。でもこれはちょっと時間が掛かりすぎです。(円盤に刻まれている100等分目盛りを読めば、1/100の時間で測定可能です)

 電子工作ではもっと小さな電力を測定したい場合が多いと思いますが、こんなに測定時間が掛かっては困ります。ということで何とかしてこの時間を短く出来ないか考えてみます。とは言っても大したことは出来ていないのですが、検討したことを記録を兼ねて記事にしておきます。

 まず、円板にクリーピング防止穴は二つあるので、この穴を検出すれば、パルスの数は倍になり、これで感度は1200パルス/kWhになります。もし円板の穴を増やすことが出来れば、パルス数をもっと増やすことが出来ますが、相手は密封されたケースに入っているのでそんな乱暴は出来ません。

 これで万策尽きたかと言うとそうでもなくて、電力計の感度を2倍にする手がありました。実はこの方法を解説するのがこの記事の目的です。以下回路図で説明します。なお回路図の緑色のラインが主電流が流れる経路です。

▼単相3線式電力量計
普通の使い方
 これが本来の使いで、Z1,Z2は100V、Z12には200Vの負荷を接続します。CTは電流コイル、Vは電圧コイルでこの組み合わせで一つの電力測定素子を形成しています。電力測定素子は二つあり、二つの出力(トルク)をアラゴの円盤で足すことで全体の電力を測定する仕組みになっています。

▼最初の配線
片相だけ使用
 最初にやった配線は上の通りで、コンセントに挿して使うので、片方の相しか使っていません。つまりもう一方の電力測定素子は遊んでいて、なんだかもったいないです。

 この使っていない測定回路を何とか活用出来ないか、と考えたのが次の回路図です。

▼改良した配線
単相だけど両方使う
 1Lから出て来た電流を3Sに戻すことで、遊んでいた電力測定素子を使うようにしました。電圧コイルのホット側はショートバーで切り離すことが出来るので、3Sに接続されていたのを1Sに付け替えます。こうすればV2の消費電力が測定結果に混ざるのを防ぐことが出来ます。これで電力計の感度は2倍、つまり、2400パルス/kWhになります。 

▼実際の配線
実際の接続
 1Lから3Sへの配線にはIV線を使用しました。電圧コイルV2の渡り線は絶縁性の良いテフロン線を使いました。

 なお、ここの配線を間違えると電源間でショートする可能性があり、怖い思いをすることになるので十分な確認が必要です。電圧コイルの直流抵抗は一つで150Ωで、この回路では2つ並列にしているので電源間の抵抗は75Ωになります。テスターでその様子を確認して誤配線が無いことを確かめると安心です。 

◆結果
 この接続で確かに円盤の回転速度は2倍になっていることが確認出来ました。つまり、クリーピング防止ホールの検出パルスは、2400パルス/kWhとなりました。100Wならパルス間隔は15秒となり、測定時間を短縮することが出来ました。

 なお、こんなふうに電気メーターの配線を勝手にいじれるのは、自分用のメーターだからこそ出来ることです。家に付いている取引用の電力量計の配線は絶対にいじってはいけないので念のため。普通は封印されているはずです。

◆考察
 こういう接続は、電力量計の正しい使い方から外れているので、精度は保証されなくなります。
 一番影響が大きそうなのは二つある電圧コイルの励磁方向で、本来ならお互いが逆相になるのが、この記事の配線では同相になります。他にも内部の電位分布が変わるなどの影響で何らかの影響が出る可能性があります。とは言っても、たぶん大きな誤差にはならない気がします。

 ちなみに二電力計法の考え方では、100V単相3線式の電力計は100V三相3線式の電力計と理論的には同じはずです。でもメーカーの解説を読むと、内部の結合状態が変わるので精度は保証出来ないということになっています。これと同じような話だと思います。(三相で線間電圧100Vなんて普通は無いですが。)
http://fa-faq.mitsubishielectric.co.jp/faq/show/12857?category_id=759

【注意】 このブログの他の記事も同じですが、試される場合は自己責任でお願いします。記事の作者は何の責任義務も負いません。
カレンダー
07 | 2017/08 | 09
- - 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コード