Advertisement
basyair7

sketch_mar4a.ino

Mar 4th, 2023 (edited)
812
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 3.66 KB | Source Code | 0 0
  1. /* Reference in website :
  2.  * https://how2electronics.com/interfacing-0-25v-dc-voltage-sensor-with-arduino/
  3.  *
  4.  */
  5.  
  6. #include <ACS712.h>
  7.  
  8. /* Keterangan :
  9.  * Sensor 1 : untuk PV
  10.  * Sensor 2 : Untuk Battery
  11.  * Relay 1 : Switch ke sumber battery
  12.  * Relay 2 : Switch ke sumber PV
  13.  * Relay 3 : Switch ke sumber PLN
  14.  * Relay 4 : Switch ke sumber Inverter
  15.  */
  16.  
  17. // define analog input
  18. #define sensor_voltage_1 A0
  19. #define sensor_voltage_2 A1
  20. #define sensor_current_1 A3
  21. #define sensor_current_2 A4
  22.  
  23. // define digital output
  24. #define relay_1 4
  25. #define relay_2 5
  26. #define relay_3 6
  27. #define relay_4 7
  28. #define HIDUP LOW
  29. #define MATI HIGH
  30.  
  31. // float for ADC voltage & input voltage
  32. float in_voltage_1 = 0.0, in_voltage_2 = 0.0;
  33.  
  34. // deklarasi object ACS712
  35. /* Kode untuk type sensor
  36.  * 5A   : ACS712_05B (185mV)
  37.  * 20A  : ACS712_20A (100mV)
  38.  * 30A  : ACS712_30A (66mV)
  39.  */
  40. #define ACS712TYPE 100
  41. ACS712 acs_sensor_1(sensor_current_1, 5.0, 1023, ACS712TYPE);
  42. ACS712 acs_sensor_2(sensor_current_2, 5.0, 1023, ACS712TYPE);
  43. int in_current_1, in_current_2;
  44.  
  45. // deklarasi variabel pending
  46. long pending_1 = 1000; // 1000ms = 1 detik
  47. long pending_2 = 1000; // 1000ms = 1 detik
  48.  
  49. // deklarasi variabel millis waktu sebelum jalannya program
  50. unsigned long waktuSebelum_1 = 0;
  51. unsigned long waktuSebelum_2 = 0;
  52.  
  53. void setup() {
  54.   // put your setup code here, to run once:
  55.   Serial.begin(9600);
  56.   Serial.println(F("DC Voltage Test"));
  57.   pinMode(relay_1, OUTPUT);
  58.   pinMode(relay_2, OUTPUT);
  59.   pinMode(relay_3, OUTPUT);
  60.   pinMode(relay_4, OUTPUT);
  61.  
  62.   acs_autoMidPoin();
  63.  
  64. }
  65.  
  66. void loop() {
  67.   // put your main code here, to run repeatedly:
  68.   // deklarasi variabel millis waktu sekarang jalannya program
  69.   unsigned long waktuSekarang_1 = millis();
  70.   unsigned long waktuSekarang_2 = millis();
  71.  
  72.   // jalankan program 1 : untuk Battery
  73.   if ((unsigned long) (waktuSekarang_1 - waktuSebelum_1) >= pending_1) {
  74.     waktuSebelum_1 = waktuSekarang_1;
  75.     // get voltage and current value battery
  76.     in_voltage_1 = get_voltage(sensor_voltage_1, 12.0);
  77.     in_current_1 = get_current_1();
  78.  
  79.     // print result to serial monitor to 2 decimal places
  80.     Serial.print(F("Voltage 1 : "));
  81.     Serial.print(in_voltage_1, 2);
  82.     Serial.print(F(" | Current 1 : "));
  83.     Serial.print(in_current_1);
  84.     Serial.println(F(" |"));
  85.  
  86.     // Short delay
  87.     delay(500);
  88.   }
  89.  
  90.   // jalankan program 2 : untuk PV
  91.   if ((unsigned long) (waktuSekarang_2 - waktuSebelum_2) >= pending_2) {
  92.     waktuSebelum_2 = waktuSekarang_2;
  93.     // get voltage and current value PV
  94.     in_voltage_2 = get_voltage(sensor_voltage_2, 12.0);
  95.     in_current_2 = get_current_2();
  96.  
  97.     // print result to serial monitor to 2 decimal places
  98.     Serial.print(F("Voltage 2 : "));
  99.     Serial.print(in_voltage_2, 2);
  100.     Serial.print(F(" | Current 2 : "));
  101.     Serial.print(in_current_2);
  102.     Serial.println(F(" |"));
  103.  
  104.     // Short delay
  105.     delay(500);
  106.   }
  107.  
  108.   // program in relay
  109.   // jika tegangan battery lemah, maka relay PV Hidup
  110.   if (in_voltage_1 <= 10.5) {
  111.     digitalWrite(relay_1, MATI);
  112.     digitalWrite(relay_2, HIDUP);
  113.     digitalWrite(relay_3, MATI);
  114.     digitalWrite(relay_4, HIDUP);
  115.   }
  116.  
  117.   // jika tegangan PV lemah, maka relay battery Hidup
  118.   else if (in_voltage_2 <= 10.5) {      
  119.     digitalWrite(relay_1, HIDUP);
  120.     digitalWrite(relay_2, MATI);
  121.     digitalWrite(relay_3, MATI);
  122.     digitalWrite(relay_4, HIDUP);
  123.   }
  124.  
  125.   // jika tegangan battery dan PV lemah, maka relay PLN Hidup
  126.   else if (in_voltage_1 <= 10.5 && in_voltage_2 <= 10.5) {
  127.     digitalWrite(relay_1, MATI);
  128.     digitalWrite(relay_2, MATI);
  129.     digitalWrite(relay_3, HIDUP);
  130.     digitalWrite(relay_4, MATI);
  131.   }
  132.  
  133. }
  134.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement