#define BLYNK_TEMPLATE_ID "TMPL6oOB1DRU1"
#define BLYNK_TEMPLATE_NAME "Menyalakan Lampu LED"
#define BLYNK_AUTH_TOKEN "Ot9TOeXHOuLVimyXa5ge4GfhyV84ABTK"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
// WiFi credentials
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Blynk virtual pin
#define SERVO_VIRTUAL_PIN V1 // Kontrol servo
#define LED_VIRTUAL_PIN V0 // Kontrol LED
// Pin definitions
#define SERVO_PIN 22
#define LED 21 // LED menggunakan pin 18
#define TRIG_PIN 19
#define ECHO_PIN 18
Servo myServo;
BlynkTimer timer;
bool isServoActive = false; // Status servo
int SW_state = 0; // Status LED
void setup() {
Serial.begin(115200);
// Initialize Blynk
Blynk.begin(auth, ssid, pass);
// Setup servo
myServo.attach(SERVO_PIN, 500, 2500);
myServo.write(0); // Posisi awal servo
// Setup LED
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW); // LED mati saat awal
// Setup ultrasonic sensor
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
Serial.println("Setup selesai.");
}
// Fungsi loop
void loop() {
Blynk.run();
timer.run();
// Cek jarak untuk kontrol servo
long distance = getDistance();
if (distance > 0 && distance <= 5 && !isServoActive) {
activateServo();
} else if (distance > 5 && isServoActive) {
deactivateServo();
}
}
// Blynk handler untuk kontrol LED
BLYNK_WRITE(V0) {
SW_state = param.asInt(); // Membaca status tombol dari Blynk
Serial.print("Nilai tombol: ");
Serial.println(SW_state);
if (SW_state == 1) {
digitalWrite(LED, HIGH); // Nyalakan LED
Serial.println("Lampu telah dihidupkan");
} else {
digitalWrite(LED, LOW); // Matikan LED
Serial.println("Lampu telah dimatikan");
}
}
// Fungsi untuk mengaktifkan servo
void activateServo() {
Serial.println("Mengaktifkan servo...");
myServo.write(90); // Posisi servo 90 derajat
isServoActive = true;
}
// Fungsi untuk menonaktifkan servo
void deactivateServo() {
Serial.println("Menonaktifkan servo...");
myServo.write(0); // Posisi servo kembali ke 0
isServoActive = false;
}
// Fungsi untuk membaca jarak dari sensor ultrasonik
long getDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
long distance = duration * 0.034 / 2;
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
return distance;
}