#define BLYNK_TEMPLATE_ID "TMPL6hAUq6Xrd"
#define BLYNK_TEMPLATE_NAME "fpIoT"
#define BLYNK_AUTH_TOKEN "iZkovWksbBbgGDGLYmVd4l2Qk2SxchjZ"
#include <DHT.h>
#include <BlynkSimpleEsp32.h>
#define DHTTYPE DHT22 // Deklarasi Type Sensor DHT yang digunakan
#define DHTPIN 27
DHT dht(DHTPIN, DHTTYPE);
// Deklarasi pin Input Yang Digunakan
const int potPPM = 12; // Pin Analog Untuk Membaca Nilai Potensio PPM
const int potPH = 13; // Pin Analog Untuk Membaca Nilai Potensio PH
int ldrPin = 14; // Pin Analog Sensor LDR
//Deklarasi Pin Output Yang Digunakan
const int PH = 26; // Pin digital untuk mengontrol Motor PH Pump
const int Fan = 25; // Pin digital untuk mengontrol Kipas
const int LED = 33; // Pin digital untuk mengontrol LED
const int Sprayer = 32; // Pin digital untuk mengontrol Sprayer
const int Motor_PUMP = 17; // Pin digital untuk mengontrol Motor Pump Utama
const int NutA = 15; // Pin digital untuk mengontrol Motor Nutrisi A
const int NutB = 4; // Pin digital untuk mengontrol Motor Nutrisi B
const int Camp = 2; // Pin digital untuk mengontrol Motor Pencampur
const int Exhaust = 16; // Pin digital untuk mengontrol Exhaust
char auth[] = "iZkovWksbBbgGDGLYmVd4l2Qk2SxchjZ";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
void setup() {
// Set pin motor sebagai output
pinMode(PH, OUTPUT);
pinMode(Fan, OUTPUT);
pinMode(NutA, OUTPUT);
pinMode(NutB, OUTPUT);
pinMode(Motor_PUMP, OUTPUT);
pinMode(Camp, OUTPUT);
pinMode(Sprayer, OUTPUT);
pinMode(LED, OUTPUT);
pinMode(Exhaust, OUTPUT);
Serial.begin(9600); // Inisialisasi komunikasi serial
dht.begin(); // Inisialisasi sensor DHT
//Kondisi Awal
digitalWrite(NutA, LOW);
digitalWrite(NutB, LOW);
digitalWrite(Camp, LOW);
digitalWrite(PH, LOW);
digitalWrite(LED, LOW);
digitalWrite(Fan, LOW);
digitalWrite(Sprayer, LOW);
digitalWrite(Exhaust,LOW);
digitalWrite(Motor_PUMP, HIGH);
Blynk.begin(auth, ssid, pass);
}
void loop() {
//==================================NUTRISI===================================
int PPMValue = analogRead(potPPM); // Membaca nilai potensio (0-1023)
int motorPPM = map(PPMValue, 0, 1023,0, 4); // Memetakan nilai motor PPM
Serial.print("PPM: ");
Serial.println(PPMValue); //Menampilkan nilai PPM
analogWrite(NutA, motorPPM); // Input Analog dari potensio untuk Nutrisi A
analogWrite(NutB, motorPPM); // Input Analog dari potensio untuk Nutrisi B
analogWrite(Camp, motorPPM); // Input Analog dari potensio untuk Motor pencampur
// Jika nilai potensio melebihi ambang tertentu, matikan motor
if (PPMValue < 800) {
digitalWrite(NutA, HIGH); // Menghidupkan Nutrisi A jika PPM kurang dari 800
digitalWrite(NutB, HIGH); // Menghidupkan Nutrisi B jika PPM kurang dari 800
digitalWrite(Camp, HIGH); // Menghidupkan Motor Campur jika Nutrisi A dan B Masuk
}
else {
digitalWrite(NutA, LOW); // Mematikan Nutrisi A jika PPM lebih dari 800
digitalWrite(NutB, LOW); // Mematikan Nutrisi B jika PPM Lebih dari 800
digitalWrite(Camp, LOW); // Matikan Motor Campur jika Nutrisi A dan B Terpenuhi
}
//=================================NILAI PH===================================
int PHValue = analogRead(potPH); // Membaca nilai potensio (0-1023)
int motorPH = map(PHValue, 0, 1023, 0, 255); // Memetakan nilai motor PH
Serial.print("PH: ");
Serial.println(PHValue); //Menampilkan nilai PH
analogWrite(PH, motorPH); // Input Analog dari potensio untuk Motor PH
if (PHValue > 150){
digitalWrite(PH, HIGH); // Menghidupkan Motor PH jika PH Lebih dari 150
}
else{
digitalWrite(PH, LOW); // Mematikan Motor PH jika PH sudah mencapai setting
}
//===================================DHT22====================================
float humidity = dht.readHumidity(); // Membaca kelembaban udara (0-100%)
float temperature = dht.readTemperature(); // Membaca suhu dalam Celcius
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca data dari sensor DHT!");
} else {
Serial.println("====================================================");
Serial.print("Suhu: ");
Serial.print(temperature); // Menampilkan nilai Suhu
Serial.println(" °C");
Serial.print("Kelembaban: ");
Serial.print(humidity); // Menampilkan nilai Kelembaban
Serial.println("%");
}
//===================================SUHU=====================================
if (temperature < 25){
digitalWrite(Fan, LOW); // Mematikan Kipas jika Suhu kurang dari 25 °C
}
else {
digitalWrite(Fan, HIGH); // Menghidupkan Kipas jika Suhu lebih dari 25 °C
}
//================================KELEMBABAN==================================
if (humidity < 20){
digitalWrite(Sprayer, LOW); // Mematikan Sprayer jika Kelembaban kurang dari 20 %
}
else {
digitalWrite(Sprayer, HIGH); // Menghidupkan Sprayer jika kelembaban lebih dari 20 %
}
//============================INTENSITAS LDR==================================
int ldrValue = analogRead(ldrPin); // Baca nilai analog dari LDR
int brightness = map(ldrValue, 0, 1023, 0, 255); // Mapping nilai LDR ke nilai kecerahan LED
float voltage =ldrValue * (5.0/1023.0); // Membaca nilai LDR sebagai Tegangan
Serial.print("LDR Voltage: ");
Serial.println(voltage); // Menampilakan Nilai Tegangan
analogWrite(LED, brightness); // Atur kecerahan LED sesuai nilai yang didapat dari LDR
Serial.print("LDR Value: ");
Serial.println(ldrValue); // Menampilkan Nilai LDR
Serial.print("Brightness: ");
Serial.println(brightness); // Menampilkan Kecerahan yang dihasilkan
analogWrite(LED, brightness);
//================================Exhaust====================================
if (temperature > 25 && humidity < 20 ){
digitalWrite(Exhaust, HIGH);
}
else{
digitalWrite(Exhaust,LOW);
}
delay(100); // Delay untuk stabilisasi pembacaan program
//mengirim data ke blynk
// Blynk.virtualWrite(V0, temperature);
// Blynk.virtualWrite(V1, humidity);
// Blynk.virtualWrite(V2, motorPH);
// Blynk.virtualWrite(V3, motorPPM);
Blynk.run();
}