« さようならMicroCap | トップページ | またPCのATX電源故障 »

2015年6月 7日 (日)

RPiで消費電力監視サーバー(予備実験)

RPiで消費電力を監視するサーバーを作る。(予備実験)

●ハードウェアの作製
AD変換にはMCP3204を使う。SPIは配線が多いけど速度が出るらしい。
回路は、http://shoyama.jp/elec/watt/index.html を参考にいくらか変更した。Rail to rail の単電源IC LMC662ANを使うことで、オフセット電圧を2.5Vくらいまで上げたい。抵抗分割でも十分だと思うけど、手持ちに2.4Vのツェナーがあったのでせっかくだから使うことにする。LTSpiceで一応動作確認したら、参考にした回路図はボルテージフォロアになっていなかったので訂正した。
Circuit2

3.3V動作のRPiと5V動作のMCP3204をつなげてもよいかウェブで調べた。実際にやってみても壊れなかったけど、それは運が良かっただけかもしれないし、この先壊れない保証もないらしい。
MCP3204の5VのDOをRPiの3.3VのMISOに接続するのは危険なので、抵抗で分圧してレベル変換すればよいらしい。たとえば、2.4Kと4.7kを使う。
逆に5V動作のMCP3204にRPiからの信号は3.3Vしかないが、保証の範囲外であるが大抵は動くらしい。あとMCP3204は可能なら5V動作がよさそうなことが書いてある。
https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=95571
ここにも書いてあった。http://make.bcde.jp/category/26/


Ltspice1

実験にはRPi2を買ってみた。すごく速いというか、RPiがもっさりしすぎ。回路の試作には、2年前に購入してこれまで放置されていたブレッドボードを初めて使ってみた。
Dsc01412

試運転をして部品の値が決まったので、プリント基板に実装した。悪い癖でパーツは予備も含めて必要以上にたくさん買ってしまうので無駄なコストがかかってしまう。送料が高いので買えるときに買っておきたいと思ってしまう。ケースは現在定期購読中のデアゴの3Dプリンターで出力する予定。
Dsc01420s

●ソフトウェアの作製

1周期は20msなので、サンプリング間隔は最大でも0.2msにしたい。RPiはリアルタイム処理じゃないので厳密には誤差が出そうだけど、正確さは求めないことにする。電圧と電流を掛け算して5周期分積分する作業を10回やって平均値をとる。これの値を10分ごとにファイルに記録する。

ウェブ上でみつけたサンプルプログラムで試しにAD変換をやってみた。1秒後間隔でAD変換するには問題ないが、連続でAD変換するとエラーになる。デバッグ用のprintf分を入れてみたり、sleepを挿入してみたりすると動作する。この辺、もうすこし調査が必要。
追記:参考 http://hertaville.com/2013/07/24/interfacing-an-spi-adc-mcp3008-chip-to-the-raspberry-pi-using-c/

現時点でスリープを挟んだりして、2つのチャンネルで合計400点のAD変換に70msくらいかかった。1周期が20msなので、ちょっと期待したより遅いけど使えないことはない。また、波形を見ると、途中で別の処理をやっていたのか、波形が途切れる部分がある。リアルタイムの処理をしたければPICの方が良いかもしれない。2chで合計600回AD変換すると110msかかるので、そのうち100msの5周期分で電力を計算することにした。

家にある一番消費電力の大きい1000Wのオーブントースター(3千円くらい)で波形を取ってみた。CTのシャント抵抗を最初50オームにしたところ9Aの負荷でVpp=0.4Vなので少し小さく、契約の40Aフルに使ってもVpp=1.8Vにしかならない。倍の100オームにすればVpp=3.9Vでちょうどよさそうな感じ。下のグラフは、シャント抵抗が50オームのときのDA変換後の電圧と、電圧電流の換算値。ワットチェッカーの結果と比較して、有効電力の計算に間違いがあることに気がついて修正。
Result

実際に家全体の電力を測定してみた。まだエアコンを使用していない夕飯時で800Wくらい最小値が深夜で180Wくらいだった。力率は80~90%といったところ。電流波形は正弦波とは全く異なっている。
Result_adc_voltage100vResult_adc_current_2

アマゾンでMySQLの古本を買ってみたものの、今からMySQLを勉強するよりデータをテキストファイルで保存してC言語で好きなように処理したほうがはるかに簡単という結論になった。

データを10分間隔でテキストで保存して、これを10分おきにHTMLに変換してやる。 /var/www/powerというフォルダを作って、sudo chmod a+w /var/www/power で書き込みをできるようにして、crontab -eで10分おきにhtmlファイルを作成。データのファイルサイズは1年分で3Mbyteくらいになりそう。
*/10 * * * * sudo /var/www/power/test3e >/var/www/power/power.html
htmlのテンプレートにデータを挿入するプログラムをC言語で作って、google chart tools でグラフにする。なぜかアンドロイドのIEだと何度もリロードしないとうまく表示してくれない。Google Cromeで試してみたら、さすがに問題なく表示される。10分間隔の測定だけど、積算電力計の値と比較して1日の誤差は4%くらいだった。

Screenshot_20150612211435

追記:

プリント基板を発注して実装。
Dsc03130s_2

123D Designで作図して3Dプリンターでケースを印刷。

Rpicase

第2種電気工事士の資格を取ったので、自分でブレーカーを増設して取り付けた。

Dsc03134

« さようならMicroCap | トップページ | またPCのATX電源故障 »

RaspberryPi」カテゴリの記事

カテゴリー

フォト
無料ブログはココログ