さて回路図が決まったら工作である。まず最初は、ワットチェッカーから、それぞれの信号を引っ張ってくる必要がある。ということでワットチェッカー側の加工である。ちなみに一応念のために書いておくが、こうした使い方は完全にメーカーの想定外なので、加工というか蓋を開けた時点でメーカー保障は受けられなくなる。また、直前までワットチェッカーをコンセントに繋いでいると、内部のコンデンサなどに電荷が残っているから、直ぐに触ると感電する恐れがある。きちんと放電しきってから作業してほしい。
というわけで以下手順。オペアンプのLM2902の1,11,14番ピンにそれぞれリード線を取り付ける(Photo01)。LM2902の仕様書はこちらから入手できる。Tweet-a-wattの回路によれば、14番ピンには電圧に比例した信号が、1番ピンには電流に比例した信号がそれぞれ出ているので、これらの電圧をそれぞれリードで引っ張り出してやる必要がある。余談になるが、今回のワットチェッカー側の回路を見る限り、電圧は単なる抵抗分圧回路、電流は一旦整流した上で分流器を構成して電圧として測定しているようだ。筆者の場合だと、確か中学の技術か何かの時間でテスターの作成という課題でこれらを作った記憶があるのだが、最近のカリキュラムでこうした方法をどこまで説明しているのかちょっと不明である。もしこれらの方法が判らない方がおられたら、(流石に本稿でそこまで説明を始めると脱線が過ぎる気がするので)"電圧測定"、"電流測定"などでWebで検索を掛けていただくのが良いだろう。
またそれぞれの電圧を取得するためには、GNDも共通にしないといけない(1番あるいは14番ピンの電圧は、11番のGNDピンに対する電圧だから)ので、これも引っ張り出す感じだ。半田付けがちょっと面倒かもしれないが、あらかじめ各ピンに半田を載せておき、そこにリードを後から取り付けるようにすれば可能である。最終的には、このリードが外れないようにホットボンドなどで固めたほうがいいが、とりあえずはテストなのでこのまま引っ張り出すことにする。
このリードをどうやって外に出すかだが、TAP-TST5は見事な合わせ構造になっていて隙間はない。なので、ニッパーをつかってケースの上側に切り欠きをつくり、そこから引っ張り出した(Photo02)。この引っ張り出したリードを抵抗分圧回路経由でArduinoに接続する訳だが、今回はブレッドボードで簡単に抵抗分圧回路を構成してみた(Photo03)。
Photo02: ここも最終的にはコネクタなどを取り付ける予定。とりあえずは穴が開いていればよしとした。 |
Photo03: ブレッドボードは393回でご紹介したCHIPINO Proto-Shield。 |
さてArduino側であるが、まずはList 1の様なSketchを簡単に書いてみた。要するにAD0(電圧)とAD1(電流)それぞれの値を0.1秒ごとに読み込んで、それをシリアルポートに出力するだけのものである。これをコンパイル・ロードしてシリアルモニタを立ち上げてみた。
まず、ワットチェッカーをコンセントにもささずに放置した状態だとこんな感じだ(Photo04)。これは非常に正しい結果である。
次に、ワットチェッカーだけをコンセントに差し込む(ワットチェッカーにはまだ何も装着しない)状態だと、結果はこんな具合になる(Photo05)。電圧側は140~520位の範囲で変動しているが、これは交流電源である以上当然である。一方の電流側は245と246で多少ばらついているが、これは誤差の範囲でほぼ一定とみなしてよい。
次に、ワットチェッカーに30Wの半田ごてを挿してみると、こんな具合になる(Photo06)。電圧の変動は相変わらずだが、電流値もPhoto05に比べて増えており、また値そのものの変動もやや大きい。半田ごてだから内部はニクロム線で、温度によって若干の抵抗値のドリフトがある。それに交流だから、例えば電圧が0Vになる瞬間は当然電流も0Vになるわけで、ある程度変動するのは当然である。
ということで、とりあえず何かしらデータを取れているっぽい、ということまではこれで確認できた。次は、もう少し真面目にデータ処理を行って、正しく電圧/電流値を取れているかを確認したいと思う。
(続く)
List 1:
#define VOLTPIN 0
#define AMPPIN 1
void setup()
{
Serial.begin(9600);
}
void loop()
{
int volt, amp;
volt = analogRead(VOLTPIN);
amp = analogRead(AMPPIN);
Serial.print(volt);
Serial.print(":");
Serial.println(amp);
delay(100);
}