2020.09.18 電流計測モジュール INA219
YouTubeでポイントを説明しています。画像をクリックすると再生できます。
■INA219 電流センサーモジュール
INA219 電流センサーモジュールは、INA219チップを搭載し、ハイサイド(電源側)電圧、電流を誤差1%の精度で測定可能です。
INA219には、AとBの2つのグレードが存在し、Bグレードのほうが高い精度(誤差0.5%)の仕様になっています。
左が、Adafruit Industries のロゴ(桜)の刻印されたINA219モジュール、右がcloneということになるのでしょうか?
clone はハズレもあったりするので、余裕のある方は、adafruit製をお勧めします。
ハズレを引いた場合、まったく動かなければ問題ない?のですが、下手に動作すると無駄に時間を消費してしまいます。
私の場合、対象を測定しようとすると、なぜか、INAモジュールへの電力供給用VccをBus電圧として取得してしまい、測定電流も非常に不安定でした。
別のものに交換してみると、運よく動作しました。
・電源電圧:3.3V~5V
・最大計測電圧:MAX+26VDC
・最大計測電流:±3.2A
・レンジ:4レンジ選択
・ロジックレベル:TTL(3-5V)
・通信形式:I2C(プルアップ抵抗実装済み)
・通信速度:MAX 40KHz
・アドレス:0x40、0x41、0x44、0x45(ジャンパーにより選択可)
・消費電流:最大1mA
Ref.
INA219 High Side DC Current Sensor Breakout - 26V ±3.2A
■開発環境

パソコンから、TeraTeamでラズパイにSSH接続、ラズパイでビルドしたコードを、Seeeduino XIAO に転送します。
ラズパイのディストリビューションは、Raspbian Stretch、開発環境に platformio を使用しています。
■INA219 設定
最大四つまでI2C接続可能(デフォルト:0x04)
| I2C | A0 | A1 |
| 0x40 | | |
| 0x41 | ○ | |
| 0x44 | | ○ |
| 0x45 | ○ | ○ |
○:ショート(Bridge)
ボード右側のジャンパーをショートさせることで、I2Cアドレスを変更します。
Ref.
Adafruit INA219 Current Sensor Breakout
高精度電流測定用IC INA219は、電源側(ハイ・サイド)で検出した信号を増幅するICです。
ハイサイド電位を測る VIN+,VIN-端子間のシャント抵抗(検出抵抗)器100mΩにかかる電圧を誤差1%で測定します。
この際、1Aの電流が流れた場合、0.1V (=1A*0.1Ω)の電圧降下が生じます。

Ref.
TEXAS INSTRUMENTS INA219
搭載しているアンプの最大入力差(Shunt Voltage)は初期設定では±320 mVなので、最大計測電流はオームの法則 I=V/R より、最大3.2 Aまでの計測が可能です。
3.2(A) = 0.32(V)/0.1(Ω)
内部に12bit ADC(Analog-to-Digital Converter)を搭載しているので、±3.2 Aレンジでの分解能は、0.8mAです。
0.8(mA) = 3.2(A)/4096
3.2Aのような大電流の測定が必要ない場合は、設定を変更して分解能を向上させましょう。
インターナルゲインを最小値の±40mVに設定すると、最大電流は±400 mAで、分解能は0.1 mAまで向上します。
0.4(A) = 0.04(V)/0.1(Ω)
0.1(mA) = 0.4(A)/4096
adafruit の INA219ライブラリーを使用すると簡単に設定が変更できます。
ina219.setCalibration_16V_400mA();
Ref.
Adafruit_INA219.h
Ref.
Adafruit_INA219.cpp
その他のカスタマイズ
0.1Ωの検出抵抗器を取り外し、それを独自のものに置き換えてレンジを変更することが可能です
(例えば0.01Ωにすると、32 Aまでを8 mAの分解能で測定できます)。
Ref.
FeatherWing - INA219搭載 電圧、電流、電力測定ボード
■配線

測定データ表示に使用しているTFT液晶モジュール(ST7735との接続は下記の通りです。
| XIAO | - | TFT DISPLAY |
| GND | - | [1]GND |
| 3.3V | - | [2]VCC |
| SCK[D8] | - | [3]SCL:SPI clock line |
| MOSI[D10] | - | [4]SDA:SPI data line |
| [D2] | - | [5]RES:Reset interface |
| [D3] | - | [6]DC:SPI data / command selection |
| [D1] | - | [7]CS:Chipselect |
| | | [8]BLK:Backlight control |
■プロジェクトの作成
$ mkdir -p ~/INA219
$ cd ~/INA219
$ platformio init -b seeed_xiao
$ vi platformio.ini
[env:seeed_xiao]
platform = atmelsam
board = seeed_xiao
framework = arduino
↓追記
board_build.mcu = samd21g18a
board_build.f_cpu = 48000000L
upload_protocol = sam-ba
■プログラミング
$ vi src/ina219.ino
#include <Adafruit_INA219.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#define TFT_CS 1
#define TFT_RST 2
#define TFT_DC 3
#define TFT_SCLK 8
#define TFT_MOSI 10
#define BLACK ST7735_WHITE
#define CYAN ST7735_BLUE
#define ORANGE ST7735_ORANGE
Adafruit_INA219 ina219;
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI,
TFT_SCLK, TFT_RST);
void setup() {
tft.initR(INITR_MINI160x80);
tft.setTextWrap(false);
tft.setRotation(1);
tft.setTextSize(1);
tft.setTextColor(ORANGE);
if (! ina219.begin()) {
while (1) {
tft.setCursor(5, 30);
tft.print("Failed to find INA219 chip");
delay(10);
}
}
ina219.setCalibration_16V_400mA();
}
void loop() {
float shuntvoltage = ina219.getShuntVoltage_mV();
float busvoltage = ina219.getBusVoltage_V();
float current_mA = ina219.getCurrent_mA();
float power_mW = ina219.getPower_mW();
float loadvoltage = busvoltage + (shuntvoltage / 1000);
tft.fillScreen(BLACK);
tft.setTextSize(2);
tft.setTextColor(ORANGE);
tft.setCursor(5, 5);
tft.print("bus:");
tft.print(busvoltage);
tft.print("V");
// tft.print("loadV:");
// tft.print(loadvoltage);
tft.setCursor(5, 23);
tft.print("shunt:");
tft.print(shuntvoltage);
tft.print("mV");
tft.setCursor(5, 41);
tft.setTextColor(CYAN);
tft.print("cur.:");
tft.print(current_mA,1);
tft.print("mA");
tft.setCursor(5, 59);
tft.print("power:");
tft.print(power_mW,1);
tft.print("mW");
delay(1000);
}
$ pio run
/home/pi/INA219/src/ina219.ino:2:29: fatal error: Adafruit_INA219.h: No such file or directory
$ platformio lib search "header:Adafruit_INA219.h"
Adafruit INA219
===============
#ID: 160
INA219 Current Sensor
Keywords: sensors
Compatible frameworks: Arduino
.....
$ platformio lib install 160
Library Storage: /home/pi/.pio/libdeps/seeed_xiao
LibraryManager: Installing id=160
Adafruit INA219 @ 1.0.9 has been successfully installed!
Installing dependencies
Looking for Adafruit NeoPixel library in registry
LibraryManager: Installing id=28
Adafruit NeoPixel @ 1.6.0 has been successfully installed!
Looking for Adafruit GFX Library library in registry
LibraryManager: Installing id=13
Adafruit GFX Library @ 1.10.1 has been successfully installed!
Installing dependencies
Looking for Adafruit BusIO library in registry
LibraryManager: Installing id=6214
Adafruit BusIO @ 1.5.0 has been successfully installed!
Looking for Adafruit SSD1306 library in registry
LibraryManager: Installing id=135
Adafruit SSD1306 @ 2.4.0 has been successfully installed!
Installing dependencies
$ pio run
/home/pi/src/ina219.ino:4:29: fatal error: Adafruit_ST7735.h: No such file or directory
$ platformio lib search "header:Adafruit_ST7735.h"
Adafruit ST7735 and ST7789 Library
==================================
#ID: 12
This is a library for the Adafruit ST7735 and ST7789 SPI displays.
....
$ platformio lib install 12
Library Storage: /home/pi/.pio/libdeps/seeed_xiao
LibraryManager: Installing id=12
Adafruit ST7735 and ST7789 Library @ 1.6.0 has been successfully installed!
Installing dependencies
Looking for Adafruit GFX Library library in registry
LibraryManager: Installing id=13
Adafruit GFX Library @ 1.10.1 has been successfully installed!
Installing dependencies
Looking for Adafruit BusIO library in registry
LibraryManager: Installing id=6214
Adafruit BusIO @ 1.5.0 has been successfully installed!
Looking for Adafruit seesaw Library library in registry
LibraryManager: Installing id=1890
Adafruit seesaw Library @ 1.3.1 has been successfully installed!
Installing dependencies
Looking for Adafruit ST7735 and ST7789 Library library in registry
Looking for SD library in registry
Conflict: More than one library has been found by request {"name": "SD", "frameworks": ["arduino"]}:
SD
==
#ID: 161
This library aims to expose a subset of SD card functionality in the form of a higher level 'wrapper' object
SD
==
#ID: 868
Enables reading and writing on SD cards. Once an SD memory card is connected to the SPI interface of the Arduino or Genuino board you can create files and read/write on them. You can also move through directories on the SD card.
Automatically chose the first available library (use `--interactive` option to make a choice)
LibraryManager: Installing id=161
SD @ 0.0.0-alpha+sha.041f788250 has been successfully installed!
$ platformio run -t upload

モニターに映る測定データをみてみましょう。
| bus voltage | 2.73V |
| shunt voltage | 0.19mV |
| current | 1.9mA |
| Power | 5.0mW |
shunt抵抗は100mΩ、電圧降下は 0.19mV なので電流は
1.9mA=0.19mV/0.1Ω
消費電力は
5.19mW=2.73V*1.9mA
この計算結果からもわかるように、電流が小さいと、
関数から取得される値と、計算式で求められる数値の誤差が大きくなります。
shunt電圧とbus電圧から、計算式により電流、消費電力は求めたほうがよいかもしれません。
shunt検出器を挟んで、電源側が load電圧(負荷電圧)、回路側が bus電圧 になりますが、
shunt電圧が小さいので、この2つはほとんどかわりません。
load電圧 = shunt電圧 + bus電圧
上記の回路では、330Ωの抵抗を介して、LEDを点灯させましたが、抵抗値を10Ωに換えてみると、bus電圧が低下しました。
| bus voltage | 2.59V |
| shunt voltage | 0.50mV |
| current | 5.0mA |
| Power | 13.0mW |
電池の内部抵抗による分圧も関係していると思いますが、簡単な計算式では算出できませんでした。
■参考文献
・シャント抵抗器(分流)
・直流回路の計算(分圧と分流)
・あらゆる分野で求められている電流検出
・電源電流の高精度測定
・pi-ina219 1.3.0
|
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」
「一念発起して何かを始めても、いつも三日坊主で終わってしまう」
「色んなことを先延ばしにしたまま、時間だけが過ぎていく」
そこで本書では、そんな著者が独自に開発した、
まったく新しい目標達成メソッド「100日デザイン」について、
その知識と技術を、余すところなくご紹介します。
まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。
ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。
今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。
ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。
29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!
【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。
基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。
Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説!
500以上のサンプルを掲載。実行結果も確認。
全24章の包括的なチュートリアル。
ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS…
全WEB媒体で効果バツグン!
カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術
小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。
Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード
電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)
|