Innocent_Mechanical Engineer

機械系エンジニアの雑記です

【電子工作】電力見える化② ~2系統の計測~

前回の投稿で電力見える化ができたと言ってましたが,実際はきちんと出来ていませんでした(恥ずかしい...)

1. 問題 単相3線の2系統を計測しているはずなのに,2系統の計測値が常時ほぼ一緒になってしまっている。 http://www.tepco.co.jp/ep/private/guide/detail/tansou.html の説明にあるように それぞれに接続している系統が異なるので,計測値が常時一緒になるというのは理論的におかしい。

2. 原因 ADコンバータのチャンネル0と1のうち,チャンネル0のみ読み取るプログラムとなっていた。

3. 対策 そのまま使わせてもらっていたGithubのプログラム(https://github.com/AmbientDataInc/Ambient_ESP8266_lib/tree/master/examples/Ambient_powermonitor) で,ADコンバータのデータ取得部を下記のように書き換えた。

int MCP3002::readData(int ch)
{
    byte cmd_ubyte = 0x00;
    byte cmd_lbyte = 0x00;

    switch(ch) {
    case 0:
        cmd_ubyte = 0x68;
        cmd_lbyte = 0x00;
        break;

    case 1:
        cmd_ubyte = 0x78;
        cmd_lbyte = 0x00; 
        break;

    default:
        return 0;

    }

    digitalWrite(15, LOW);
    byte MSB = SPI.transfer(cmd_ubyte);
    byte LSB = SPI.transfer(cmd_lbyte);
    digitalWrite(15, HIGH);

    return ((MSB << 8) + LSB) & 0x3ff;
}

以上,あっさりと問題/原因/対策を書きましたが,まず,問題に気付くのに時間がかかってしまいました。 見える化した後,次のスキップとして,全体の電力値から機器ごとの電力分離(disaggregation)をしたいと思い, 色々調べていたら,まず機器ごとの教師データが必要なことがわかりました。 そこで,例えば,冷蔵庫以外の電源を落として, 冷蔵庫の電力データを取得しようとしたところで,あれ?そもそもおかしくないか? ということに気付きました。本当は最初にできたときに気付くべきでした。 出来た!と思っても疑い深く,本当にできているのかよく確認することが必要ですね! また,原因も回路組み立ての凡ミスかと思い,何度もチェックして, それに時間をかなり使いました(プログラムは直せる気がしなかったから...)。 で,どうしても回路には問題ないので,プログラムの方を読んでいたら, 上記の場所が怪しいなと思い,仕事でソフトウェアをやっている友達に相談してなんとか解決しました。 おかげで,ADコンバータとプログラムの勉強になりました!

ようやく次のステップに進めそうです。