Cirkit Designer Logo
Cirkit Designer
Your all-in-one circuit design IDE
Home / 
Project Documentation

Solar Energy Monitoring System with Arduino and ESP32 Communication

Image of Solar Energy Monitoring System with Arduino and ESP32 Communication

Solar Energy Monitoring Circuit Documentation

Summary

This circuit is designed to monitor the performance of solar panels using current and voltage sensors. It includes solar panels, current sensors (MAX471), a solar charge controller, a battery, an Arduino UNO microcontroller, and an ESP32 microcontroller for potential communication capabilities. The Arduino UNO reads the current and voltage from the solar panels through the MAX471 sensors and outputs the data to the Serial Monitor. The solar charge controller manages the charging of the battery from the solar panels.

Component List

Solar Panel

  • Description: Converts sunlight into electrical energy.
  • Pins: + (Positive), - (Negative)

MAX471

  • Description: Current and voltage sensor module.
  • Pins: Vin (Voltage Input), GND (Ground), Vout (Voltage Output), AT (Analog Current Output), VT (Analog Voltage Output)

Solar Charge Controller

  • Description: Regulates the power going from the solar panels to the battery and the load.
  • Pins: Solar Cell +, Solar Cell -, Battery +, Battery -, Load +, Load -

Arduino UNO

  • Description: Microcontroller board based on the ATmega328P.
  • Pins: A0 to A5 (Analog Inputs), D0 to D13 (Digital I/O), GND (Ground), Vin, 5V, 3.3V, Reset, IOREF, SCL, SDA, AREF

12V 200Ah Battery

  • Description: Stores electrical energy for use when solar power is not available.
  • Pins: GND (Ground), 12V (Positive)

ESP32

  • Description: Microcontroller with Wi-Fi and Bluetooth capabilities.
  • Pins: EN, VP, VN, D34 to D27, D14, D12, D13, GND, VIN, 3V3, D15, D2, D4, RX2, TX2, D5, D18, D19, D21, RX0, TX0, D22, D23, BOOT

Wiring Details

Solar Panel

  • + connected to Vin of MAX471.
  • - connected to GND of MAX471.

MAX471 (for each instance)

  • Vin connected to + of Solar Panel.
  • GND connected to - of Solar Panel and GND of Arduino UNO.
  • Vout connected to Solar Cell + of Solar Charge Controller.
  • AT connected to A0 or A2 of Arduino UNO (depending on the instance).
  • VT connected to A1 or A3 of Arduino UNO (depending on the instance).

Solar Charge Controller

  • Solar Cell + connected to Vout of MAX471.
  • Solar Cell - connected to GND of MAX471.
  • Battery + connected to 12V of 12V 200Ah Battery.
  • Battery - connected to GND of 12V 200Ah Battery.

Arduino UNO

  • GND connected to GND of MAX471.
  • A0 connected to AT of MAX471 (Panel 1).
  • A1 connected to VT of MAX471 (Panel 1).
  • A2 connected to AT of MAX471 (Panel 2).
  • A3 connected to VT of MAX471 (Panel 2).
  • D0 connected to RX0 of ESP32.
  • D1 connected to TX0 of ESP32.

12V 200Ah Battery

  • GND connected to Battery - of Solar Charge Controller.
  • 12V connected to Battery + of Solar Charge Controller.

ESP32

  • TX0 connected to D1 of Arduino UNO.
  • RX0 connected to D0 of Arduino UNO.

Documented Code

Arduino UNO Code (sketch.ino)

// Pin analog untuk sensor MAX471
const int AT_PIN1 = A0; // Pin AT untuk sensor Panel 1
const int VT_PIN1 = A1; // Pin VT untuk sensor Panel 1
const int AT_PIN2 = A2; // Pin AT untuk sensor Panel 2
const int VT_PIN2 = A3; // Pin VT untuk sensor Panel 2

void setup() {
  Serial.begin(9600); // Inisialisasi komunikasi serial
}

void loop() {
  // Membaca data arus dan tegangan dari Panel 1
  int atValue1 = analogRead(AT_PIN1);
  float current1 = (atValue1 / 1024.0) * 5.0 / 0.1; // 1V = 1A, 0.1V = 0.1A (skala 0.1V/A)

  int vtValue1 = analogRead(VT_PIN1);
  float voltage1 = (vtValue1 / 1024.0) * 5.0; // Tegangan analog 0-5V

  // Membaca data arus dan tegangan dari Panel 2
  int atValue2 = analogRead(AT_PIN2);
  float current2 = (atValue2 / 1024.0) * 5.0 / 0.1; // 1V = 1A, 0.1V = 0.1A (skala 0.1V/A)

  int vtValue2 = analogRead(VT_PIN2);
  float voltage2 = (vtValue2 / 1024.0) * 5.0; // Tegangan analog 0-5V

  // Mengirim data ke Serial Monitor
  Serial.print("Panel1_Current: ");
  Serial.print(current1);
  Serial.print(" A, ");
  Serial.print("Panel1_Voltage: ");
  Serial.print(voltage1);
  Serial.println(" V");

  Serial.print("Panel2_Current: ");
  Serial.print(current2);
  Serial.print(" A, ");
  Serial.print("Panel2_Voltage: ");
  Serial.print(voltage2);
  Serial.println(" V");

  delay(1000); // Delay 1 detik untuk pembacaan berikutnya
}

ESP32 Code (sketch.ino)

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

Note: The ESP32 code provided is a template and does not contain any functional code related to the current circuit.