Beispiel INA219 Zähler für Ladung und Arbeit

Das nachfolgende Beispiel zeigt einen Stromzähler, der die gelieferte oder bezogene Strommenge als elektrische Arbeit P in Milliwattstunden oder Wattstunden [mWh oder Wh] und die Ladung Q in Milliamperestunden oder Amperestunden [mAh oder Ah] anzeigt. Solange die Taste "Toggle LCD" gedrückt wird, wird auf die Anzeige auf die aktuell anliegenden Bus-Spannung U und den aktuellen Laststrom I umgeschaltet. Durch längeres Drücken (ca. 3 Sekunden) der Taste "Reset Counter" werden die Zähler für die elektrische Arbeit und die Ladung auf Null zurückgesetzt.

In der Anzeige ist auch der aktuelle Messbereich MB des INA219 ersichtlich:

  • MB für Spannung: 16 oder 32 V
  • MB für Strom: 400, 800, 1600 oder 3200 mA

Die MB-Werte für Strom gelten für einen INA219-Shunt-Widerstand von 0,1 Ohm. Wird ein anderer Shunt-Widerstand verwendet, ist dieser im Sketch anzugeben. Die möglichen Messbereiche für Strom werden dadurch angepasst.

Die Umschaltung auf den jeweils kleinstmöglichen Messbereich (mit größtmöglicher Auflösung) erfolgt automatisch. Messbereichsüberschreitungen werden dabei mittels LED angezeigt (kurzes Aufleuchten bei Umschaltung in den nächst höheren Messbereich, Dauerlich bei Überschreiten des höchsten Messbereiches).

Die Aktualisierung der Mess- und Berechnung der Zählwerte erfolgt im Sekundentakt. Als Basis für den Sekundentakt habe ich den programmierbaren Takt "SQW" des RTC-Moduls DS3231 herangezogen, um auch bei längerfristigen Zählvorgängen eine genaue Zeitbasis zur Berechnung der Zählerwerte sicherzustellen. Der Sekundentakt des DS3231 wird mittels Pin Change Interrupt erfasst.

Achtung: Wird ein negativer Strom angezeigt, so ist die Beschaltung an den Anschlüsse Vin+ und Vin- des INA219 Modul vertauscht. In diesem Fall erfolgt keine Zählung der Arbeit und der Ladung.


Verwendete Bauteile:

  • 1 Arduino Nano
  • 1 INA219 Breakout Board
  • 1 LCD-Anzeige 20x4 mit I2C-Schnittstelle
  • 1 RTC DS3231
  • 1 LED rot
  • 1 Widerstand 220 Ohm
  • 2 Taster

Optional zum Test

  • 1 Netzgerät, z.B. 0-30 V, 3 A
  • 1 Lastwiderstand (z.B. niederohmiger Drahtwiderstand mit hoher Leistung) -> siehe Auslegungshilfe unter Stromsensor INA219


Abbildung 1: Testaufbau des Stromzählers


Programmbeispiel INA219_Zaehler:

Hier findet ihr die Version 1.0 des Programms INA219_Zaehler_Vx.x.ino als Textfile.

Leider kann ich hier keine "ino"-Files hochladen, daher zum Verwenden des Programms das Suffix ".txt" aus dem Dateinamen entfernen und in einem neuen Verzeichnis mit dem Namen "INA219_Zaehler_V1.0" speichern.

INA219_Zaehler_V1.0.ino.txt


Verwendete Libraries:

Neben der Standard-Library Wire verwende ich noch folgende eigene Library:

MyDebug: Mit meiner Makro-Library MyDebug gebe ich Kontrollwerte am Seriellen Monitor aus (siehe: Arduino-Debugger). Achtung: Die Baudrate des Seriellen Monitors auf 115200 Baud einstellen oder im Setup des Sketch in der folgenden Anweisung ändern:

DEBUG_BEGIN(115200);

Anpassen des INA219-Shunt-Widerstandes:

Standardmäßig ist auf dem INA219-Breakout Board ein 0,1 Ohm Shunt-Widerstand verlötet. Bei Verwendung eines anderen Shunt-Widerstandes ist der Wert im Sketch im Deklarationsteil in der nachfolgenden Zeile anzupassen:

const float shunt = 0.1; //INA219 Shunt-Widerstand in Ohm


Anpassung der Hysterese bei Messbereichsunterschreitung:

Mit dieser Angabe in % im Deklarationsteil des Sketch kann die Schalthysterese zum Umschalten in den nächst kleineren Messbereich eingestellt werden.

const float hysteresies = 10.0; //Hysterese in % vom Messbereich

Beispiel: Ist der aktuelle Messbereich für die Erfassung der Shunt-Spannung 80 mV, muss - bei eingestellter Hysterese von 10% - der Messwert auf unter 36 mV ( = 40 mV - 10%) absinken, bevor in den 40 mV-Messbereich umgeschaltet wird.


Ausgabe des Mess- und Rechenwerte auf der LCD-Anzeige

Standardmäßig werden die neben der Anzeige des Messbereichs die Zähler für Arbeit und Ladung am LCD-Display angezeigt:

Abbildung 2: LCD-Anzeige mit Anzeige des Messbereichs MB, der elektrischen Arbeit W und der elektrischen Ladung Q


Solange die Taste "Toggle LCD" gedrückt wird, wird die LCD-Anzeige umgeschaltet und zeigt nun die momentane Bus-Spannung und den momentanen Laststrom an:


Abbildung 3: LCD-Anzeige mit Anzeige des Messbereichs MB, der gemessenen Spannung U und des Stroms I. Wird ein negativer Strom angezeigt, so ist die Beschaltung an den Anschlüsse Vin+ und Vin- des INA219 Modul vertauscht. In diesem Fall erfolgt keine Zählung der Arbeit und der Ladung.



Zurück zum Stromsensor INA219