Proudový snímač INA219

Proudový snímač INA219 je vstupní modul, který umožňuje s pomocí Arduina měřit stejnosměrný proud. Tento senzor od firmy Texas Instruments dokáže měřit průchozí stejnosměrný proud o velikosti až 3,2 Ampérů a to v obou směrech, tedy kladný i záporný proud. Co se týká vstupního napětí měřeného obvodu, tak je možné použít až +- 26 Voltů. Měření proudu u tohoto modulu funguje na principu měření úbytku napětí na bočníku, který má zde velikost 0,1 ohmu. Obvod INA219 pak umožňuje měřit napětí a proud v několika módech, které se liší v maximálním napětí a proudu, kdy s nižšími hodnotami obou veličin zlepšujeme rozlišení výsledků. V programu je uvedena ukázka pro nejvyšší rozsahy (označena jako 32V/2A – platí maxima obvodu 26V/3,2A!, rozlišení proudu je 0,8 mA), dále menší proudový rozsah (označení 32V/1A - lepší rozlišení proudu) a jako poslední konfigurace 16V/400mA, která má nejlepší rozlišení pro napětí i proud (0,1 mA). Na modulu se také nachází pájecí plošky označené jako A0 a A1, kterými lze měnit I2C adresu. Po jejich změně tedy můžeme připojit až čtyři snímače INA219 na jednu sběrnici I2C (při zapájení A0 přičteme jedničku k adrese 0x40, s A1 přičteme čtyřku – při zapájení obou plošek tedy dostáváme adresu 0x45).

Pro úspěšné propojení snímače INA219 s Arduinem stačí propojit celkem čtyři vodiče. Propojíme VCC s 3,3 nebo 5 V Arduina, GND se zemí Arduina, SCL s pinem A5 a SDA s pinem A4. Jak již bylo zmíněno, komunikace mezi Arduinem a senzorem probíhá po sběrnici I2C, takže je nutné využít pro datové piny SCL a SDA odpovídající I2C piny na Arduino desce. Zátěž pak zapojíme na svorky Vin+ a Vin- do série v měřeném obvodu, kdy pro správně měření průchozího napětí je nutné zapojit kladný pól na svorku Vin+.

Pro správné přeložení a nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu INA219, návod jak na to je uveden zde. Ukázkový kód obsahuje na začátku připojení potřebných knihoven, definování adresy senzoru a inicializaci senzoru z knihovny. V podprogramu setup nejprve zahájíme komunikaci po sériové lince, poté zahájíme komunikaci senzoru s Arduinem a následně můžeme nastavit kalibraci, jak bylo zmíněno v úvodu návodu. V nekonečné smyčce loop jako první vytvoříme proměnné pro ukládání všech výsledků měření a následně do nich načteme pomocí knihovny všechny dostupné údaje. Mezi tyto údaje patří vstupní napětí, napětí naměřené na bočníku a průchozí proud. Jako doplněk je zde ještě výpočet napětí na zátěži, které se skládá z naměřeného vstupního napětí a jedné tisíciny napětí na bočníku. V dalším kroku vytiskneme všechny dostupné údaje po sériové lince a po pauze dvou vteřin opakujeme nekonečnou smyčku.

// Senzor proudu INA219

// připojení potřebných knihoven
#include <Wire.h>
#include <Adafruit_INA219.h>

// definování adresy senzoru
#define ADDR 0x40
// inicializace senzoru s nastavenou adresou z knihovny
Adafruit_INA219 ina219(ADDR);

void setup(void) {
  // komunikace po sériové lince rychlostí 9600 baud
  Serial.begin(9600);
  // zahájení komunikace se senzorem INA219
  ina219.begin();
  // nastavení kalibrace, k dispozici jsou 3 režimy
  // režim 32V a 2A má největší rozsahy, ale nejmenší přesnost
  ina219.setCalibration_32V_2A();
  // režim 32V a 1A má lepší rozlišení průchozího proudu
  // ina219.setCalibration_32V_1A();
  // režim 16V a 400mA má nejlepší rozlišení proudu i napětí
  // ina219.setCalibration_16V_400mA();
}

void loop(void) {
  // vytvoření proměnných pro uložení výsledků měření
  float napetiVstup = 0;
  float napetiBocnik = 0;
  float napetiZatez = 0;
  float proud = 0;
  // načtení všech dostupných údajů do proměnných
  napetiVstup = ina219.getBusVoltage_V();
  napetiBocnik = ina219.getShuntVoltage_mV();
  napetiZatez = napetiVstup + (napetiBocnik / 1000);
  proud = ina219.getCurrent_mA();
  // vytištění všech dostupných údajů po sériové lince
  Serial.print("Vstupni napeti:    ");
  Serial.print(napetiVstup);
  Serial.println(" V");
  Serial.print("Napeti na bocniku: ");
  Serial.print(napetiBocnik);
  Serial.println(" mV");
  Serial.print("Napeti zateze:     ");
  Serial.print(napetiZatez);
  Serial.println(" V");
  Serial.print("Pruchozi proud:    ");
  Serial.print(proud);
  Serial.println(" mA");
  Serial.println("");
  // pauza před dalším měřením
  delay(2000);
}

Po nahrání programu do Arduino desky s připojeným senzorem INA219 dostaneme například tento výsledek:

Vstupni napeti:    3.28 V
Napeti na bocniku: 0.53 mV
Napeti zateze:     3.28 V
Pruchozi proud:    5.20 mA

Vstupni napeti:    3.28 V
Napeti na bocniku: 0.56 mV
Napeti zateze:     3.28 V
Pruchozi proud:    5.10 mA

Proudový snímač INA219 je zajímavý vstupní modul, s kterým můžeme pomocí Arduina měřit stejnosměrný proud v různých obvodech. Velkou výhodou tohoto senzoru je jeho rozlišení 12 bitů, kdy můžeme dokonce přepínat mezi více módy a tím si zpřesnit naměřené výsledky. Tento modul by tedy mohl sloužit například při stavbě vlastního Arduino měřiče stejnosměrného proudu či přímo multimetru.

 

Seznam použitých komponent:

http://dratek.cz/arduino/1511-original-arduino-uno-rev3-1485165418.html

https://dratek.cz/arduino/1437-ina219-proudovy-snimac-obousmerny-1475566305.html

Další podobné články