電流計 INA219
INA219 + ESP-WROOM-02で電流計を作ってみた
ある基板(システム)が電圧降下を起こして、正常に動かない瞬間があった。
8Ωスピーカ + LEDテープを同時に制御しているので、そのタイミングの消費電流がどうやら怪しい。
テスタでは瞬間の電流を表示できない。
NRF-PPK2 は納品1か月待ちで、待っていられなかったの自作することにした。
電流計はINA219を使用した。 I2Cで電流を取得できる。
取得した電流値をESP-WROOM-02でUDP送信する。
#include <Adafruit_INA219.h> #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <WiFiUDP.h> Adafruit_INA219 ina219; const int CLK = 4; const int DIO = 5; IPAddress HOSTIP (192, 168, 11, 8); IPAddress myIP(192, 168, 11, 39); const char *ssid = "****"; const char *password = "****"; WiFiUDP udp_; #define PORT 12345 void connectWiFi() { WiFi.begin(ssid, password); WiFi.config(myIP, WiFi.gatewayIP(), WiFi.subnetMask()); Serial.println("start_connect"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("CONNECTED!"); } void sendWiFi(char byteData[]) { if (udp_.beginPacket(HOSTIP, PORT)) { udp_.write(byteData); udp_.endPacket(); } } void setup() { WiFi.mode(WIFI_STA); //STAtion_mode. not AP_mode. Serial.begin(115200); udp_.begin(PORT); connectWiFi(); ina219.begin(); ina219.setCalibration_16V_400mA(); //ina219.setCalibration_32V_1A(); } void loop() { float current_mA = ina219.getCurrent_mA(); Serial.println(current_mA); char result[4]; memcpy(result, ¤t_mA, 4); sendWiFi(result); }
送信したデータは、Unityで作ったグラフアプリで受信し表示するようにした。
グラフ描画は、Unity Asset Store の「Graph And Chart」を使用した。(高ぇ) assetstore.unity.com
家の環境では1秒間に400回以上のデータを取得できた。(UDP送信がボトルネックになっているので、別の通信方式であればもっといけそう)
電流値の分解能は0.1mA以下なので、今回の用途には十分であった。
400FPSだと、ある電流スパイクの時間積分(足し算)にもある程度対応できる。
これを使って回路の電流消費を調べて、電圧降下の対策をしていこうと思う。