RaXino+RaspberryPiで家の電力見える化

タイトルの通り、家の電力使用状況を見えるようにするため、電力計を作ってみました。

全体の構想としてはこのスライドのものがほとんどそのままです。
RaXino+Raspi 

カレントトランスで分電盤の電流値を検出し、マイコンのA/Dコンバータで読み込んでRaspberryPiでWeb上に可視化します。この方法だと電圧は計測しないので、位相差がわからず計測した電力は有効電力ではなく皮相電力になりますが、まあ大きな差は出ないと思います。
今回は分電盤のうち各部屋に分配された電力も読み取ることにし、6ch用意します。6chもあるのでチャンネルごとの回路を簡素化するために、アナログの回路側はこのページを参考にして作成し、下側半波は読み取らない形をとりました。 この辺は以下の記事に詳しく書きました。 RaXino+RaspberryPi電力計の電力計測部分の製作 また、マイコンも相応のチャネル数と処理能力を持つもの、ということで、購入後に少しだけさわって放置していたRaXinoを使います。

RaXinoはRX62Nを積んだマイコンボードで、RXduinoというArduinoライクのライブラリを合わせて使えるものです。RaXinoであればEthernetに繋げるのでこれだけでも良かったのですが、
・わざわざ無線LANコンバータ買ってくるのが面倒だった
・RTCで時刻を刻ませないといけない
Ethernetにつなげるとは言え高機能なことが出来るわけでもなくPCからのアクセスが面倒
なのでRaXinoで計測したデータを一度RaspberryPiに送って保存し無線で飛ばします。


RaXinoをさわるのが久しぶり過ぎて、まずは環境構築から行いました。
RXduinoライブラリは、現在はFreeRXduinoという名前で無料で提供されています。
使用方法として、GCCコンパイルする方法と、ルネサス統合開発環境であるHEWやCS+(旧CubeSuite+)で使えるサンプルプロジェクトが用意されています。最初はGCCコンパイルをしようとしていたのですが、RaXino基板にmakefileを合わせるとinvectの問題でエラーが出てしまったので、結局CS+をインストールして使いました。

やりたいことは1kHz以上で6chのA/Dコンバータを1サンプルずつして電流の瞬時の大きさを記録し、1秒ごとくらいで実行値(RMSを計算してRaspberryPiに渡すことです。
モジュールとしては1kHzタイマ、A/Dコンバータ、シリアル通信を使います。タイマ割り込み関数でA/D変換して、データがたまったら1秒ごとにメインループ実行値計算させます。
とりあえず以下のコードがあれば最低限OKです。


シリアル通信はRX.TXの結線をしないといけないかと思っていたのですが、USB端子のシリアルをRaspberryPiに指すとそのまま認識したので、これで行きます。認識後にポート名をdmesgコマンドで取得します。

Raspberry Piでは、Pythonを使ってシリアル通信でデータ取得し、時刻とともにCSVで保存しておきます。
Pythonでシリアル通信するにはpySerialというライブラリがあれば簡単に使える様なので、早速インストールします。と思ったらpipすらインストールしてなかったので、ついでにpipも入手しておきます。
$ sudo apt-get install python-pip
$ pip install pyserial

シリアルのポート名は/dev/ttyACM0だったので、それを使ってシリアル通信するスクリプトを記述します。

コード例

これで時刻付きCSVが保存できるようになったので、SCPでとってくればいつでも見られるようになりました。

あとは、別個でWebから見えるインターフェースを用意して、当日の電力推移とデータをとってこれるようにしたいなと思っています。とはいえWebの知識があまりないので、まずはpythonでmatplotlibをつかってグラフ描画する感じになりますかね。
また、せっかく電力を計っているので、どの機器がどのくらい電力を消費するか分析し、節電の方策を立てようと思っています。

参考ページ:
FreeRXduino