#define BLYNK_TEMPLATE_ID "TMPL6hAUq6Xrd"
#define BLYNK_TEMPLATE_NAME "fpIoT"
#define BLYNK_AUTH_TOKEN "iZkovWksbBbgGDGLYmVd4l2Qk2SxchjZ"
#define BLYNK_PRINT Serial
#define DHTTYPE DHT22 // Deklarasi Type Sensor DHT yang digunakan
#define DHTPIN 27
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
char auth[]= BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
// Deklarasi pin Input Yang Digunakan
#define DHTPIN 27 // Pin Digital Sensor DHT22
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 Camp = 2; // Pin digital untuk mengontrol Motor Pencampur
const int Exhaust = 16; // Pin digital untuk mengontrol Exhaust
void setup() {
// Set pin motor sebagai output
pinMode(PH, OUTPUT);
pinMode(Fan, OUTPUT);
pinMode(NutA, 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(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, 255); // Memetakan nilai motor PPM
Blynk.virtualWrite(V2, PPMValue)
analogWrite(NutA, motorPPM); // Input Analog dari potensio untuk Nutrisi A
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(Camp, HIGH); // Menghidupkan Motor Campur jika Nutrisi A dan B Masuk
}
else {
digitalWrite(NutA, LOW); // Mematikan Nutrisi A 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
Blynk.virtualWrite(V3, PHValue);
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
Blynk.virtualWrite(V0, temperature); //mengirim data ke blynk
Blynk.virtualWrite(V1, humidity);
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Gagal membaca data dari sensor DHT!");
}
//===================================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
`
Blynk.virtualWrite(V4, brightness)
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
Blynk.run();
timer.run();
}