// Created by: Selvi Ferawati XII TKJ 1
// Kendali Kecepatan Motor Stepper & Arah Putaran Motor Stepper dengan ESP32
// Cara Kerja:
// Motor stepper akan berputar saat kita mengaktifkan slide potensiometer (geser tuas ke kanan).
// Motor stepper akan berhenti berputar ketika slide potensiometer dimatikan (geser tuas ke kiri).
// Kita bisa mengatur kecepatan rotasi motor stepper dengan menggeser slide Potensio Meter (kecepatan akan terlihat dibawah skema).
// Motor Stepper dapat berputar sesuai dengan arah tombol yang di tekan.
// Motor Stepper ini memiliki 200 langkah untuk satu putaran penuh. Kita menggunakan library Stepper untuk mengendalikan gerakan motor.
#include <Stepper.h>
int jumlah_step = 200; // jumlah step untuk satu putaran penuh
Stepper selvi(jumlah_step, 12, 14, 27, 26); // objek stepper
// inisialisasi pin saklar dan potensiometer
int tombol_CW = 33; // saklar putar kanan
int tombol_CCW = 25; // saklar putar kiri
int pinPot = 34; // pin potensiometer
// variabel untuk menyimpan status putaran
bool isCW = false; // status putaran ke kanan
bool isCCW = false; // status putaran ke kiri
void setup() {
pinMode(tombol_CW, INPUT_PULLUP);
pinMode(tombol_CCW, INPUT_PULLUP);
Serial.begin(9600); // buka port komunikasi serial
}
void loop() {
int val_pot = analogRead(pinPot); // baca potensiometer
int RPM = map(val_pot, 0, 4095, 0, 200); // petakan pembacaan potensiometer kedlm RPM 0 s.d 200
Serial.print("Kecepatan RPM = ");
Serial.print(RPM); // cetak nilai RPM di serial monitor
Serial.println();
// cek penekanan saklar
int val_CW = digitalRead(tombol_CW);
int val_CCW = digitalRead(tombol_CCW);
// logika untuk mengatur arah putaran
if (val_CW == LOW) {
isCW = true; // set putaran ke kanan
isCCW = false; // set putaran ke kiri menjadi false
}
else if (val_CCW == LOW) {
isCCW = true; // set putaran ke kiri
isCW = false; // set putaran ke kanan menjadi false
}
// putar motor secara otomatis jika salah satu tombol ditekan
if (isCW && RPM > 1) {
selvi.setSpeed(RPM);
selvi.step(1); // putaran ke kanan
delay(10);
}
else if (isCCW && RPM > 1) {
selvi.setSpeed(RPM);
selvi.step(-1); // putaran ke kiri
delay(10);
}
}