WachidSusilo

wifi_jadi_punya_orang

Aug 15th, 2020 (edited)
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.59 KB | None | 0 0
  1. #define BLYNK_PRINT Serial
  2. #include <ESP8266_Lib.h>
  3. #include <BlynkSimpleShieldEsp8266.h>
  4. #include <Wire.h>
  5. #include <LiquidCrystal_I2C.h>
  6.  
  7. int relay1 = 5;
  8. int relay2 = 4;
  9. int relay3 = 3;
  10.  
  11. float v;
  12. double p1 = 0;
  13. double p2 = 0;
  14. double p3 = 0;
  15. float pt1 = 0;
  16. float pt2 = 0;
  17. float pt3 = 0;
  18. float Arus = 0;
  19. float x1, x2;
  20.  
  21. bool status = 0;
  22. char auth[] = "c6b8c4dd89364245a9f849c8b440f096";
  23. BlynkTimer timer;
  24.  
  25. //steARUs
  26. const int sensorIn = A1;
  27. const int sensorIn1 = A2;
  28. const int sensorIn2 = A3;
  29. int mVperAmp = 66;
  30.  
  31. double Volt = 0, VRMSvolt = 0;
  32. double Voltage = 0; double Voltage2 = 0; double Voltage3 = 0;
  33. double VRMS = 0, VRMS2 = 0, VRMS3 = 0;
  34. double AmpsRMS = 0, AmpsRMS2 = 0, AmpsRMS3 = 0;
  35. double I = 0, I2 = 0, I3 = 0;
  36. double DAYA1 = 0;
  37. float mcuVoltage = 5.0;
  38. float dayatotal = 0;
  39.  
  40. char ssid[] = "ryzen1234";
  41. char pass[] = "ryen1234";
  42.  
  43. #define EspSerial Serial1
  44. #define ESP8266_BAUD 115200
  45.  
  46. ESP8266 wifi(&EspSerial);
  47. LiquidCrystal_I2C lcd(0x27, 20, 4);
  48.  
  49. void setup()
  50. {
  51.  
  52.   Serial.begin(9600);
  53.   //lcd.init();
  54.   lcd.backlight();
  55.   lcd.clear();
  56.   delay(500);
  57.   EspSerial.begin(ESP8266_BAUD);
  58.   delay(10);
  59.   pinMode(relay1, OUTPUT);
  60.   pinMode(relay2, OUTPUT);
  61.   pinMode(relay3, OUTPUT);
  62.  
  63.   if (VRMSvolt > 200)
  64.   {
  65.     digitalWrite(relay1, LOW);
  66.     digitalWrite(relay2, LOW);
  67.     digitalWrite(relay3, LOW);
  68.     status = 1;
  69.   }
  70.   else
  71.   {
  72.     digitalWrite(relay1, HIGH);
  73.     digitalWrite(relay2, HIGH);
  74.     digitalWrite(relay3, HIGH);
  75.     status = 0;
  76.   }
  77.  
  78.   Blynk.begin(auth, wifi, ssid, pass, "iwancilibur.my.id", 8080);
  79.   timer.setInterval(500L, getACS712);
  80.   timer.setInterval(500L, getACS712B);
  81.   timer.setInterval(500L, getACS712C);
  82. }
  83.  
  84. void loop()
  85. {
  86.  
  87.   timer.run();
  88.   lcd.setCursor(00, 00);
  89.   lcd.print("Tegangan :");
  90.   lcd.setCursor(00, 1);
  91.   lcd.print("DAYA 1   :");
  92.   lcd.setCursor(00, 2);
  93.   lcd.print("DAYA 2   :");
  94.   lcd.setCursor(00, 3);
  95.   lcd.print("DAYA 3   :");
  96.   lcd.setCursor(11, 00);
  97.   lcd.print(String(VRMSvolt) + "  ");
  98.   lcd.setCursor(11, 01);
  99.   lcd.print(String(p1) + "  ");
  100.   lcd.setCursor(11, 02);
  101.   lcd.print(String(p2) + "  ");
  102.   lcd.setCursor(11, 03);
  103.   lcd.print(String(p3) + "  ");
  104.  
  105.  
  106.   //             getACS712();
  107.   //             getACS712B();
  108.   //             getACS712C();
  109.   getVOLT();
  110.   dayatotal = p1 + p2 + p3;
  111.   Blynk.virtualWrite(V10, float(dayatotal));
  112.  
  113.  
  114.   Serial.print(String("v1 = ") + VRMSvolt + " V");
  115.   Serial.print(String("i1 = ") + I + " A");
  116.   Serial.print(String("p1 = ") + p1 + " Watts");
  117.   Serial.print(String("i2 = ") + I2 + " A");
  118.   Serial.print(String("p2 = ") + p2 + " Watts");
  119.   Serial.print(String("i3 = ") + I3 + " A");
  120.   Serial.println(String("p3 = ") + p3 + " Watts");
  121.   delay(50);
  122.  
  123.  
  124.   delay(2000);
  125. }
  126.  
  127. //SENSOR ARUS 1
  128. float getVPP() {
  129.   float result;
  130.   int readValue;
  131.   int maxValue = 0;
  132.   int minValue = 1024;
  133.   uint32_t start_time = millis();
  134.   while ((millis() - start_time) < 1000) {
  135.     readValue = analogRead(sensorIn);
  136.     if (readValue > maxValue) {
  137.       maxValue = readValue;
  138.     }
  139.     if (readValue < minValue) {
  140.       minValue = readValue;
  141.     }
  142.   }
  143.   result = ((maxValue - minValue) * 5.0) / 1024.0;
  144.   return result;
  145. }
  146. //SENSOR ARUS 2
  147. float getVPP1()
  148. {
  149.   float result;
  150.   int readValue; //value read from the sensor
  151.   int maxValue = 0; // store max value here
  152.   int minValue = 1024; // store min value here
  153.   uint32_t start_time = millis();
  154.   while ((millis() - start_time) < 1000) //sample for 1 Sec
  155.   {
  156.     readValue = analogRead(sensorIn1);
  157.     // see if you have a new maxValue
  158.     if (readValue > maxValue)
  159.     {
  160.       /*record the maximum sensor value*/
  161.       maxValue = readValue;
  162.     }
  163.     if (readValue < minValue)
  164.     {
  165.       /*record the maximum sensor value*/
  166.       minValue = readValue;
  167.     }
  168.   }
  169.   // Subtract min from max
  170.   result = ((maxValue - minValue) * 5.0) / 1024.0;
  171.   return result;
  172. }
  173. //SENSOR ARUS 3
  174. float getVPP2()
  175. {
  176.   float result;
  177.   int readValue; //value read from the sensor
  178.   int maxValue = 0; // store max value here
  179.   int minValue = 1024; // store min value here
  180.   uint32_t start_time = millis();
  181.   while ((millis() - start_time) < 1000) //sample for 1 Sec
  182.   {
  183.     readValue = analogRead(sensorIn2);
  184.     // see if you have a new maxValue
  185.     if (readValue > maxValue)
  186.     {
  187.       /*record the maximum sensor value*/
  188.       maxValue = readValue;
  189.     }
  190.     if (readValue < minValue)
  191.     {
  192.       /*record the maximum sensor value*/
  193.       minValue = readValue;
  194.     }
  195.   }
  196.   // Subtract min from max
  197.   result = ((maxValue - minValue) * 5.0) / 1024.0;
  198.   return result;
  199. }
  200. float getVPPvolt()
  201. {
  202.   float result;
  203.   int readValue; //value read from the sensor
  204.   int maxValue = 0; // store max value here
  205.   int minValue = 1024; // store min value here
  206.   uint32_t start_time = millis();
  207.   while ((millis() - start_time) < 50) //sample for 1 Sec
  208.   {
  209.     readValue = analogRead(A0);
  210.     // see if you have a new maxValue
  211.     if (readValue > maxValue)
  212.     {
  213.       /*record the maximum sensor value*/
  214.       maxValue = readValue;
  215.     }
  216.     if (readValue < minValue)
  217.     {
  218.       /*record the maximum sensor value*/
  219.       minValue = readValue;
  220.     }
  221.   }
  222.   // Subtract min from max
  223.   result = ((maxValue - minValue) * 5.0) / 1024.0;
  224.   return result;
  225. }
  226.  
  227. void getVOLT()
  228. {
  229.   Volt = getVPPvolt();
  230.   VRMSvolt = (Volt / 2.0) * 0.707 * 489;
  231.   if (VRMSvolt < 50) {
  232.     VRMSvolt = 0;
  233.   }
  234.   Blynk.virtualWrite(V4, float(VRMSvolt));
  235. }
  236.  
  237. // TARIK ARUS 1
  238. void getACS712()
  239. {
  240.   Voltage = getVPP();
  241.   VRMS = (Voltage / 2.0) * 0.707;
  242.   AmpsRMS = (VRMS * 1000) / mVperAmp;
  243.   I = AmpsRMS - 0.50;
  244.   p1 = I * VRMSvolt * 0.85;
  245.   if (p1 < 0) {
  246.     p1 = 0;
  247.   }
  248.  
  249.   Blynk.virtualWrite(V3, float(I));
  250.   Blynk.virtualWrite(V9, float(p1));
  251.  
  252. }
  253. // TARIK ARUS 2
  254. void getACS712B()
  255. {
  256.   Voltage2 = getVPP1();
  257.   VRMS2 = (Voltage2 / 2.0) * 0.707;
  258.   AmpsRMS2 = (VRMS2 * 1000) / mVperAmp;
  259.   I2 = AmpsRMS2 - 0.53;
  260.   p2 = I2 * VRMSvolt * 0.85;
  261.   if (p2 < 0)  {
  262.     p2 = 0;
  263.   }
  264.   Blynk.virtualWrite(V5, float(I2));
  265.   Blynk.virtualWrite(V8, float(p2));
  266.  
  267.  
  268. }
  269. // TARIK ARUS 3
  270. void getACS712C()
  271. {
  272.   Voltage3 = getVPP2();
  273.   VRMS3 = (Voltage3 / 2.0) * 0.707;
  274.   AmpsRMS3 = (VRMS3 * 1000) / mVperAmp;
  275.   I3 = AmpsRMS3 - 0.57;
  276.   p3 = I3 * VRMSvolt * 0.85;
  277.   if (p3 < 0)  {
  278.     p3 = 0;
  279.   }
  280.   Blynk.virtualWrite(V6, float(I3));
  281.   Blynk.virtualWrite(V7, float(p3));
  282. }
  283.  
  284. bool isLargerThan(double first, double second) {
  285.   return first > second;
  286. }
  287.  
  288. void sortArray(double array[][2], size_t arraySize) {
  289.   for (size_t i = 1; i < arraySize; i++) {
  290.     for (size_t j = i; j > 0 && (isLargerThan(array[j - 1][0], array[j][0])); j--) {
  291.       double tmp0 = array[j - 1][0];
  292.       double tmp1 = array[j - 1][1];
  293.       array[j - 1][0] = array[j][0];
  294.       array[j - 1][1] = array[j][1];
  295.       array[j][0] = tmp0;
  296.       array[j][1] = tmp1;
  297.     }
  298.   }
  299. }
  300.  
  301. uint8_t* getRelayOrder() {
  302.   static uint8_t relay[3];
  303.   double arrayList[3][2] = {{p1, relay1}, {p2, relay2}, {p3, relay3}};
  304.   sortArray(arrayList, 3);
  305.   for (int i = 0; i < 3; i++) relay[i] = arrayList[i][1];
  306.   return relay;
  307. }
  308.  
  309. void checkRelay() {
  310.   uint8_t *relayPointer = getRelayOrder();
  311.   if (VRMSvolt <= 200) {
  312.     if (status == 1) {
  313.       Blynk.run();
  314.       digitalWrite(relay1, HIGH);
  315.       digitalWrite(relay2, HIGH);
  316.       digitalWrite(relay3, HIGH);
  317.       status = 0;
  318.     }
  319.   } else {
  320.     if (status == 0) {
  321.       Blynk.run();
  322.       digitalWrite(*relayPointer, LOW);
  323.       delay(3000);
  324.       digitalWrite(*relayPointer + sizeof(uint8_t), LOW);
  325.       delay(3000);
  326.       digitalWrite(*relayPointer + 2 * sizeof(uint8_t), LOW);
  327.       delay(3000);
  328.       status = 1;
  329.     }
  330.   }
  331. }
  332.  
Add Comment
Please, Sign In to add comment