#define BLYNK_TEMPLATE_ID "TMPL6qJym6TlR"
#define BLYNK_TEMPLATE_NAME "Mini project JB 4 IOT"
#define BLYNK_AUTH_TOKEN "RM0u0256T3gev3eJQn9aYU729w1TwuD4"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
// Konfigurasi untuk sensor Ultrasonik, LED, dan LDR
#define TRIG_PIN 12
#define ECHO_PIN 13
#define RED_LED_PIN 27
#define GREEN_LED_PIN 14
#define LDR_PIN 34
#define LED_PIN 2
// Konfigurasi untuk DHT22 dan LED AC
#define DHTPIN 4
#define DHTTYPE DHT22
#define AC_Relay 5
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
bool acStatus = false;
unsigned long previousMillis = 0;
const long interval = 500;
void checkDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.0343 / 2;
Blynk.virtualWrite(V1, distance);
if (distance <= 50.0) {
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
Blynk.virtualWrite(V2, "Mobil sudah dekat dengan dinding\n");
} else {
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(GREEN_LED_PIN, HIGH);
Blynk.virtualWrite(V2, "Mobil masih bisa mundur\n");
}
}
void readLDR() {
int ldrValue = analogRead(LDR_PIN);
int normalizedLDR = map(ldrValue, 0, 4095, 0, 100);
Blynk.virtualWrite(V3, normalizedLDR);
Serial.print("Nilai LDR: ");
Serial.println(String(normalizedLDR) + " %");
}
BLYNK_WRITE(V4) {
int pinValue = param.asInt();
analogWrite(LED_PIN, pinValue);
}
void updateDHTSensor() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
int humidity = dht.readHumidity();
int temperature = dht.readTemperature();
Blynk.virtualWrite(V6, humidity);
Blynk.virtualWrite(V7, temperature);
Serial.println("Suhu Ruangan: " + String(temperature) + " °C");
Serial.println("Kelembaban Ruangan: " + String(humidity) + " %");
}
}
BLYNK_WRITE(V5) {
acStatus = param.asInt();
digitalWrite(AC_Relay, acStatus ? HIGH : LOW);
Serial.print("AC Status: ");
Serial.println(acStatus ? "Hidup" : "Mati");
}
void setup() {
// Konfigurasi pin untuk ultrasonic, LED, dan LDR
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(LDR_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
// Konfigurasi pin untuk DHT22 dan LED AC
dht.begin();
pinMode(AC_Relay, OUTPUT);
digitalWrite(AC_Relay, acStatus ? HIGH : LOW);
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, checkDistance);
timer.setInterval(1000L, readLDR);
}
void loop() {
Blynk.run();
timer.run();
updateDHTSensor();
}