Translate

Monitor Arus dan Tegangan Solar Panel

Monitor Arus dan Tegangan Solar Panel

   Sistem Monitoring Tegangan dan Arus Solar Panel merupakan proyek elektronika berbasis mikrokontroler ESP32 yang dirancang untuk memantau kondisi kelistrikan panel surya secara real-time. Sistem ini mampu membaca dua jalur pengukuran tegangan DC dan dua jalur pengukuran arus DC menggunakan sensor analog. Data hasil pengukuran kemudian diproses oleh ESP32 dan ditampilkan melalui LCD I2C 16×2 sehingga pengguna dapat mengetahui nilai tegangan dan arus dari masing-masing jalur secara langsung. Selain ditampilkan pada LCD, hasil pengukuran juga dikirimkan ke Serial Monitor Arduino IDE untuk memudahkan pemantauan dan pengujian sistem.

  1. Mengukur tegangan keluaran panel surya.

  2. Mengukur arus listrik pada dua jalur DC.

  3. Menampilkan hasil pengukuran secara real-time.

  4. Mempermudah pemantauan kondisi kelistrikan sistem panel surya.

  5. Mempelajari penerapan ESP32 sebagai pusat pengolahan data sensor.



1. Skema




2. Program Arduino IDE

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// LCD I2C 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Pin sensor tegangan
#define VDC1 34
#define VDC2 35

// Pin sensor arus
#define WCS1 32
#define WCS2 33

// Konstanta sensor
const float FAKTOR_VDC = 5.0;
const float SENS_WCS = 0.033; // 33 mV/A

// Pembagi tegangan tambahan
// R atas 100k, R bawah 150k
const float FAKTOR_PEMBAGI = 150.0 / 250.0;

// Offset arus
float offset1 = 0;
float offset2 = 0;

// Variabel pengukuran
float tegangan1 = 0;
float tegangan2 = 0;
float arus1 = 0;
float arus2 = 0;

// Fungsi membaca tegangan ADC (volt)
float bacaADC(int pin) {
  float total = 0;

  for (int i = 0; i < 100; i++) {
    total += analogReadMilliVolts(pin) / 1000.0;
    delayMicroseconds(300);
  }

  return total / 100.0;
}

// Fungsi sensor tegangan DC
float bacaTegangan(int pin) {
  float vADC = bacaADC(pin);

  // Koreksi pembagi tambahan
  float vSensor = vADC / FAKTOR_PEMBAGI;

  // Modul VDC 0-25V, output 0-5V
  float hasil = vSensor * FAKTOR_VDC;

  if (hasil < 0.05) hasil = 0;

  return hasil;
}


// Fungsi sensor arus WCS1700
float bacaArus(int pin, float offset) {
  float vADC = bacaADC(pin);

  float vSensor = vADC / FAKTOR_PEMBAGI;

  float hasil = (vSensor - offset) / SENS_WCS;

  // Hilangkan noise saat arus mendekati nol
  if (abs(hasil) < 0.3) {
    hasil = 0.0;
  }

  return hasil;
}


void setup() {
  Serial.begin(115200);

  // Inisialisasi I2C
  Wire.begin(21, 22);

  // Inisialisasi LCD
  lcd.begin();
  lcd.backlight();
  lcd.clear();

  // Pengaturan ADC ESP32
  analogReadResolution(12);

  analogSetPinAttenuation(VDC1, ADC_11db);
  analogSetPinAttenuation(VDC2, ADC_11db);
  analogSetPinAttenuation(WCS1, ADC_11db);
  analogSetPinAttenuation(WCS2, ADC_11db);

  lcd.setCursor(0, 0);
  lcd.print("MONITOR DC");
  lcd.setCursor(0, 1);
  lcd.print("Kalibrasi...");

  delay(1000);

  // Kalibrasi offset pada kondisi arus 0 A
  offset1 = bacaADC(WCS1) / FAKTOR_PEMBAGI;
  offset2 = bacaADC(WCS2) / FAKTOR_PEMBAGI;

  lcd.clear();
}

void loop() {
  // Baca 2 tegangan DC
  tegangan1 = bacaTegangan(VDC1);
  tegangan2 = bacaTegangan(VDC2);

  // Baca 2 arus DC
  arus1 = bacaArus(WCS1, offset1);
  arus2 = bacaArus(WCS2, offset2);

  // Tampilan LCD baris 1
  lcd.setCursor(0, 0);
  lcd.print("                ");
  lcd.setCursor(0, 0);
  lcd.print("1:");
  lcd.print(tegangan1, 1);
  lcd.print("V ");
  lcd.print(arus1, 1);
  lcd.print("A");

  // Tampilan LCD baris 2
  lcd.setCursor(0, 1);
  lcd.print("                ");
  lcd.setCursor(0, 1);
  lcd.print("2:");
  lcd.print(tegangan2, 1);
  lcd.print("V ");
  lcd.print(arus2, 1);
  lcd.print("A");

  // Serial Monitor
  Serial.println("========== MONITOR DC ==========");

  Serial.print("Tegangan 1 : ");
  Serial.print(tegangan1, 2);
  Serial.println(" V");

  Serial.print("Arus 1     : ");
  Serial.print(arus1, 2);
  Serial.println(" A");

  Serial.print("Tegangan 2 : ");
  Serial.print(tegangan2, 2);
  Serial.println(" V");

  Serial.print("Arus 2     : ");
  Serial.print(arus2, 2);
  Serial.println(" A");

  Serial.println("================================");

  delay(500);
}



3. Gambar Aplikasinya




No comments:

Post a Comment