Blog Archive

Arduino Indonesia. Gambar tema oleh Storman. Diberdayakan oleh Blogger.

Supported by Electronics 3 in 1

1. Jasa pencetakan PCB single layer dengan harga paling murah.

(Metode Pembuatan dengan Transfer Toner)
>PCB design sendiri (siap cetak) : Rp.150,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

(Metode Sablon Full Masking dan Silk Screen minimal pemesanan 100 Pcs)
>PCB design sendiri (siap cetak) : Rp.200,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

2. Jasa perancangan, perakitan, dan pembuatan trainer pembelajaran elektronika untuk SMK dan Mahasiswa.

3. Jasa perancangan, perakitan, dan pembuatan berbagai macam kontroller, sensor, aktuator, dan tranduser.
>Design Rangkaian / Sistem Elektronika
>Design Rangkaian / Sistem Instrumentasi
>Design Rangkaian / Sistem Kendali
>Kerjasama Riset (data atau peralatan)
>Kerjasama Produksi Produk-Produk KIT Elektronika
>Produksi Instrumentasi Elektronika

4. Jasa Pembuatan Proyek, Tugas Akhir, Tugas Laboratorium, PKM, Karya Ilmiah, SKRIPSI, dll

Like My Facebook

Popular Posts

Senin, 15 Juni 2026

Arduino dan Limit Switch - Cara Mengontrol Motor DC Menggunakan Driver L298N

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.  

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