Internet, Windows, Linuxの最新技術をやさしく解説

  • concrete5
  • VirtualBox
  • Bootstrap
  • RaspberryPi
  • Arduino
  • Kindle
  • Pdic

RaspberryPiの実験と話題 > I2Cデバイスをいじくる

I2Cデバイスをいじくる

+
I2C toolsをインストールする

初期状態では、I2Cは無効になっているので、I2Cを有効にします。

$ sudo raspi-config

起動後、

「Advanced Options」を選択します。

「ARM I2C」を選択します。

「Would you like the ARM I2C interface to be enabled?」で、「Yes」を選択し、「The ARM I2C interface is enabled」で「Ok」を選択します。

「Wolud you like the I2C kernel module to be loaded by default?」で、「Yes」を選択し、「I2C kernel module will now be loaded by default」で、「Ok」を選択します。

メニューにもどったら「Finish」で終了します。

 

$ sudo vi /etc/modules

i2c-dev

を最終行に追加します。

 

以下を実行してインストールします。

$ sudo apt-get install i2c-tools libi2c-dev

 

最後に、再起動します。

 

+
INA226 I2Cディジタル電流・電圧・電力計モジュールの使い方

バッテリーの状態とかみるのに適したI2Cのモジュールが、ストロベリーリナックスというところで売っているのをみつけましたので、買って実験してみました。

私が買ったのは、「INA226 I2Cディジタル電流・電圧・電力計モジュール」の「非絶縁20A」というやつです。他にも3.2A、100A、250A、1000Aの商品もあります。

いずれも電流測定の低抵抗のシャント抵抗の値が違うだけで、見た目はとてもよくにています。

私は最初に3.2Aと20Aを買いましたが、見た目がシャント抵抗の抵抗の刻印が違うだけでした。

おんなじなので、「同じじゃないか、発送を間違ったのではないか」と問い合わせとところ、「よく見てください。別物ですよ」と回答があり、恥ずかしい思いをしました。

買ったままではうまく動作しません。説明書にも書かれていますが、以下が必要です。

(1)サブアドレスを決めるために、A0、A1のGのところに半田を盛って、アドレスを固定します。

(2)ソケットを2つ半田付けします。

(3)I2CのSCLとSDAのところには、それぞれ10KΩでプルアップが必要です。

注意ですが、電圧端子に逆電圧をかけると、一瞬で壊れます。極性間違いには注意がひつようです。わたしは、実は最初に買った2つとも逆電圧で壊してしまいました。

RaspberyPiで値を得るには、以下のようにします。

まず、以下のコマンドで動いているかどうか確認します。
アドレスの、40 がみえれば、まずはOK。

$ i2cdetect -y 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: -- -- -- -- -- -- -- --
$

12V電源をつないで、電圧を調べてみます。

$ i2cget -y 1 0x40 0x02 w
0xdd24
$ 

 コマンドは、"i2cget" です。

接続バスは 1 なので、"-y 1" のオプションを指定します。

電圧は、2番目なので、0x02 を指定し、16ビットの指定として、wを指定します。
(Arduinoなどでは、同じアドレスからバイトで2回読んで、16ビットにします。)

電圧値として、"0xdd24" が出てきました。

16ビットの値は、バイトの入れ替えをおこなった、0x24dd です。10進数にすると、9437 です。
1 が 1.25 mVなので、9437x1.25=11,796.25、Vに桁を合わせると、11.79625(V)、約12Vです。  

電力は、0x03 で得ます。 

$ i2cget -y 1 0x40 0x03 w

電流は、0x04 で得ます。 

$ i2cget -y 1 0x40 0x04 w

PHPで書くといかのようになります。 

// 初期設定: Calibrationレジスタに a00hを書き込み
exec("i2cset -y 1 0x42 0x05 0x000a w");

繰り返し処理

while (1){
    $volt = exec("i2cget -y 1 0x42 0x02 w"); // 電圧レジスタの読み込み
    $ampare = exec("i2cget -y 1 0x42 0x04 w"); // 電流レジスタの読み込み
    $power = exec("i2cget -y 1 0x42 0x03 w"); // 電力レジスタの読み込み
 
    $volt = hexdec(substr($volt,-2).substr($volt,2,2)) * 1.25 / 1000;
    $ampare = hexdec(substr($ampare,-2).substr($ampare,2,2));
    $power = hexdec(substr($power,-2).substr($power,2,2)) * 0.025;
 
    printf("電圧 %.2f V  電流 %.1f mA  電力 %.2f W\n", $volt, $ampare, $power);
}

以上の情報は、以下のサイトを参考にしました。

http://www.hi-ho.ne.jp/spacelab/archives/tag/ina226/

RaspberryPiの実験と話題 > I2Cデバイスをいじくる

ツイート
このエントリーをはてなブックマークに追加
  

Theme Made by Enrique Ramírez for Smashing Magazine. Powered by Concrete5
© 2018 tomoのconcrete5. All rights reserved. ログイン