//cara kerja
//jika jarak dibawah 50cm maka motor stepper akan berputar
//dan jika jarak di atas 50cm maka motor stepper akan berhenti
#define BLYNK_TEMPLATE_ID "TMPL6sAkYiN0U"
#define BLYNK_TEMPLATE_NAME "sonic"
#define BLYNK_AUTH_TOKEN "FCOtCJWpeYXJXe_TGG8MzpXn-uR3ObW7"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <AccelStepper.h>
// Pin untuk sensor ultrasonik
#define TRIG_PIN 12
#define ECHO_PIN 13
// Pin untuk buzzer dan LED
#define BUZZER_PIN 14
#define LED_BUZZER_PIN 15
#define LED_NORMAL_PIN 2
#define RED_LED_PIN 27
#define GREEN_LED_PIN 14
// Konfigurasi motor stepper
AccelStepper stepper(AccelStepper::FULL4WIRE, 26, 25, 33, 32); // Pin untuk motor stepper
// Timer untuk Blynk
BlynkTimer timer;
// Fungsi untuk membaca jarak dari sensor ultrasonik
long readUltrasonicDistance() {
// Men-trigger sensor
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Membaca durasi pantulan dari sensor
long duration = pulseIn(ECHO_PIN, HIGH);
// Menghitung jarak dalam cm
long distance = duration * 0.034 / 2;
return distance;
}
void checkDistance() {
// Membaca jarak dari sensor ultrasonik
long distance = readUltrasonicDistance();
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
// Kirim jarak ke Blynk (Virtual Pin V1)
Blynk.virtualWrite(V1, distance);
// Jika jarak kurang dari 50 cm
if (distance < 50) {
digitalWrite(BUZZER_PIN, HIGH); // Buzzer menyala
digitalWrite(LED_BUZZER_PIN, HIGH); // LED buzzer menyala
digitalWrite(LED_NORMAL_PIN, LOW); // Matikan LED normal
digitalWrite(RED_LED_PIN, HIGH); // LED merah menyala
digitalWrite(GREEN_LED_PIN, LOW); // Matikan LED hijau
// Gerakkan motor stepper
stepper.moveTo(2048); // Bergerak satu putaran penuh
stepper.run();
// Kirim notifikasi ke Blynk
Blynk.virtualWrite(V2, "Mobil sudah dekat dengan dinding\n");
}
// Jika jarak lebih dari 50 cm
else {
digitalWrite(BUZZER_PIN, LOW); // Buzzer mati
digitalWrite(LED_BUZZER_PIN, LOW); // LED buzzer mati
digitalWrite(LED_NORMAL_PIN, HIGH); // LED normal menyala
digitalWrite(RED_LED_PIN, LOW); // LED merah mati
digitalWrite(GREEN_LED_PIN, HIGH); // LED hijau menyala
// Hentikan motor stepper
stepper.stop();
// Kirim notifikasi ke Blynk
Blynk.virtualWrite(V2, "Mobil masih bisa mundur\n");
}
}
void setup() {
// Inisialisasi pin I/O
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_BUZZER_PIN, OUTPUT);
pinMode(LED_NORMAL_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
// Inisialisasi Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, "Wokwi-GUEST", "");
// Inisialisasi motor stepper
stepper.setMaxSpeed(1000); // Kecepatan maksimum
stepper.setAcceleration(500); // Akselerasi
// Set timer untuk membaca jarak setiap 1 detik
timer.setInterval(1000L, checkDistance);
}
void loop() {
Blynk.run(); // Jalankan Blynk
timer.run(); // Jalankan timer
stepper.run(); // Jalankan motor stepper
}