Raspberry pi からINA219を使っていろいろ測定
Raspberry piでできることはいろいろありますが、 電子部品には電流電圧を測定してなんぼという感じのセンサーもあります。 I2Cインターフェースがあればいいですが、ものによっては物理現象そのままという感じで Raspberry piには難しいものもあります。
一応0Vか3.3Vかは測れるみたいですが、いろいろ物足りません。
で、I2Cインターフェースを備えた電流センサを用意したらできることの幅が広がるのではとやってみました。
1つ1000円もしなかった、INA219を使ってみました。
ハードの設定
INA219+Raspberry piはレアな組み合わせなのかネット上になかなかドキュメントがありません。 ようやくAdafruit用で見つけました。
https://learn.adafruit.com/adafruit-ina219-current-sensor-breakout/overview
まずはんだ付け。 ブレッドボードでうまく挟んでやったらいらないかな、と思ってやってみたけど不発でした。
こちらのページが参考になります。
https://learn.adafruit.com/adafruit-ina219-current-sensor-breakout/assembly
つまり、基本6ピンヘッダにつけるだけ。 もしセンサモジュールが何台もあるなら、アドレスシフトさせるためにはんだ付けしようとのことですが、まあ今回はこの一台だけですので。
こちらを参考に配線を整えます。ラズパイの対応するピンにつないでいきます。
https://learn.adafruit.com/adafruit-ina219-current-sensor-breakout/wiring
これで準備は完了。
あと、
https://binaryfury.wann.net/2014/04/solarbatteryload-power-logging-with-raspberry-pi-and-ina219/
にraspberry-piにつないだブログがありました。
接続確認
まずはI2Cで見えるところまで。
http://make.bcde.jp/raspberry-pi/i2c%E3%82%92%E4%BD%BF%E3%81%86%EF%BC%88%E8%A8%AD%E5%AE%9A%E7%B7%A8%EF%BC%89/
sudo apt-get install python-smbus
あと、INA219の読み取り。
https://github.com/scottjw/subfact_pi_ina219
のina219_example.pyを実行します。すると、
% ./ina219_example.py Traceback (most recent call last): File "./ina219_example.py", line 3, in from Subfact_ina219 import INA219 File "/home/pi/subfact_pi_ina219/Subfact_ina219.py", line 5, in from Adafruit_I2C import Adafruit_I2C File "/home/pi/subfact_pi_ina219/Adafruit_I2C.py", line 9, in class Adafruit_I2C : File "/home/pi/subfact_pi_ina219/Adafruit_I2C.py", line 23, in Adafruit_I2C def __init__(self, address, bus=smbus.SMBus(1 if getPiRevision() > 1 else 0), debug=False): IOError: [Errno 2] No such file or directory
となります。これはsmbusのIDが正しくないことが原因です。
Pythonの対話シェルを立ち上げ、適当に試してみます。
import smbus smbus.SMBus(0) smbus.SMBus(1)
のエラーの無い方を使います。
Raspberry pi 3だと1の方でしたので、Adafruit_I2C.pyの23行目を、
def __init__(self, address, bus=smbus.SMBus(1 if getPiRevision() > 1 else 0), debug=False):
から
def __init__(self, address, bus=smbus.SMBus(1), debug=False):
に書き換えます。
% ./ina219_example.py Shunt : 0.050 mV Bus : 0.000 V Current : 0.000 mA
いけました。
その他
INA219のデータシートです。
https://cdn-shop.adafruit.com/datasheets/ina219.pdf
これによると、パワー供給には3Vから5.5Vの電圧、最大1mAの電流とのことです。
INA219のチップを使って、いろんなメーカーが測定器を出しているようです。 Adafruitのロゴ入りはそのまま3.3Vの電源につないで大丈夫でした。
ものによっては抵抗が要るかと思います。熱かった。
実践
電源から順に回路をたどると、接続する端子の順番はこのような感じ。
供給電圧 -> Vin+ -> Vin- -> (電圧を測りたい区間) -> GND合流
Vin+とVin-の間は電流。 Vin-とGNDの間は電圧。
Vin+とVin-に流れ込んだ電流はシャント抵抗に流れ込み、その電圧を測定して電流を計ります。 つまりシャント電圧の分、回路に供給される電圧は下がります。
電圧だけを計り電流が要らないときは直接Vin-につないでもよいようです。
では、SHARPの測距センサGP2Y0A21YKを使ってみます。
最初につなぎ方を間違えて異臭がするレベルで熱くなりましたが、無事測れました。よかった。
こんな風につなぎます。
Fritzing初体験。電子工作はど素人なので、見やすい配線図とか分かりません。
センサの前に手をかざし、動かしつつ計測のina219_example.pyを連打してみました。
% ./ina219_example.py Shunt : 0.050 mV Bus : 1.408 V Current : 0.000 mA % ./ina219_example.py Shunt : 0.040 mV Bus : 1.920 V Current : 0.000 mA % ./ina219_example.py Shunt : 0.020 mV Bus : 2.304 V Current : 0.000 mA % ./ina219_example.py Shunt : 0.040 mV Bus : 2.304 V Current : 0.000 mA % ./ina219_example.py Shunt : 0.040 mV Bus : 2.304 V Current : 0.000 mA % ./ina219_example.py Shunt : 0.040 mV Bus : 0.640 V Current : 0.000 mA
手の距離と電圧の関係は資料にあったグラフからは妥当な値ですが、 どうも0.128 Vのステップになっている気がする。
電圧のレンジが±26Vで、I2Cのビット数を考えるとそれくらい・・・・なのだろうか。
何らかの工夫が要る気がする。
何にせよ、これでラズパイで測れるセンサが増えました。
シャント電圧
僕みたいにソフトからの流れでラズパイに来て、また電子工作をほとんどしたことがないとシャント電圧とか分からないかもしれません。
写真上部に見えるR100がシャント抵抗です。これにかかる電圧がシャント電圧。
電流の測定にはシャント抵抗に電流を流し、その電圧から電流を計ります。
なので、回路に供給される電圧がその分下がります。
INAシリーズの電流センサでシャント抵抗を取り外し、モジュールを自作している人もいます。
https://sites.google.com/a/gclue.jp/ble-docs/dian-li-ji-ce/dian-li-ji-ce-ji-qino-zi-zuo








