INA219 — датчик тока и напряжения (Arduino)

Цифровой датчик тока и напряжения INA219 позволяет с достаточно  большой точностью измерять постоянный ток в прямом и обратном направлении, напряжение от 0 до 26 В. Использование шины I2C делает датчик удобным в использовании совместно с Arduino, так же к шине I2C можно подключить до 4-х таких датчиков.

Основным элементом на плате модуля является микросхема INA219. Микросхема измеряет падение напряжения на шунте (резисторе с малым сопротивлением на выводах Vin+ и Vin-). На плате установлен шунт с сопротивлением 0.1 Ом.

Характеристики датчика тока и напряжения INA219:

  • Тип модуля: INA219
  • Рабочая температура: от -40 °C до 85 °C
  • Дрейф в рабочем температурном диапазоне: 100 мкВ
  • Максимальный измеряемый ток: 3,2 А
  • Точность измерения тока: 0,8 мА
  • Точность измерений по току и напряжению: 1 %
  • Разрешение измерителя: 12-бит
  • Интерфейс: I2C
  • Скорость интерфейса: 3,4 МГц
  • Максимальное измеряемое напряжение: ± 26 В
  • Напряжение питания: от 3 В до 5 В

Ниже показан скетч работы датчика с выводом информации на LCD дисплей 1602, данный пример можно использовать как блок измерения и индикации для источника питания. На плате модуля находятся две группы адресных перемычек, по умолчанию установлен адрес 0х40. Если замкнуть перемычку А0, то адрес поменяется на 0х41, если замкнуть перемычку А1, то адрес поменяется на 0х44, при замыкании двух перемычек адрес поменяется на 0х45.

Плата Пин SDA Пин SCL
Arduino Uno, Nano, Pro и Pro Mini A4 A5
// MAX 26V 2A    
 
#include <Wire.h>
#include <Adafruit_INA219.h> //https://github.com/adafruit/Adafruit_INA219.git
#include <LiquidCrystal.h>
 LiquidCrystal lcd(7, 8, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7
 Adafruit_INA219 ina219_A;
//Adafruit_INA219 ina219_B(0x41); // Address
/*
Board 0: Address = 0x40 Offset = binary 00000 (no jumpers required)
Board 1: Address = 0x41 Offset = binary 00001 (bridge A0 as in the photo above)
Board 2: Address = 0x44 Offset = binary 00100 (bridge A1)
Board 3: Address = 0x45 Offset = binary 00101 (bridge A0 & A1)
*/
 
void setup(){
   Serial.begin(9600);
   ina219_A.begin();
 //ina219_B.begin();   
   lcd.begin(16, 2);
}
 
void loop(){
  lcd.setCursor(3,0);lcd.print("U = ");lcd.print(ina219_A.getBusVoltage_V()+ina219_A.getShuntVoltage_mV()/1000);lcd.print(" V  ");
  lcd.setCursor(1,1);lcd.print(ina219_A.getCurrent_mA()/1000);lcd.print(" A  ");
  lcd.setCursor(9,1);lcd.print(ina219_A.getPower_mW()/1000);lcd.print(" W  ");
  delay(200);
}

Comments

  1. Привет. Изменил скетч для подключения по i2c. При включении ( нагрузки нет) значения U меняются от 0 до 1.73 Волта Ток 0.00 до 0.01 Мощность 0.00 до 0.01 Одним словом все прыгает.

  2. Здравствуйте!
    Тут возникла необходимость отображать малые токи. В этом варианте при токах в 10, 15 или 18 мА прибор показывает «0,01А». При токах ниже 10 мА — просто нули. Возможно ли ввести отображение с тремя знаками после запятой или же вообще в миллиамперах?

    1. Датчик достаточно грубый при малых токах Точность измерения тока: 0,8 мА

      строку:
      lcd.print(ina219_A.getCurrent_mA()/1000);
      замените на:
      lcd.print(ina219_A.getCurrent_mA()/1000,3);

  3. Теперь все просто замечательно! Осталось только проверить какова же его точность при малых токах. На работе есть точные приборы — протестирую. Вам большущее спасибо за помощь! 🙂

  4. Потестил. Если «Флюк» меня не обманывает, то получилось вполне честное устройство. Точность в один миллиампер меня вполне удовлетворяет. Еще раз спасибо за помощь! 🙂

Добавить комментарий

Войти с помощью: