Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Reference in website :
- * https://how2electronics.com/interfacing-0-25v-dc-voltage-sensor-with-arduino/
- *
- */
- #include <ACS712.h>
- /* Keterangan :
- * Sensor 1 : untuk PV
- * Sensor 2 : Untuk Battery
- * Relay 1 : Switch ke sumber battery
- * Relay 2 : Switch ke sumber PV
- * Relay 3 : Switch ke sumber PLN
- * Relay 4 : Switch ke sumber Inverter
- */
- // define analog input
- #define sensor_voltage_1 A0
- #define sensor_voltage_2 A1
- #define sensor_current_1 A3
- #define sensor_current_2 A4
- // define digital output
- #define relay_1 4
- #define relay_2 5
- #define relay_3 6
- #define relay_4 7
- #define HIDUP LOW
- #define MATI HIGH
- // float for ADC voltage & input voltage
- float in_voltage_1 = 0.0, in_voltage_2 = 0.0;
- // deklarasi object ACS712
- /* Kode untuk type sensor
- * 5A : ACS712_05B (185mV)
- * 20A : ACS712_20A (100mV)
- * 30A : ACS712_30A (66mV)
- */
- #define ACS712TYPE 100
- ACS712 acs_sensor_1(sensor_current_1, 5.0, 1023, ACS712TYPE);
- ACS712 acs_sensor_2(sensor_current_2, 5.0, 1023, ACS712TYPE);
- int in_current_1, in_current_2;
- // deklarasi variabel pending
- long pending_1 = 1000; // 1000ms = 1 detik
- long pending_2 = 1000; // 1000ms = 1 detik
- // deklarasi variabel millis waktu sebelum jalannya program
- unsigned long waktuSebelum_1 = 0;
- unsigned long waktuSebelum_2 = 0;
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600);
- Serial.println(F("DC Voltage Test"));
- pinMode(relay_1, OUTPUT);
- pinMode(relay_2, OUTPUT);
- pinMode(relay_3, OUTPUT);
- pinMode(relay_4, OUTPUT);
- acs_autoMidPoin();
- }
- void loop() {
- // put your main code here, to run repeatedly:
- // deklarasi variabel millis waktu sekarang jalannya program
- unsigned long waktuSekarang_1 = millis();
- unsigned long waktuSekarang_2 = millis();
- // jalankan program 1 : untuk Battery
- if ((unsigned long) (waktuSekarang_1 - waktuSebelum_1) >= pending_1) {
- waktuSebelum_1 = waktuSekarang_1;
- // get voltage and current value battery
- in_voltage_1 = get_voltage(sensor_voltage_1, 12.0);
- in_current_1 = get_current_1();
- // print result to serial monitor to 2 decimal places
- Serial.print(F("Voltage 1 : "));
- Serial.print(in_voltage_1, 2);
- Serial.print(F(" | Current 1 : "));
- Serial.print(in_current_1);
- Serial.println(F(" |"));
- // Short delay
- delay(500);
- }
- // jalankan program 2 : untuk PV
- if ((unsigned long) (waktuSekarang_2 - waktuSebelum_2) >= pending_2) {
- waktuSebelum_2 = waktuSekarang_2;
- // get voltage and current value PV
- in_voltage_2 = get_voltage(sensor_voltage_2, 12.0);
- in_current_2 = get_current_2();
- // print result to serial monitor to 2 decimal places
- Serial.print(F("Voltage 2 : "));
- Serial.print(in_voltage_2, 2);
- Serial.print(F(" | Current 2 : "));
- Serial.print(in_current_2);
- Serial.println(F(" |"));
- // Short delay
- delay(500);
- }
- // program in relay
- // jika tegangan battery lemah, maka relay PV Hidup
- if (in_voltage_1 <= 10.5) {
- digitalWrite(relay_1, MATI);
- digitalWrite(relay_2, HIDUP);
- digitalWrite(relay_3, MATI);
- digitalWrite(relay_4, HIDUP);
- }
- // jika tegangan PV lemah, maka relay battery Hidup
- else if (in_voltage_2 <= 10.5) {
- digitalWrite(relay_1, HIDUP);
- digitalWrite(relay_2, MATI);
- digitalWrite(relay_3, MATI);
- digitalWrite(relay_4, HIDUP);
- }
- // jika tegangan battery dan PV lemah, maka relay PLN Hidup
- else if (in_voltage_1 <= 10.5 && in_voltage_2 <= 10.5) {
- digitalWrite(relay_1, MATI);
- digitalWrite(relay_2, MATI);
- digitalWrite(relay_3, HIDUP);
- digitalWrite(relay_4, MATI);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement