メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

PukiWiki最新記事
[ リロード ]   [ ソース ]  [ トップ | インデックス | 単語検索 | ご意見、ご感想 ]

Counter: 17549, today: 3, yesterday: 14

太陽光発電の電力計をラズベリーパイで作ってみた

これは先日の「INA226+ラズベリーパイでソーラー発電の電流・電圧・電力を計測してみた」を書き直したものです。

ソーラーパネルをベランダに設置したものの実際に発電される電流、電圧、電力などの推移などを正確に知りたくてラズベリーパイで電力計を作ってみました。

単純な電力計ではつまらないので、電圧値、電流値はもちろんのこと最大瞬間電力や積算電力もLCDで表示できるようにし、
その日の時刻毎の電圧、電流、電力などをCSVで保存することでグラフ表示などもできるようにします。
Raspberry Piならデーターロガーとしても使えるし、リアルタイムで発電している電力をグラフ表示したり、
外出先でインターネット経由で発電電力をチェックすることも簡単にできます。
以前だとかなりのお金を出さないと買えなかったシステムも個人で簡単に(ある程度の知識があれば)、できる時代になりました。

まずは実際の電圧、電流、電力、最大瞬間電力、積算電力の表示です。
使ってるLCDが16文字x2行と表示するにはぎりぎりで電圧表示と電流表示がつながっていたり、小数の桁を電圧は1桁にしてあります。
LCDだけの制限なので、パソコンで電流、電圧、電力をみるときは桁数をもっと細かくみることができます。
文字を流れるようにすればいいのですが、流れる文字を読むのも疲れるのでこのようにしました。

  電流 電圧 電力 最大電力 積算電力の表示  

上段は現在の電圧、電流、電力の値で写真では、電圧13.0V、電流0.88A、電力11.4Wとなってます。
下段は朝の発電開始から写真を撮ったときまでの最大瞬間電力45.7W、朝からの積算電力が133.7WHと表示されてます。

プログラミングはテスト時にbashで行い、最終的にはc言語でコーディングしました。
最近はperlを一番よく使うのですが、
インターネットラジオを作ったときにLCD表示にwiringPiをつかったcのプログラムがあったので、c言語で作りました。

実際の電流値、電圧値、電力値の測定ICはStrawberry Linuxにて販売しているTIのINA226を使いました。
ラズベリーパイなら電力を求めるのも乗算で簡単に計算できますが、このICには乗算器もあって電力も
レジスターをリードするだけです。

  INA226 自分で端子台やI2Cインターフェースのためのコネクタを取り付ける。 I2Cのスレーブアドレスは基板の右下部分を半田付け。   INA226 + Raspberry Pi INA226にラズベリーパイを接続したところ。wifiでリモート接続なので他のパソコンから電流、電圧、電力を確認できる。  

このINA226は電圧36Vまで、電流-20A〜20A(双方向対応)まで正確に計測でき、しかもI2Cインターフェースで
電源電圧も3V〜5VとArduinoやRaspberry Piに直接接続することができます。
ちなみに、Strawberry LinuxのサイトをみるとINA169を搭載した50V 180Aまで計測できるモジュールも販売されているようです。

このINA226は申し分ないほど高機能で1000円ちょっとととても安いです。

スペックをみるとわかりますが、電流は双方向対応なので、バッテリーに取り付けると、充電された電力(+)と放電された電力(-)でバッテリーの充放電の効率などもみることができます。

こんなにいいICなのにほとんどWEBの記事はないようです。
I2Cのインターフェースだから敷居が高いのか?需要が少ないのか?わかりません。

このモジュールがあれば、INA226+Raspberry Pi+パワーMOS FETで簡単に自作チャージコントローラーもできてしまいそうです。

INA226について

商品に添付されていた日本語の説明書だけでは間違いの記述や情報不足などでINA226を使うことはできないかもしれません。
英語版しかないですが、やはりTIのデータシートをみる必要があります。

1. 端子台の組み立てと配線
 2端子の端子台が2つ入ってますが、連結して半田づけします。
 電圧の電線は細くてもいいので、電子工作の細いものを使いました。
 電流の電線はできるだけ抵抗値の低いものが必要なのでVVFケーブルとしました。

2. チップのI2Cスレーブアドレスの設定
 I2Cのチップスレーブアドレスは可変になっており40h〜4Fhの間で設定することができます。
 このアドレス設定は基板上のジャンパー(1,G,C,D,A1,A0と印字されている部分)を半田づけすることでできます。
 他のI2Cモジュールが40hのスレーブアドレスを使ってなければ、40hに設定するのがいいと思いますが、
 この場合、G(GND)のA1,A0を半田づけします。

  ちなみに、

1→VS
G→GND
C→SCL
D→SDA

  です。

  スレーブアドレスの設定 スレーブアドレスの設定  

 アドレスを4Fhにしたければ、CのA1,A0の部分を半田づけします。

3. I2Cレジスタのアクセス

 I2Cモジュールを検出

$ sudo i2cdetect 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

となり、40hにINA226のモジュールが検出されます。

レジスタのアクセスは基本的にワードで行います。
この時、データの並びはリトルエンディアンなので注意が必要です。
つまり、1234hの値は3412hとなります。
リードは、i2cget,ライトはi2cset命令で行います。

それぞれのレジスタのアドレスは以下のとおりです。

アドレス レジスタ名 R/W
00h コンフィグレーションレジスタ R/W
01h シャント電圧レジスタ R
02h バス電圧レジスタ R
03h 電圧レジスタ R
04h 電流レジスタ R
05h キャリブレーションレジスタ R/W
06h マスク/イネーブルレジスタ R/W
07h アラートリミットレジスタ R/W
FFh IDレジスタ R

では、実際にINA226のコンフィギュレーションレジスタ(Configuration register)をリードしてみます。
「sudo i2cget -y 1」までは以前書いた記事にあると思いますが、そのあとのパラメーターは、
I2Cアドレス レジスタアドレス サイズです。

$ sudo i2cget -y 1 0x40 0x00 w
0x2741

先ほど書いたとおり、リトルエンディアンなので、0x2741は0x4127と読み替えることができます。

つぎに、電圧は初期状態でリードすれば電圧の値がリードでき、
1.25倍したものが電圧値 (mV)になります。

電流と電力はレジスタ設定が必要です。

電流・電力をリードする前にレジスタアドレス05hのキャリブレーションレジスタを
設定しておきます。詳細は省きますが、キャリブレーションレジスタはシャント電圧の
倍率を設定するものでこのレジスタに0x0a00を設定しておくと以下のようになります。

電流レジスタ → リードした値がそのまま電流値 (mA)になります。
電力レジスタ → リードした値を25倍したものが電力値 (mW)になります。

注意する点は、上位バイトと下位バイトの順番(エンディアン)と、
電流レジスタはマイナスもリードできるため、最上位ビットは符号ビットです。
最上位ビットが1だった場合(マイナスの場合)に2の補数をとる必要があります(すべてのビットを反転してプラス1する)。

記述に間違いがあるかもしれませんので、ご確認ください。

つづくかも

  関連記事:
Raspberry_PiとArduinoを接続して連携動作させる(I2C)
ベランダで太陽光発電に挑戦
ベランダでのソーラーパネルの発電する電力をグラフにしてみた
 
   

ページコメント
投稿された内容の著作権はコメントの投稿者に帰属します。

トラックバック [ トラックバック(0) ]
トラックバック URL: http://myboom.mkch.net/modules/pukiwiki/tb/178