Senin, 12 April 2021

Cara membuat monitoring tegangan dan Arus DC via Modbus RTU dengan Arduino Uno dan INA219

 



sensor INA 219 adalah sensor untuk mengukur arus dan tegangan  dan media komunikasinya via i2c. dari 2 parameter itu bisa juga memonitor daya dengan rumus:
 daya = tegangan x arus

adapun kemampuan nya itu mengukur tegangan sampai 26VDC dan untuk arus max 3,2A.

berikut ini adalah bagian-bagian dari sensor INA219:




adapun caranya declare koding sensornya di ARDUINO IDE agar bisa multi sensor, sebagai berikut:
Adafruit_INA219 ina219_A; // tanpa jumper
Adafruit_INA219 ina219_B(0x41);//JUMPER A0
Adafruit_INA219 ina219_C(0x44);//JUMPER A1
Adafruit_INA219 ina219_D(0x45);//JUMPER A0 DAN A1


contoh jumper A0:



cara wiring:


test dulu via serial monitor, berikut sketchnya:
#include <Wire.h>
#include <Adafruit_INA219.h>
Adafruit_INA219 ina219;
void setup(void) 
{
  Serial.begin(115200);
  while (!Serial) {
      // will pause Zero, Leonardo, etc until serial console opens
      delay(1);
  }
  uint32_t currentFrequency;
  ina219.begin();
  Serial.println("SIMOR Measuring voltage and current with INA219 ...");
}
void loop(void) 
{
  float shuntvoltage = 0;
  float busvoltage = 0;
  float current_mA = 0;
  float loadvoltage = 0;
  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  loadvoltage = busvoltage + (shuntvoltage / 1000);
  
  Serial.print("Bus Voltage:   "); Serial.print(busvoltage); Serial.println(" V");
  Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
  Serial.print("Load Voltage:  "); Serial.print(loadvoltage); Serial.println(" V");
  Serial.print("Current:       "); Serial.print(current_mA); Serial.println(" mA");
  Serial.println("");
  delay(2000);
}

setelah data sudah muncul, langkah selanjutnya lempar data ke modbus:


#include <ModbusRtu.h>
#define ID   1
Modbus slave(ID, 0, 0); // this is slave ID and RS-232 or USB-FTDI
uint16_t au16data[90];
#include <Wire.h>
#include <Adafruit_INA219.h>
Adafruit_INA219 ina219_A;

void setup() {
  uint32_t currentFrequency;
  ina219_A.begin();  // Initialize first board (default address 0x40)
  ina219_B.begin();  // Initialize second board with the address 0x41
   slave.begin( 19200 );

}

void loop() {
  slave.poll( au16data, 90 );
  io_poll();
}

void io_poll() {
  int Ashuntvoltage = 0;
  float Abusvoltage = 0;
  int Acurrent_mA = 0;
  float Aloadvoltage = 0;
  int Bshuntvoltage = 0;
  float Bbusvoltage = 0;
  int Bcurrent_mA = 0;
  float Bloadvoltage = 0;
  Ashuntvoltage = ina219_A.getShuntVoltage_mV();
  Abusvoltage = ina219_A.getBusVoltage_V();
  Acurrent_mA = ina219_A.getCurrent_mA();
  Aloadvoltage = Abusvoltage + (Ashuntvoltage / 1000);

   // read INA219
  au16data[2] = Ashuntvoltage ;
  au16data[3] = Abusvoltage * 10;
  au16data[4] = Acurrent_mA ;
  au16data[5] = Aloadvoltage * 10;
  au16data[6] = ((Acurrent_mA *0.001) * Abusvoltage) * 10; //daya
  

}





Terima kasih sudah meluangkan waktunya untuk membaca artikel ini.

silahkan tinggalkan komen jika ada masukan untuk artikel selanjutnya


Tidak ada komentar:

Posting Komentar

Uji sensor ultrasonic waterproof A01NYUB dengan ESP32

  apa itu sensor ultrasonic ?? Sensor jarak ultrasonik menentukan jarak ke target dengan mengukur selang waktu antara pengiriman dan penerim...