mari kita modifikasi program untuk memberikan kontrol kecepatan yang lebih dinamis pada stepper motor NEMA 17 menggunakan driver L298N.
Untuk kontrol kecepatan yang dinamis, kita bisa menggunakan input dari potensiometer (variable resistor). Potensiometer akan membaca nilai analog yang kemudian kita gunakan untuk mengatur nilai stepDelay
.
Program Arduino untuk Stepper Motor dengan Kontrol Kecepatan Dinamis (L298N)
Program ini akan memungkinkan Anda mengontrol kecepatan putaran motor stepper menggunakan potensiometer.
Komponen Tambahan yang Dibutuhkan:
Potensiometer (10k ohm disarankan)
Skema Pengkabelan Tambahan:
Satu kaki luar potensiometer ke 5V Arduino.
Kaki tengah (wiper) potensiometer ke Analog Pin Arduino (misalnya pin A0).
Kaki luar potensiometer yang lain ke GND Arduino.
// Mendefinisikan pin yang terhubung ke driver L298N
const int IN1 = 8;
const int IN2 = 9;
const int IN3 = 10;
const int IN4 = 11;
// Pin untuk potensiometer
const int potPin = A0; // Pin analog untuk membaca potensiometer
// Jumlah langkah per putaran penuh motor Anda.
// NEMA 17 umumnya 200 langkah per putaran (1.8 derajat per langkah).
const int stepsPerRevolution = 200;
// Urutan langkah untuk stepper motor bipolar (Full Step Drive)
// Ini adalah urutan aktivasi koil untuk membuat motor bergerak maju satu langkah
// {IN1, IN2, IN3, IN4}
int stepSequence[4][4] = {
{1, 0, 1, 0}, // Step 1: Koil A aktif, Koil B aktif
{0, 1, 1, 0}, // Step 2: Koil A terbalik, Koil B aktif
{0, 1, 0, 1}, // Step 3: Koil A terbalik, Koil B terbalik
{1, 0, 0, 1} // Step 4: Koil A aktif, Koil B terbalik
};
void setup() {
// Mengatur semua pin L298N sebagai OUTPUT
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// Tidak perlu pinMode untuk pin analog A0
// Mulai komunikasi serial untuk debugging
Serial.begin(9600);
Serial.println("Stepper Motor with Dynamic Speed Control (L298N) Started");
}
void loop() {
// Membaca nilai dari potensiometer (0-1023)
int potValue = analogRead(potPin);
// Mengubah nilai potensiometer (0-1023) menjadi rentang delay yang sesuai
// Kita ingin nilai potensiometer yang besar menghasilkan delay kecil (cepat)
// dan nilai potensiometer yang kecil menghasilkan delay besar (lambat).
// Misalnya, dari 100 mikrodetik (cepat) hingga 5000 mikrodetik (lambat).
// map(value, fromLow, fromHigh, toLow, toHigh)
int currentStepDelay = map(potValue, 0, 1023, 5000, 100); // Semakin besar potValue, semakin kecil delay
// --- Putar searah jarum jam ---
Serial.print("Rotating Clockwise with Delay: ");
Serial.print(currentStepDelay);
Serial.println(" us");
for (int i = 0; i < stepsPerRevolution; i++) {
int sequenceIndex = i % 4;
digitalWrite(IN1, stepSequence[sequenceIndex][0]);
digitalWrite(IN2, stepSequence[sequenceIndex][1]);
digitalWrite(IN3, stepSequence[sequenceIndex][2]);
digitalWrite(IN4, stepSequence[sequenceIndex][3]);
delayMicroseconds(currentStepDelay); // Menggunakan delay yang dinamis
}
delay(500); // Jeda singkat setelah satu putaran
// --- Putar berlawanan arah jarum jam ---
Serial.print("Rotating Counter-Clockwise with Delay: ");
Serial.print(currentStepDelay);
Serial.println(" us");
for (int i = 0; i < stepsPerRevolution; i++) {
int sequenceIndex = (4 - 1 - (i % 4)) % 4;
digitalWrite(IN1, stepSequence[sequenceIndex][0]);
digitalWrite(IN2, stepSequence[sequenceIndex][1]);
digitalWrite(IN3, stepSequence[sequenceIndex][2]);
digitalWrite(IN4, stepSequence[sequenceIndex][3]);
delayMicroseconds(currentStepDelay); // Menggunakan delay yang dinamis
}
delay(1000); // Jeda lebih lama sebelum mengulang siklus
}
Penjelasan Perubahan:
const int potPin = A0;
: Mendefinisikan pin analog A0 untuk membaca nilai dari potensiometer.Membaca Potensiometer:
int potValue = analogRead(potPin);
: Baris ini membaca nilai tegangan dari kaki tengah potensiometer. Nilai yang dibaca akan berada dalam rentang 0 hingga 1023.
Memetakan Nilai untuk
stepDelay
:int currentStepDelay = map(potValue, 0, 1023, 5000, 100);
Fungsi
map()
adalah fungsi yang sangat berguna di Arduino. Fungsi ini akan mengubah nilaipotValue
(dari rentang 0-1023) ke dalam rentang baru (dari 5000 hingga 100).Mengapa dibalik? Kita ingin ketika nilai potensiometer tinggi (misalnya 1023),
stepDelay
menjadi kecil (misalnya 100 mikrodetik), yang berarti motor akan berputar cepat. Sebaliknya, ketika nilai potensiometer rendah (misalnya 0),stepDelay
akan menjadi besar (misalnya 5000 mikrodetik), yang berarti motor akan berputar lambat. Anda bisa menyesuaikan rentang5000, 100
sesuai dengan kecepatan minimum dan maksimum yang Anda inginkan.
Menggunakan
currentStepDelay
:Di dalam loop
for
yang menggerakkan motor,delayMicroseconds()
sekarang menggunakan variabelcurrentStepDelay
yang nilainya dinamis berdasarkan potensiometer.
Cara Menggunakan:
Hubungkan Komponen: Pastikan Anda telah menghubungkan stepper motor ke driver L298N dan power supply eksternal seperti sebelumnya.
Tambahkan Potensiometer: Hubungkan potensiometer sesuai skema pengkabelan yang dijelaskan di atas (salah satu kaki luar ke 5V, kaki tengah ke A0, kaki luar lainnya ke GND).
Salin dan Unggah Kode:
Salin seluruh kode di atas dan tempelkan ke Arduino IDE.
Pilih Tools > Board dan Tools > Port yang benar.
Klik tombol Upload.
Uji Coba: Setelah program terunggah, putar potensiometer. Anda akan melihat kecepatan putaran stepper motor berubah sesuai dengan posisi potensiometer. Anda juga bisa membuka Serial Monitor di Arduino IDE untuk melihat nilai
currentStepDelay
yang sedang digunakan.
Komentar
Posting Komentar