#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6fb5vvgUh"
#define BLYNK_TEMPLATE_NAME "Sistem Pembersih dan Pendingin Panel Surya"
#define BLYNK_AUTH_TOKEN "YmL_ph4-yQD1-kO7lyzUbHKFv2_GJM3N"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>;
#define DHTPIN 15 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
const float GAMMA = 0.7;
const float RL10 = 50;
#define relay1 23 // lAMPU 1
#define relay2 22 // LAMPU 2
#define relay3 21 // STOP KONTAK 1
#define relay4 19 // STOP KONTAK 2
#define pembersih_cw 5 // PEMBERSIH CW
#define pembersih_ccw 4 // PEMBERSIH CCW
#define pendinginan 2 // PENDINGIN
#define limit_cw 12
#define limit_ccw 32
float temp;
int data;
int data1;
int data2;
int data3;
int data4;
float arus;
/*
String a;
String b;
String c;
String d;*/
int tegangan;
int data_tegangan;
int cahaya;
float voltage;
float resistance;
float lux;
BLYNK_WRITE(V4)
{
data = param.asInt();
if(data == 1){
digitalWrite (relay1, HIGH);
}
else{
digitalWrite (relay1, LOW);
}
}
BLYNK_WRITE(V5)
{
data1 = param.asInt();
if(data1 == 1){
digitalWrite (relay2, HIGH);
}
else{
digitalWrite (relay2, LOW);
}
}
BLYNK_WRITE(V6)
{
data2 = param.asInt();
if(data2 == 1){
digitalWrite (relay3, HIGH);
}
else{
digitalWrite (relay3, LOW);
}
}
BLYNK_WRITE(V7)
{
data3 = param.asInt();
if(data3 == 1){
digitalWrite (relay4, HIGH);
}
else{
digitalWrite (relay4, LOW);
}
}
void setup() {
Serial.begin(115200);
// put your setup code here, to run once:
pinMode (relay1, OUTPUT);
pinMode (relay2, OUTPUT);
pinMode (relay3, OUTPUT);
pinMode (relay4, OUTPUT);
pinMode (pembersih_cw, OUTPUT);
pinMode (pembersih_ccw, OUTPUT);
pinMode (pendinginan, OUTPUT);
pinMode (limit_cw, INPUT);
pinMode (limit_ccw, INPUT);
Blynk.virtualWrite(V4, 0);
Blynk.virtualWrite(V5, 0);
Blynk.virtualWrite(V6, 0);
Blynk.virtualWrite(V7, 0);
digitalWrite (relay1, LOW);
digitalWrite (relay2, LOW);
digitalWrite (relay3, LOW);
digitalWrite (relay4, LOW);
digitalWrite (pembersih_cw, LOW);
digitalWrite (pembersih_ccw, LOW);
digitalWrite (pendinginan, LOW);
dht.begin();
Blynk.begin(auth, ssid, pass);
}
void loop() {
tegangan = analogRead (36);
int analogValue = analogRead (34);
data_tegangan = map (tegangan, 0, 1023, 0, 50);
Serial.println("Tegangan : "+ String(data_tegangan));
if (data_tegangan < 15 ){
// Bagian Pembacaan sensor LDR
voltage = float(analogValue) / 4095.0 * 5.0;
resistance = 2000.0 * voltage / (1.0 - voltage / 5.0);
lux = pow(RL10 * 1e3 * pow(10.0, GAMMA) / resistance, (1.0 / GAMMA));
if (lux > 400){
Serial.println("Cahaya : "+ String(lux));
temp = dht.readTemperature();
Serial.println("Temp: " + String(temp) + "°C");
if (temp >= 50){
digitalWrite (pendinginan, HIGH); // Pendinginan Panel
digitalWrite (pembersih_ccw, LOW);
digitalWrite (pembersih_cw, LOW);
Blynk.virtualWrite(V3, "Panel Cooling Process");
Blynk.logEvent("cooling_panel_process");
delay(100);
}
else{
Serial.println("Pembersihan Panel");
Blynk.virtualWrite(V3, "Panel Cleaning Process");
Blynk.logEvent("panel_cleaning_process");
digitalWrite (pendinginan, LOW);
int val = digitalRead (limit_cw);
delay(100);
int val1 = digitalRead (limit_ccw);
Serial.println(val);
delay(100);
// Motor CW
if (val == HIGH){
Serial.println("Motor CW ON");
digitalWrite (pembersih_cw, HIGH);
digitalWrite (pembersih_ccw, LOW);
}
// Motor CCW
if (val1 == LOW){
Serial.println("Motor CCW ON");
digitalWrite (pembersih_cw, LOW);
digitalWrite (pembersih_ccw, HIGH);
}
}
}else{
digitalWrite (pembersih_cw, LOW);
digitalWrite (pembersih_ccw, LOW);
digitalWrite (pendinginan, LOW);
Blynk.virtualWrite(V3, "Normal Panel Temperature and Cleanliness");
}
}else{
digitalWrite (pembersih_cw, LOW);
digitalWrite (pembersih_ccw, LOW);
digitalWrite (pendinginan, LOW);
Blynk.virtualWrite(V3, "Normal Panel Temperature and Cleanliness");
}
float nilai_arus = analogRead (33);
arus = map (nilai_arus, 0, 1023, 0, 5);
float power = 220 * arus;
int i = i + power;
float Energy = ((1.0/3600) * i);
Serial.println ("Arus : "+String(arus));
Serial.println ("Energy : "+String(Energy));
Blynk.virtualWrite(V1, data_tegangan);
Blynk.virtualWrite(V0, arus);
Blynk.virtualWrite(V2, "Power : "+String(power)+" watt; " +" Energy : "+String(Energy)+" kWh");
Blynk.run();
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO
relay2:VCC
relay2:GND
relay2:IN
relay2:NC
relay2:COM
relay2:NO
relay3:VCC
relay3:GND
relay3:IN
relay3:NC
relay3:COM
relay3:NO
relay4:VCC
relay4:GND
relay4:IN
relay4:NC
relay4:COM
relay4:NO
vcc1:VCC
gnd1:GND
pot1:VCC
pot1:SIG
pot1:GND
ldr1:VCC
ldr1:GND
ldr1:DO
ldr1:AO
relay5:VCC
relay5:GND
relay5:IN
relay5:NC
relay5:COM
relay5:NO
relay6:VCC
relay6:GND
relay6:IN
relay6:NC
relay6:COM
relay6:NO
relay7:VCC
relay7:GND
relay7:IN
relay7:NC
relay7:COM
relay7:NO
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND
r1:1
r1:2
r2:1
r2:2
sw1:1
sw1:2
sw1:3
sw2:1
sw2:2
sw2:3
pot2:GND
pot2:SIG
pot2:VCC