Dalam berbagai aplikasi otomasi dan robotika, sering kali diperlukan mekanisme untuk menghentikan atau mengubah arah pergerakan motor secara otomatis ketika mencapai batas tertentu. Salah satu komponen yang umum digunakan untuk tujuan tersebut adalah limit switch. Limit switch merupakan sakelar mekanis yang akan aktif ketika tuas atau tombolnya mendapatkan tekanan dari objek tertentu. Dengan memanfaatkan limit switch, Arduino dapat mendeteksi posisi akhir suatu mekanisme dan mengambil tindakan yang sesuai, seperti menghentikan motor atau mengubah arah putarannya.
Pada tutorial ini, Anda akan mempelajari tentang cara mengendalikan motor DC menggunakan Arduino, driver motor L298N, dan limit switch. Beberapa skenario yang akan dibahas seperti menghentikan motor DC ketika limit switch ditekan, mengubah arah putaran motor saat limit switch aktif, mengubah arah putaran motor menggunakan dua limit switch, dan mengontrol motor DC menggunakan driver L298N dan Arduino. Tutorial ini sangat cocok untuk diaplikasikan pada proyek seperti pintu otomatis, aktuator linear, conveyor mini, sistem parkir otomatis, dan berbagai sistem mekanis lainnya.
Perangkat Keras yang Dibutuhkan
- Arduino Uno R3
- Kabel USB
- Limit Switch KW12-3
- Limit Switch V-153-1C25
- Limit Switch V-155-1C25
- Limit Switch V-156-1C25
- Motor DC 5V
- Adaptor daya 5V untuk motor DC
- Socket daya DC
- Modul driver motor L298N
- Kabel jumper
Wiring Diagram Arduino dan Limit Switch
Pada tutorial ini, terdapat dua konfigurasi rangkaian yang dapat digunakan sesuai kebutuhan aplikasi. Konfigurasi pertama menggunakan satu motor DC dan satu limit switch. Rangkaian ini umumnya digunakan untuk menghentikan motor ketika limit switch tertekan atau untuk mengubah arah putaran motor saat motor mencapai titik batas tertentu.
Konfigurasi kedua menggunakan satu motor DC dan dua limit switch. Susunan rangkaian ini cocok untuk sistem yang mengharuskan motor bergerak bolak-balik secara otomatis di antara dua posisi. Setiap limit switch berfungsi sebagai sensor batas pada masing-masing ujung lintasan. Ketika motor mencapai salah satu batas dan menekan limit switch, sistem akan mendeteksinya lalu membalik arah putaran motor sehingga motor dapat bergerak kembali ke arah sebaliknya secara otomatis.
Arduino: Menghentikan Motor DC Menggunakan Limit Switch
Salah satu penggunaan paling sederhana dari limit switch adalah menghentikan motor secara otomatis ketika sakelar tertekan. Pada contoh berikut, motor akan terus berputar hingga limit switch disentuh. Ketika limit switch aktif, Arduino akan langsung menghentikan motor.
Kode Program
#include <ezButton.h>
#define ENA_PIN 7 // The Arduino pin connected to the EN1 pin L298N
#define IN1_PIN 6 // The Arduino pin connected to the IN1 pin L298N
#define IN2_PIN 5 // The Arduino pin connected to the IN2 pin L298N
ezButton limitSwitch(A1); // create ezButton object that attach to pin A1
void setup() {
Serial.begin(9600);
limitSwitch.setDebounceTime(50); // set debounce time to 50 milliseconds
// initialize digital pins as outputs.
pinMode(ENA_PIN, OUTPUT);
pinMode(IN1_PIN, OUTPUT);
pinMode(IN2_PIN, OUTPUT);
digitalWrite(ENA_PIN, HIGH); // max speed
digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise
digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise
}
void loop() {
limitSwitch.loop(); // MUST call the loop() function first
if (limitSwitch.isPressed()) {
Serial.println(F("The limit switch: TOUCHED"));
digitalWrite(IN1_PIN, LOW); // stop motor
digitalWrite(IN2_PIN, LOW); // stop motor
}
}
Penjelasan Program
Library ezButton digunakan untuk mempermudah pembacaan status limit switch sekaligus mengatasi efek bouncing yang sering terjadi pada sakelar mekanis. Objek limit switch dibuat menggunakan perintah ezButton limitSwitch(A1). Artinya limit switch dihubungkan ke pin analog A1 dan akan dipantau secara terus-menerus oleh Arduino. Pada bagian setup, motor langsung dijalankan dengan konfigurasi digitalWrite(IN1_PIN, HIGH) dan digitalWrite(IN2_PIN, LOW). Kombinasi logika tersebut membuat motor berputar searah jarum jam (clockwise). Di dalam fungsi loop(), Arduino akan memeriksa apakah limit switch ditekan menggunakan limitSwitch.isPressed(). Jika kondisi tersebut terpenuhi, Arduino akan mengubah kedua pin kontrol motor menjadi LOW, seperti digitalWrite(IN1_PIN, LOW) dan digitalWrite(IN2_PIN, LOW). Akibatnya motor akan langsung berhenti berputar.
Cara Menjalankan Program
Ikuti langkah berikut untuk mencoba program:
1. Hubungkan Arduino ke komputer menggunakan kabel USB.
2. Buka Arduino IDE.
3. Pilih board dan port yang sesuai.
4. Instal library ezButton melalui Library Manager.
5. Salin dan upload program ke Arduino.
6. Pastikan motor mulai berputar setelah Arduino menyala.
7. Tekan atau sentuh limit switch.
Jika rangkaian dan program sudah benar, motor akan langsung berhenti ketika limit switch aktif.
Cara Kerja Sistem
Alur kerja sistem dapat dijelaskan sebagai berikut:
1. Motor mulai berputar.
2. Arduino terus memantau status limit switch.
3. Ketika limit switch ditekan, Arduino mendeteksi perubahan status.
4. Driver L298N menerima perintah untuk menghentikan motor.
5. Motor berhenti dan tidak akan bergerak kembali sampai Arduino di-reset atau program diubah.
Metode ini banyak digunakan pada sistem yang membutuhkan penghentian otomatis saat mencapai batas mekanis tertentu, seperti pintu otomatis, aktuator linear, dan mesin industri sederhana.
Arduino: Mengubah Arah Motor DC Menggunakan Limit Switch
Selain digunakan untuk menghentikan motor, limit switch juga dapat dimanfaatkan untuk mengubah arah putaran motor secara otomatis. Teknik ini sering digunakan pada berbagai sistem mekanis yang bergerak bolak-balik, seperti rel geser otomatis, aktuator linear, pintu otomatis, maupun conveyor sederhana. Pada contoh berikut, motor akan terus berputar. Ketika limit switch ditekan, Arduino akan membalik arah putaran motor secara otomatis. Jika limit switch ditekan kembali, arah putaran akan kembali berubah ke arah sebelumnya.
Kode Program
#include <ezButton.h>
#define DIRECTION_CCW -1
#define DIRECTION_CW 1
// constants won't change
#define ENA_PIN 7 // The Arduino pin connected to the EN1 pin L298N
#define IN1_PIN 6 // The Arduino pin connected to the IN1 pin L298N
#define IN2_PIN 5 // The Arduino pin connected to the IN2 pin L298N
ezButton limitSwitch(A1); // create ezButton object that attach to pin A1
int direction = DIRECTION_CW;
void setup() {
Serial.begin(9600);
limitSwitch.setDebounceTime(50); // set debounce time to 50 milliseconds
// initialize digital pins as outputs.
pinMode(ENA_PIN, OUTPUT);
pinMode(IN1_PIN, OUTPUT);
pinMode(IN2_PIN, OUTPUT);
digitalWrite(ENA_PIN, HIGH); // max speed
digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise
digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise
}
void loop() {
limitSwitch.loop(); // MUST call the loop() function first
if (limitSwitch.isPressed()) {
Serial.println(F("The limit switch: TOUCHED"));
direction *= -1; // change direction
Serial.print(F("The direction -> "));
if (direction == DIRECTION_CW) {
Serial.println(F("CLOCKWISE"));
digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise
digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise
} else {
Serial.println(F("ANTI-CLOCKWISE"));
digitalWrite(IN1_PIN, LOW); // control motor A spins anti-clockwise
digitalWrite(IN2_PIN, HIGH); // control motor A spins anti-clockwise
}
}
}
Penjelasan Program
Program ini menggunakan sebuah variabel bernama direction untuk menyimpan arah putaran motor saat ini.
int direction = DIRECTION_CW;
Nilai awal DIRECTION_CW menunjukkan bahwa motor akan berputar searah jarum jam (clockwise) ketika Arduino pertama kali dinyalakan.
1. Membaca Status Limit Switch
Seperti contoh sebelumnya, fungsi berikut digunakan untuk memperbarui status limit switch:
limitSwitch.loop();
Fungsi ini harus dipanggil secara terus-menerus di dalam loop() agar library ezButton dapat mendeteksi perubahan status tombol dengan benar.
2. Mengubah Arah Putaran Motor
Ketika limit switch ditekan, kondisi berikut akan terpenuhi:
if (limitSwitch.isPressed())
Selanjutnya, program akan menjalankan perintah:
direction *= -1;
Perintah tersebut berfungsi membalik nilai variabel direction.
Sebagai contoh:
- Jika sebelumnya bernilai 1 (CLOCKWISE), maka akan berubah menjadi -1 (ANTI-CLOCKWISE).
- Jika sebelumnya bernilai -1, maka akan berubah menjadi 1.
Dengan cara ini, Arduino dapat membalik arah putaran motor setiap kali limit switch ditekan.
3. Mengontrol Putaran Searah Jarum Jam
Jika nilai variabel direction adalah DIRECTION_CW, maka program menjalankan:
digitalWrite(IN1_PIN, HIGH);
digitalWrite(IN2_PIN, LOW);
Kombinasi logika tersebut membuat motor berputar searah jarum jam.
4. Mengontrol Putaran Berlawanan Arah Jarum Jam
Sebaliknya, jika nilai variabel direction adalah DIRECTION_CCW, maka program menjalankan:
digitalWrite(IN1_PIN, LOW);
digitalWrite(IN2_PIN, HIGH);
Konfigurasi ini membalik polaritas motor sehingga arah putaran berubah menjadi berlawanan arah jarum jam.
Langkah Pengujian
Untuk mencoba program ini, lakukan langkah-langkah berikut:
1. Pastikan rangkaian sudah terhubung dengan benar.
2. Upload program ke board Arduino.
3. Setelah Arduino aktif, motor akan mulai berputar searah jarum jam.
4. Tekan limit switch.
5. Motor akan mengubah arah putarannya menjadi berlawanan arah jarum jam.
6. Tekan limit switch kembali.
7. Motor akan kembali berputar searah jarum jam.
Proses tersebut akan terus berulang setiap kali limit switch ditekan.
Cara Kerja Sistem
Secara sederhana, alur kerja sistem adalah sebagai berikut:
1. Motor mulai berputar ke satu arah.
2. Arduino memantau status limit switch secara terus-menerus.
3. Ketika limit switch aktif, Arduino membalik nilai arah putaran.
4. Driver L298N menerima konfigurasi pin baru.
5. Polaritas motor berubah.
6. Motor berputar ke arah yang berlawanan.
Metode ini sangat cocok digunakan untuk membuat mekanisme gerak bolak-balik yang dikendalikan secara manual menggunakan satu limit switch.
Hasil yang Diharapkan
Jika program berjalan dengan benar, Serial Monitor akan menampilkan informasi seperti berikut:
The limit switch: TOUCHED
The direction -> ANTI-CLOCKWISE
The limit switch: TOUCHED
The direction -> CLOCKWISE
Setiap kali limit switch ditekan, arah putaran motor akan berubah dan status terbaru akan ditampilkan pada Serial Monitor.
Arduino: Mengubah Arah Motor DC Menggunakan Dua Limit Switch
Pada aplikasi seperti pintu geser otomatis, rel bergerak, aktuator linear, dan conveyor mini, sering kali dibutuhkan mekanisme yang memungkinkan motor bergerak bolak-balik secara otomatis di antara dua titik tertentu. Untuk mewujudkan hal tersebut, kita dapat menggunakan dua buah limit switch yang ditempatkan pada masing-masing ujung lintasan. Ketika motor mencapai salah satu ujung dan menyentuh limit switch, Arduino akan secara otomatis membalik arah putarannya. Dengan cara ini, motor dapat bergerak maju dan mundur secara terus-menerus tanpa perlu ditekan secara manual.
Cara Kerja Sistem
Pada konfigurasi ini:
1. Limit Switch 1 ditempatkan pada sisi kiri atau titik awal.
2. Limit Switch 2 ditempatkan pada sisi kanan atau titik akhir.
3. Saat motor menyentuh salah satu limit switch, arah putaran motor akan dibalik.
4. Motor kemudian bergerak menuju limit switch yang berada di sisi berlawanan.
Proses tersebut berlangsung berulang sehingga menghasilkan gerakan bolak-balik otomatis.
Kode Program
#include <ezButton.h>
#define DIRECTION_CCW -1
#define DIRECTION_CW 1
#define ENA_PIN 7 // The Arduino pin connected to the EN1 pin L298N
#define IN1_PIN 6 // The Arduino pin connected to the IN1 pin L298N
#define IN2_PIN 5 // The Arduino pin connected to the IN2 pin L298N
ezButton limitSwitch_1(A0); // create ezButton object that attach to pin A0
ezButton limitSwitch_2(A1); // create ezButton object that attach to pin A1
int direction = DIRECTION_CW;
int prev_direction = DIRECTION_CW;
void setup() {
Serial.begin(9600);
limitSwitch_1.setDebounceTime(50); // set debounce time to 50 milliseconds
limitSwitch_2.setDebounceTime(50); // set debounce time to 50 milliseconds
// initialize digital pins as outputs.
pinMode(ENA_PIN, OUTPUT);
pinMode(IN1_PIN, OUTPUT);
pinMode(IN2_PIN, OUTPUT);
digitalWrite(ENA_PIN, HIGH); // max speed
digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise
digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise
}
void loop() {
limitSwitch_1.loop(); // MUST call the loop() function first
limitSwitch_2.loop(); // MUST call the loop() function first
if (limitSwitch_1.isPressed()) {
direction *= -1; // change direction
Serial.println(F("The limit switch 1: TOUCHED"));
}
if (limitSwitch_2.isPressed()) {
direction *= -1; // change direction
Serial.println(F("The limit switch 2: TOUCHED"));
}
if (prev_direction != direction) {
Serial.print(F("The direction -> "));
if (direction == DIRECTION_CW) {
Serial.println(F("CLOCKWISE"));
digitalWrite(IN1_PIN, HIGH); // control motor A spins clockwise
digitalWrite(IN2_PIN, LOW); // control motor A spins clockwise
} else {
Serial.println(F("ANTI-CLOCKWISE"));
digitalWrite(IN1_PIN, LOW); // control motor A spins anti-clockwise
digitalWrite(IN2_PIN, HIGH); // control motor A spins anti-clockwise
}
prev_direction = direction;
}
}
Penjelasan Program
Pada program ini digunakan dua objek limit switch:
ezButton limitSwitch_1(A0);
ezButton limitSwitch_2(A1);
Limit Switch 1 dihubungkan ke pin A0, sedangkan Limit Switch 2 terhubung ke pin A1. Kedua limit switch tersebut dipantau secara terus-menerus menggunakan:
limitSwitch_1.loop();
limitSwitch_2.loop();
Ketika Limit Switch 1 Aktif
Saat Limit Switch 1 ditekan, program akan menjalankan:
direction *= -1;
Nilai arah putaran akan dibalik dan informasi status dikirim ke Serial Monitor.
Serial.println(F("The limit switch 1: TOUCHED"));
Ketika Limit Switch 2 Aktif
Proses yang sama juga terjadi ketika Limit Switch 2 ditekan.
if (limitSwitch_2.isPressed())
Arduino akan membalik arah putaran motor sehingga motor bergerak menuju sisi yang berlawanan.
Mencegah Perintah Berulang
Program menggunakan variabel prev_direction. Variabel ini berfungsi untuk menyimpan arah putaran sebelumnya. Dengan membandingkan nilai direction dan prev_direction. Arduino hanya akan mengubah konfigurasi pin ketika benar-benar terjadi perubahan arah. Teknik ini membuat program lebih efisien dan menghindari pengiriman perintah yang tidak diperlukan ke driver motor.
Langkah Pengujian
1. Hubungkan motor DC ke modul L298N.
2. Sambungkan Limit Switch 1 ke pin A0.
3. Sambungkan Limit Switch 2 ke pin A1.
4. Upload program ke Arduino.
5. Nyalakan sistem.
6. Motor akan mulai berputar ke salah satu arah.
7. Tekan Limit Switch 1.
8. Motor akan berbalik arah.
9. Tekan Limit Switch 2.
10. Motor akan kembali berbalik arah.
Jika rangkaian dan program sudah benar, motor akan terus bergerak bolak-balik setiap kali salah satu limit switch disentuh.
Contoh Implementasi Nyata
Metode ini banyak digunakan pada berbagai proyek elektronika dan otomasi, seperti:
1. Pintu Geser Otomatis
Motor akan membuka pintu hingga menyentuh limit switch pertama, kemudian berhenti atau bergerak kembali saat diperintahkan.
2. Aktuator Linear
Aktuator dapat bergerak maju dan mundur tanpa risiko menabrak batas mekanis karena keberadaan limit switch.
3. Robot Bergerak pada Rel
Robot dapat berpindah dari satu ujung rel ke ujung lainnya secara otomatis.
4. Conveyor Otomatis
Sistem conveyor dapat bergerak antara dua posisi tertentu dengan kontrol yang lebih aman.
Tips Penggunaan Limit Switch
1. Gunakan fitur debounce untuk mengurangi pembacaan ganda akibat getaran kontak mekanis.
2. Pastikan limit switch dipasang dengan posisi yang kokoh.
3. Hindari menekan limit switch terlalu keras karena dapat memperpendek umur komponen.
4. Gunakan sumber daya motor yang sesuai dengan spesifikasi motor DC.
5. Pastikan kabel terhubung dengan benar untuk menghindari pembacaan yang tidak stabil.
Baca juga: Arduino Motor Shield Rev3 - Cara Mengontrol Motor DC dengan Arduino
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino




0 on: "Arduino dan Limit Switch - Cara Mengontrol Motor DC Menggunakan Driver L298N"