#define BLYNK_TEMPLATE_ID "TMPL6TFZ4fY0t"
#define BLYNK_TEMPLATE_NAME "Jobsheet3"
#define BLYNK_AUTH_TOKEN "Pw5B4j8n3xZAt5AGjB6_XpnsFol5E9tw"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#define TRIG_PIN 12
#define ECHO_PIN 13
#define RELAY_PIN 5
#define FAN_PIN 14 // GPIO untuk kipas
#define DHT_PIN 18 // GPIO untuk sensor suhu
#define DHTTYPE DHT11
DHT dht(DHT_PIN, DHTTYPE);
char auth[] = "Pw5B4j8n3xZAt5AGjB6_XpnsFol5E9tw";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
bool lampOn = false; // Status lampu
bool fanOn = false; // Status kipas
void setup() {
Serial.begin(115200);
// Menghubungkan ke WiFi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
// Menghubungkan ke Blynk
Blynk.begin(auth, ssid, pass);
// Mengatur pin
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(FAN_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
digitalWrite(FAN_PIN, LOW);
dht.begin(); // Inisialisasi sensor suhu DHT
// Mengatur timer untuk cek sensor setiap detik
timer.setInterval(1000L, checkDistance);
}
void checkDistance() {
// Mengirim sinyal trigger
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(4);
digitalWrite(TRIG_PIN, LOW);
// Membaca sinyal echo
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Atur lampu berdasarkan jarak
if (distance < 10) { // Menyalakan lampu jika jarak < 10 cm
if (!lampOn) { // Cek jika status lampu berubah
Serial.println("Lampu Hidup");
lampOn = true;
}
digitalWrite(RELAY_PIN, HIGH);
Blynk.virtualWrite(V1, 1); // Menampilkan status di Blynk
} else {
if (lampOn) { // Cek jika status lampu berubah
Serial.println("Lampu Mati");
lampOn = false;
}
digitalWrite(RELAY_PIN, LOW);
Blynk.virtualWrite(V1, 0); // Menampilkan status di Blynk
digitalWrite(FAN_PIN, LOW); // Matikan kipas jika lampu mati
fanOn = false;
}
// Jika lampu menyala, baca suhu
if (lampOn) {
float temperature = dht.readTemperature(); // Membaca suhu
if (isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
Blynk.virtualWrite(V0, temperature); // Menampilkan suhu di Blynk
// Atur kipas berdasarkan suhu
if (temperature > 30) { // Nyalakan kipas jika suhu > 30°C
if (!fanOn) { // Cek jika status kipas berubah
Serial.println("Kipas Hidup");
fanOn = true;
}
digitalWrite(FAN_PIN, HIGH);
Blynk.virtualWrite(V3, 1); // Menampilkan status kipas di Blynk
} else {
if (fanOn) { // Cek jika status kipas berubah
Serial.println("Kipas Mati");
fanOn = false;
}
digitalWrite(FAN_PIN, LOW);
Blynk.virtualWrite(V3, 0); // Menampilkan status kipas di Blynk
}
}
}
void loop() {
Blynk.run();
timer.run();
}