皆さん、何台のRaspberry Piを持っていますか?弊社にはいつの間にか6台のラズパイが存在します。
今回、Raspberry Piで電圧を知る必要があったので、やってみました。ググればいくつか記事が出てきますが、時期によってやり方が違っている場合があるので、2019年3月版という事で記録として残します。
I2Cとは
2は上付き文字でI2Cと表記するのが正式らしいです。しかし上付き文字が使えない場合もあるので、I2Cとも表記されます。読みは「アイ・スクエアド・シー」もしくは「アイ・アイ・シー」です。「アイ・ツー・シー」とも言われます。I2Cの内容については本題から外れるので触れませんが、ものすごく乱暴に説明すると、USBを超シンプルにしたようなものです。
それでは、本題に入ります。
1.I2C電流・電圧センサモジュールを購入する
私はストロベリーリナックス様の次の商品を購入しました。
I2C電流・電圧センサモジュール
電圧は直流36Vまで、電流は双方向で±20Aまで測定できます。電流は双方向ですから充電池パックのような充電も放電もするシステムの監視に利用できます。
との事で、色々な用途に使えそうです。
2.はんだ付けする
使い方に合わせて端子を取り付けるのと、I2Cの通信に使用したいアドレスをジャンパーで指定します。複数のモジュールを取り付ける場合は空いているアドレスを指定します。
ジャンパとアドレスの対応を参考までに掲載します。
が、これを鵜呑みにせず、Texas Instrumentsが公開している仕様を参照してください。
http://www.ti.com/lit/ds/symlink/ina226.pdf
A1 | A0 | アドレス |
---|---|---|
G | G | 0x40 |
G | 1 | 0x41 |
G | D | 0x42 |
G | C | 0x43 |
1 | G | 0x44 |
1 | 1 | 0x45 |
1 | D | 0x46 |
1 | C | 0x47 |
D | G | 0x48 |
D | 1 | 0x49 |
D | D | 0x4a |
D | C | 0x4b |
C | G | 0x4c |
C | 1 | 0x4d |
C | D | 0x4e |
C | C | 0x4f |
3.OS(Raspbian)の設定
I2Cを有効にします。GUIから行いました。
設定→Raspberry Piの設定→インターフェイス→I2Cを「有効」に設定→OK
4.配線する
I2C電流・電圧センサモジュールをブレッドボード経由でRaspberry Piと接続します。I2C電流・電圧センサモジュールの電源もRaspberry Piから供給しました。水色の物体が電圧を測定する対象です。
配線が終わったらターミナルで「i2cdetect -y 1」と入力します。ちゃんと認識されている場合はアドレスが表示されます。
pi@raspberrypi:~ $ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- 41 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
5.プログラムを作る
とりあえず、こんな感じにしてみました。
電圧は0x02から読み取れるようです。
#!/usr/bin/python # -*- coding: utf-8 -*- import smbus i2c = smbus.SMBus(1) word = i2c.read_word_data(0x41, 0x02) & 0xFFFF result = ( (word << 8) & 0xFF00 ) + (word >> 8) volt = result * 1.25 / 1000 print volt
6.プログラムを実行して測定する
水色の物体の電圧を測ってみます。
pi@raspberrypi:~ $ chmod +x read_volt pi@raspberrypi:~ $ while true; do ./read_volt; sleep 1s; done 2.80125 2.80125 2.8 2.8025 2.80125 2.80125 2.8025
良い感じではないでしょうか。
普通のテスターでは長時間の電圧/電流の推移は見れないしデータとして保存も出来ないので、色々と使えそうです。
ピンバック: RaspberryPiとPCA9685でサーボモータが動かない原因を探る | Kazuki Room ~3Dプリンター・電子工作・CAD・Arduino~
ピンバック: RaspberryPi3B+とサーボモータードライバ(PCA9685)でサーボを動かしてみた | Kazuki Room ~電子工作・IoT・3Dプリンター・Arduino~
ピンバック: [ラズパイ] Rasberry Pi 3b+をセットアップする – ANDROIPHONE
ピンバック: [ラズパイ] 電圧・電流をラズパイで計測する(INA226・INA260)[接続編] – ANDROIPHONE
ピンバック: [ラズパイ] 電圧・電流をラズパイで計測する(INA226・INA260)[コーディング編] – ANDROIPHONE
記事と関連が薄くて恐縮ですが、I2Cがなかなか認識されずに苦労してやっと解決したので足跡を残させてください。
機種はラズパイ4です。
/boot/config.txtの中で [pi4] の手前に次の一文を追加したところ認識されました。
dtoverlay=i2c1,pins_2_3=yes,combine=no
誰かのお役に立てれば幸いです。
ちなみに連続電圧測定はAdafruitのADS1015を使っています。
NEXUS 6さん
コメントありがとうございます。
私たちもラズパイ4を購入する予定なので、参考にさせていただきます。
ラズパイ4について何かネタがあれば記事にします。