Kontrol Kecepatan Motor DC Menggunakan Arduino

Tujuan Praktikum:
- Memahami dasar pengendalian motor DC menggunakan Arduino.
- Mengenal metode PWM (Pulse Width Modulation) untuk mengontrol kecepatan motor DC.
- Menguasai simulasi Arduino dan motor DC di software Proteus.
Software yang dibutuhkan:
- Arduino IDE
- Proteus (versi 8 atau lebih baru)
Teori Pendukung Praktikum
-
Motor DC
Motor DC adalah mesin yang mengubah energi listrik menjadi energi mekanik berupa putaran. Putaran motor terjadi akibat interaksi medan magnet dari stator (bagian tetap) dengan rotor (bagian berputar). Kecepatan putar motor DC dapat dikontrol melalui tegangan atau arus yang diberikan.
-
Pulse Width Modulation (PWM)
Pulse Width Modulation (PWM) merupakan teknik mengatur tegangan rata-rata dengan mengontrol durasi waktu hidup (ON) dan mati (OFF) dari sinyal digital. PWM banyak digunakan untuk mengontrol kecepatan motor DC, intensitas cahaya LED, atau suhu pada perangkat pemanas.
- Prinsip PWM:
- Duty Cycle (rasio durasi sinyal ON dibandingkan periode sinyal) menentukan besarnya tegangan rata-rata yang diterima motor.
- Duty cycle 0% berarti motor berhenti, sedangkan duty cycle 100% berarti motor berputar dengan kecepatan maksimal.
- Rumus Duty Cycle:

-
Arduino
Arduino adalah platform mikrokontroler open-source yang dirancang untuk memudahkan pembuatan prototipe sistem elektronik. Arduino Uno, yang umum digunakan, dilengkapi dengan:
- Pin Digital: Sebagian dapat digunakan sebagai PWM (contoh: pin 3, 5, 6, 9, 10, 11 pada Arduino UNO).
- Pin Analog: Digunakan untuk membaca input analog seperti sensor atau potensiometer.
-
Driver Motor DC (IC L298)
Arduino tidak mampu memberikan arus besar untuk menjalankan motor secara langsung. Oleh karena itu, digunakan driver motor seperti IC L298 untuk mengontrol arus besar yang dibutuhkan motor DC.
- IC L298:
- Mampu mengontrol arah putaran motor dengan konfigurasi logika pin IN1 dan IN2.
- Menggunakan sinyal PWM pada pin ENA (Enable A) atau ENB untuk mengontrol kecepatan motor secara efektif.
-
Potensiometer
Potensiometer adalah komponen elektronik yang resistansinya bisa diubah secara manual. Potensiometer berfungsi sebagai voltage divider (pembagi tegangan), menghasilkan tegangan analog yang dapat dibaca oleh pin analog Arduino (0-1023). Tegangan ini lalu digunakan sebagai referensi untuk mengontrol kecepatan motor DC.
-
Fungsi-fungsi penting dalam Arduino IDE
- analogRead():
Membaca nilai analog dari sensor atau potensiometer dengan range nilai antara 0–1023. - analogWrite():
Menghasilkan sinyal PWM dengan nilai 0–255 untuk mengontrol kecepatan motor, intensitas LED, dll. - map():
Mengkonversi nilai dalam satu rentang ke dalam rentang nilai yang lain. Misalnya:
map(value, fromLow, fromHigh, toLow, toHigh)
-
Simulasi Menggunakan Proteus
Proteus adalah software simulasi rangkaian elektronik yang memungkinkan pengujian sistem sebelum implementasi langsung pada hardware fisik.
- Keunggulan Simulasi Proteus:
- Dapat mendeteksi kesalahan rangkaian sebelum implementasi.
- Menghemat waktu dan biaya dalam pembuatan prototipe.
-
Implementasi Hardware Arduino Asli
Setelah sukses simulasi menggunakan Proteus, rangkaian dapat langsung diimplementasikan menggunakan komponen asli dengan konfigurasi serupa. Pastikan tegangan suplai motor mencukupi (misalnya 12V DC untuk motor DC berukuran sedang) dan ground Arduino disatukan dengan ground driver motor.
Step-by-Step Praktikum:
-
Menyiapkan Alat dan Bahan pada Proteus
Buat skema rangkaian berikut pada software Proteus:

-
Membuat Rangkaian di Proteus
1️⃣ Komponen yang Digunakan
-
-
Arduino Uno (Simulino) – Mikrokontroler untuk mengontrol driver motor.
-
L298 Motor Driver – Modul untuk mengendalikan motor DC dengan daya lebih besar.
-
Dua Motor DC – Motor yang dikontrol oleh driver L298.
-
Sumber Daya (BAT1 – 12V) – Catu daya eksternal untuk motor.
-
2️⃣ Wiring antara Arduino Uno dan L298
| Pin Arduino | Terhubung ke L298 | Fungsi |
|---|---|---|
| Pin 5 | IN1 (Pin 5 L298) | Kontrol arah motor 1 |
| Pin 7 | IN2 (Pin 7 L298) | Kontrol arah motor 1 |
| Pin 10 | IN3 (Pin 10 L298) | Kontrol arah motor 2 |
| Pin 12 | IN4 (Pin 12 L298) | Kontrol arah motor 2 |
| Pin 6 | ENA (Pin 6 L298) | Enable motor 1 (PWM) |
| Pin 11 | ENB (Pin 11 L298) | Enable motor 2 (PWM) |
3️⃣ Wiring antara L298 dan Motor
| Pin L298 | Terhubung ke | Fungsi |
|---|---|---|
| OUT1 (Pin 2) | Motor 1 Terminal A | Output ke motor 1 |
| OUT2 (Pin 3) | Motor 1 Terminal B | Output ke motor 1 |
| OUT3 (Pin 13) | Motor 2 Terminal A | Output ke motor 2 |
| OUT4 (Pin 14) | Motor 2 Terminal B | Output ke motor 2 |
4️⃣ Wiring antara L298 dan Power Supply
| Pin L298 | Terhubung ke | Fungsi |
|---|---|---|
| VS (Pin 4) | +12V (BAT1) | Catu daya motor |
| VCC (Pin 9) | +5V (Arduino) | Catu daya logika |
| GND (Pin 8) | GND (Arduino & BAT1) | Ground bersama |
5️⃣ Cara Kerja
-
-
-
-
Arah putaran motor ditentukan oleh kombinasi logika IN1, IN2 (untuk motor 1) dan IN3, IN4 (untuk motor 2).
-
Kecepatan motor dikontrol dengan sinyal PWM pada pin ENA dan ENB dari Arduino.
-
Power motor diberikan oleh baterai 12V, sementara bagian logika L298 menggunakan 5V dari Arduino.
-
-
-
Pemrograman Arduino
Buka software Arduino IDE, lalu ketikkan program berikut ini:
// Deklarasi pin L298N ke Arduino
int ENA = 6; // PWM untuk motor 1
int ENB = 11; // PWM untuk motor 2
int IN1 = 5; // Kontrol arah motor 1
int IN2 = 7;
int IN3 = 10; // Kontrol arah motor 2
int IN4 = 12;
// Deklarasi pin untuk potensiometer
int potPin = A0;
void setup() {
// Set pin sebagai OUTPUT
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// Inisialisasi Serial Monitor
Serial.begin(9600);
}
void loop() {
// Membaca nilai potensiometer (0 - 1023)
int nilaiPot = analogRead(potPin);
// Konversi nilai potensiometer ke PWM (0 - 255)
int pwmValue = map(nilaiPot, 0, 1023, 0, 255);
// Mengatur arah motor 1 (Maju)
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
// Mengatur arah motor 2 (Maju)
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
// Mengatur kecepatan motor dengan PWM
analogWrite(ENA, pwmValue);
analogWrite(ENB, pwmValue);
// Menampilkan data ke Serial Monitor
Serial.print("Potensiometer: "); Serial.print(nilaiPot);
Serial.print(" | PWM: "); Serial.print(pwmValue);
Serial.print(" | ENA: "); Serial.print(analogRead(ENA));
Serial.print(" | ENB: "); Serial.println(analogRead(ENB));
delay(100);
}
Penjelasan kode program:
- analogRead(): membaca tegangan dari potensiometer dan menghasilkan nilai antara 0-1023.
- map(): mengubah nilai analog dari potensiometer ke rentang PWM (0-255).
- analogWrite(): mengirim sinyal PWM ke motor melalui pin PWM Arduino.
Upload kode tersebut ke dalam virtual Arduino di Proteus dengan cara klik dua kali Arduino pada Proteus dan arahkan ke file .hex hasil compile di Arduino IDE.
-
Potensiometer dihubungkan ke A0 dan digunakan untuk mengatur kecepatan motor.
-
Arduino membaca nilai potensiometer (0-1023) dan mengubahnya ke nilai PWM (0-255).
-
IN1, IN2, IN3, IN4 mengontrol arah putaran kedua motor (default: maju).
-
PWM diberikan ke ENA dan ENB untuk mengontrol kecepatan masing-masing motor.
-
Data nilai potensiometer dan PWM akan tampil di Serial Monitor.
🚀 Pengembangan Lanjutan:
-
Tambahkan tombol untuk mengubah arah putaran motor
-
Gunakan 2 potensiometer agar masing-masing motor bisa dikontrol terpisah
-
Implementasi kontrol via Bluetooth atau WiFi dengan ESP32
- Menjalankan Simulasi di Proteus
- Klik tombol Run pada Proteus untuk menjalankan simulasi.
- Putar potensiometer secara virtual dengan klik dan drag, perhatikan perubahan kecepatan motor.
- Perhatikan juga Serial Monitor pada Proteus (bisa dimunculkan melalui virtual terminal) untuk memantau nilai potensiometer dan PWM secara real-time.
Penjelasan Step 4:
- Perubahan pada potensiometer akan menyebabkan perubahan nilai PWM, sehingga kecepatan motor berubah secara real-time.
- Anda dapat memonitor perubahan nilai PWM dan nilai analog melalui Serial Monitor.
- Analisis dan Evaluasi Hasil Simulasi
Setelah simulasi berjalan dengan baik, analisis beberapa hal berikut:
- Hubungan antara nilai potensiometer dengan kecepatan motor.
- Nilai minimum dan maksimum PWM yang digunakan.
- Amati bagaimana respon motor terhadap perubahan nilai PWM.
Penjelasan Step 5:
- Tujuan dari langkah ini adalah agar Anda memahami secara langsung hubungan linier antara nilai PWM dan kecepatan motor.
- Anda juga akan memahami batasan PWM (0-255) dan bagaimana motor bereaksi terhadap sinyal tersebut.
- Pertanyaan Diskusi (Opsional untuk laporan praktikum)
Jawab pertanyaan berikut sebagai bahan evaluasi:
- Apa fungsi PWM dalam pengendalian kecepatan motor DC?
- Mengapa perlu menggunakan driver motor seperti IC L298 dalam kontrol motor DC?
- Bagaimana prinsip kerja metode map() pada Arduino?
Kesimpulan Praktikum
Dalam praktikum ini, Anda telah mempelajari cara mengontrol kecepatan motor DC menggunakan Arduino dan simulasi Proteus dengan metode PWM. Dengan memahami metode ini, Anda dapat menerapkannya untuk berbagai aplikasi yang membutuhkan kontrol presisi kecepatan motor DC secara efektif.
Frequently Asked Questions (FAQ)
- Apa penyebab motor DC tidak bergerak saat simulasi dijalankan di Proteus?
Jawab:
Biasanya disebabkan karena koneksi salah, nilai PWM terlalu kecil, lupa menghubungkan ground (GND) antara Arduino dan motor driver, atau kesalahan konfigurasi input pada driver motor (pin ENA atau pin IN1 dan IN2 belum disetting dengan benar). - Mengapa menggunakan pin PWM Arduino untuk mengendalikan motor DC?
Jawab:
Karena pin PWM (Pulse Width Modulation) memungkinkan Arduino mengirimkan sinyal digital berupa pulsa dengan durasi variabel. Hal ini efektif digunakan untuk mengatur tegangan rata-rata pada motor sehingga kecepatan motor bisa diatur secara presisi. - Apa peran potensiometer dalam rangkaian ini?
Jawab:
Potensiometer berfungsi sebagai input manual dari pengguna untuk menentukan kecepatan motor. Dengan mengubah nilai resistansi potensiometer, Arduino membaca tegangan analog yang kemudian dikonversi menjadi nilai PWM untuk mengatur kecepatan motor. - Apakah rangkaian ini bisa digunakan untuk mengatur arah putaran motor DC?
Jawab:
Ya, tetapi dalam rangkaian ini arah motor belum diatur karena konfigurasi pin IN1 dan IN2 pada modul L298 tetap (HIGH dan LOW). Untuk mengontrol arah putaran, diperlukan konfigurasi tambahan berupa switching logika HIGH/LOW pada pin IN1 dan IN2 dengan menggunakan dua pin digital dari Arduino. - Mengapa diperlukan IC L298 atau modul driver motor lainnya? Apakah motor DC tidak bisa dikontrol langsung dari Arduino?
Jawab:
Motor DC membutuhkan arus dan tegangan yang jauh lebih besar daripada yang bisa disediakan oleh pin Arduino. Oleh sebab itu, diperlukan IC atau modul driver motor (seperti L298) untuk menangani arus tinggi dan melindungi Arduino dari kerusakan akibat beban berlebih. - Apa fungsi dari perintah map() pada kode Arduino?
Jawab:
Perintah map() digunakan untuk mengubah atau memetakan nilai input dari suatu range tertentu (misalnya nilai analog dari potensiometer 0–1023) ke rentang nilai yang diinginkan (misalnya nilai PWM 0–255). Fungsi ini mempermudah konversi antar skala yang berbeda dalam pemrograman Arduino. - Bagaimana cara menampilkan Serial Monitor di Proteus?
Jawab:
Anda dapat menggunakan komponen Virtual Terminal di Proteus, lalu hubungkan pin RX Virtual Terminal ke pin TX Arduino (pin 1) dan pin TX Virtual Terminal ke pin RX Arduino (pin 0). Saat simulasi dijalankan, jendela Virtual Terminal akan menampilkan data yang dikirim melalui perintah Serial.print().








