Home / Tutorial Arduino / Tutorial Arduino : Kontrol Motor DC dengan L298N | PWM | H-Bridge

Tutorial Arduino : Kontrol Motor DC dengan L298N | PWM | H-Bridge

kelas-fisika.com – Tutorial Arduino : Kontrol Motor DC dengan L298N | PWM | H-Bridge

Dalam Tutorial Arduino ini kita akan belajar bagaimana mengontrol motor DC menggunakan Arduino. Kami juga melihat beberapa teknik dasar untuk mengendalikan motor DC dan membuat dua contoh di mana kita akan belajar bagaimana mengontrol motor DC menggunakan driver L298N dan Arduino.

Ikhtisar

Kita dapat mengendalikan kecepatan motor DC hanya dengan mengendalikan tegangan input ke motor dan metode yang paling umum dilakukan yaitu dengan menggunakan sinyal PWM.

Kontrol Motor DC dengan PWM

PWM, atau pulse width modulation adalah teknik yang memungkinkan untuk menyesuaikan nilai rata-rata tegangan yang akan masuk ke perangkat elektronik dengan menyalakan dan mematikan daya pada kecepatan yang cepat. Tegangan rata-rata tergantung pada siklus tugas, atau jumlah waktu sinyal ON versus jumlah waktu sinyal OFF dalam satu periode waktu.

Jadi tergantung pada ukuran motor, kita cukup menghubungkan output Arduino PWM ke basis transistor atau gerbang MOSFET dan mengontrol kecepatan motor dengan mengendalikan output PWM. Sinyal Arduino PWM daya rendah beralih dan mematikan gerbang di MOSFET melalui mana motor daya tinggi digerakkan.

Kontrol Motor DC H-Bridge

Di sisi lain, untuk mengendalikan arah rotasi, kita hanya perlu membalik arah aliran arus melalui motor, dan metode yang paling umum dilakukan yaitu dengan menggunakan H-Bridge. Sirkuit H-Bridge berisi empat elemen switching, transistor atau MOSFET, dengan motor di pusat membentuk konfigurasi seperti-H. Dengan mengaktifkan dua switch tertentu pada saat yang sama kita dapat mengubah arah aliran arus, sehingga mengubah arah putaran motor.

Jadi jika kita menggabungkan kedua metode ini, PWM dan H-Bridge, kita dapat memiliki kontrol penuh atas motor DC. Ada banyak driver motor DC yang memiliki fitur-fitur ini dan L298N adalah salah satunya.

Driver L298N

The L298N adalah driver motor H-Bridge ganda yang memungkinkan kontrol kecepatan dan arah dua motor DC pada saat yang sama. Modul ini dapat menggerakkan motor DC yang memiliki tegangan antara 5 dan 35V, dengan arus puncak hingga 2A.

Mari lihat lebih dekat pada pinout modul L298N dan jelaskan cara kerjanya. Modul ini memiliki dua blok terminal sekrup untuk motor A dan B, dan blok terminal sekrup lain untuk pin Ground, VCC untuk motor dan pin 5V yang dapat berupa input atau output.

Ini tergantung pada tegangan yang digunakan pada motor VCC. Modul ini memiliki pengatur 5V onboard yang diaktifkan atau dinonaktifkan menggunakan jumper. Jika tegangan suplai motor hingga 12V kita dapat mengaktifkan regulator 5V dan pin 5V dapat digunakan sebagai output, misalnya untuk menyalakan papan Arduino kita. Tetapi jika tegangan motor lebih besar dari 12V kita harus memutuskan jumper karena tegangan tersebut akan menyebabkan kerusakan pada pengatur 5V onboard. Dalam hal ini pin 5V akan digunakan sebagai input karena kita perlu menghubungkannya ke catu daya 5V agar IC berfungsi dengan benar.

Kita dapat mencatat di sini bahwa IC ini membuat penurunan tegangan sekitar 2V. Jadi misalnya, jika kita menggunakan catu daya 12V, tegangan di terminal motor sekitar 10V, yang berarti kita tidak akan bisa mendapatkan kecepatan maksimum dari motor DC 12V kita.

Berikutnya adalah input kontrol logika. Pin Enable A dan Enable B digunakan untuk mengaktifkan dan mengendalikan kecepatan motor. Jika ada jumper pada pin ini, motor akan diaktifkan dan bekerja pada kecepatan maksimum, dan jika kita melepas jumper kita dapat menghubungkan input PWM ke pin ini dan dengan cara itu mengendalikan kecepatan motor. Jika kita menghubungkan pin ini ke Ground, motor akan dinonaktifkan.

Selanjutnya, Input 1 dan Input 2 pin digunakan untuk mengendalikan arah putaran motor A, dan input 3 dan 4 untuk motor B. Menggunakan pin ini kita benar-benar mengontrol switch dari H-Bridge di dalam IC L298N. Jika input 1 RENDAH dan input 2 TINGGI motor akan bergerak maju, dan sebaliknya, jika input 1 TINGGI dan input 2 RENDAH motor akan bergerak mundur. Jika kedua input sama, apakah RENDAH atau TINGGI motor akan berhenti. Hal yang sama berlaku untuk input 3 dan 4 dan motor B.

Arduino dan L298N

Sekarang mari kita membuat beberapa aplikasi praktis. Pada contoh pertama, kita akan mengontrol kecepatan motor menggunakan potensiometer dan mengubah arah rotasi menggunakan tombol push. Berikut skema skematiknya.

Jadi kita membutuhkan driver L298N, motor DC, potensiometer, tombol tekan dan papan Arduino.

Anda bisa mendapatkan komponen yang diperlukan untuk Tutorial Arduino ini dari tautan di bawah ini:

  • Driver L298N
  • 12 V High Torque DC motor
  • Arduino Board
  • Potensiometer

Kode Arduino

/* Arduino DC Motor Control - PWM | H-Bridge | L298N - Example 01
 by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#define enA 9
#define in1 6
#define in2 7
#define button 4
int rotDirection = 0;
int pressed = false;
void setup() {
pinMode(enA, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(button, INPUT);
 // Set initial rotation direction
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
}

void loop() {
int potValue = analogRead(A0); // Read potentiometer value
int pwmOutput = map(potValue, 0, 1023, 0 , 255); // Map the potentiometer value from 0 to 255
analogWrite(enA, pwmOutput); // Send PWM signal to L298N Enable pin
 // Read button - Debounce
if (digitalRead(button) == true) {
 pressed = !pressed;
}
while (digitalRead(button) == true);
delay(20);
 // If button is pressed - change rotation direction
if (pressed == true & rotDirection == 0) {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
rotDirection = 1;
delay(20);
}
 // If button is pressed - change rotation direction
if (pressed == false & rotDirection == 1) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
rotDirection = 0;
delay(20);
}
}

Deskripsi: Jadi pertama-tama kita perlu menentukan pin dan beberapa variabel yang diperlukan untuk program. Di bagian pengaturan kita perlu mengatur mode pin dan arah putaran awal motor. Di bagian loop kita mulai dengan membaca nilai potensiometer dan kemudian memetakan nilai yang kita dapatkan dari itu yang dari 0 hingga 1023, ke nilai dari 0 hingga 255 untuk sinyal PWM, atau itu 0 hingga 100% siklus kerja dari Sinyal PWM. Kemudian menggunakan fungsi analogWrite () kami mengirim sinyal PWM ke pin Aktifkan dari papan L298N, yang sebenarnya menggerakkan motor.

Selanjutnya, kami memeriksa apakah kami telah menekan tombol, dan jika itu benar, kami akan mengubah arah putaran motor dengan menyetel Input 1 dan Input 2 menyatakan secara terbalik. Tombol tekan akan berfungsi sebagai tombol toggle dan setiap kali kita menekannya, itu akan mengubah arah putaran motor.

Robot Mobil Arduino dikontrol menggunakan Driver L298N

Jadi setelah kami mempelajari ini, sekarang kami dapat membangun mobil robot Arduino kami sendiri. Berikut skema skematik:

Yang kita butuhkan adalah 2 Motor DC, driver L298N, papan Arduino dan joystick untuk kontrol. Untuk catu daya, saya memilih untuk menggunakan tiga baterai Li-ion 3.7V, memberikan total 11V. Saya membuat sasis dari kayu lapis 3 mm, menempelkan motor ke dalamnya menggunakan braket logam, roda yang terpasang ke motor dan di depan terpasang roda putar.

Setelah menentukan pin, di bagian loop, kita mulai dengan membaca nilai-nilai sumbu X dan Y joystick. Joystick sebenarnya terbuat dari dua potensiometer yang terhubung ke input analog Arduino dan mereka memiliki nilai dari 0 hingga 1023. Ketika joystick tetap berada di posisi tengah, nilai kedua potensiometer, atau sumbu sekitar 512.

Sekarang mari kita lihat kode Arduino dan lihat cara kerjanya. (Di bawah Anda dapat menemukan kode lengkap)

int xAxis = analogRead(A0); // Read Joysticks X-axis
int yAxis = analogRead(A1); // Read Joysticks Y-axis

Setelah menentukan pin, di bagian loop, kita mulai dengan membaca nilai-nilai sumbu X dan Y joystick. Joystick sebenarnya terbuat dari dua potensiometer yang terhubung ke input analog Arduino dan mereka memiliki nilai dari 0 hingga 1023. Ketika joystick tetap berada di posisi tengah, nilai kedua potensiometer, atau sumbu adalah sekitar 512.

Kami akan menambahkan sedikit toleransi dan mempertimbangkan nilai dari 470 hingga 550 sebagai pusat. Jadi jika kita menggerakkan poros Y dari joystick ke belakang dan nilai berjalan di bawah 470 kita akan mengatur dua arah rotasi motor ke belakang menggunakan empat pin input. Kemudian, kita akan mengubah nilai yang menurun dari 470 menjadi 0 menjadi nilai PWM yang meningkat dari 0 hingga 255 yang sebenarnya adalah kecepatan motor.

// Y-axis used for forward and backward control
 if (yAxis < 470) {
 // Set Motor A backward
 digitalWrite(in1, HIGH);
 digitalWrite(in2, LOW);
 // Set Motor B backward
 digitalWrite(in3, HIGH);
 digitalWrite(in4, LOW);
 // Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed
 motorSpeedA = map(yAxis, 470, 0, 0, 255);
 motorSpeedB = map(yAxis, 470, 0, 0, 255);
 }

Serupa, jika kita menggerakkan sumbu Y dari joystick ke depan dan nilai berjalan di atas 550 kita akan mengatur motor untuk bergerak maju dan mengubah pembacaan dari 550 ke 1023 ke nilai PWM dari 0 hingga 255. Jika joystick tetap berada di pusatnya, kecepatan motor akan nol.

Selanjutnya, mari kita lihat bagaimana kita menggunakan sumbu X untuk kontrol kiri dan kanan mobil.

// X-axis used for left and right control
 if (xAxis < 470) {
 // Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 value
 int xMapped = map(xAxis, 470, 0, 0, 255);
 // Move to left - decrease left motor speed, increase right motor speed
 motorSpeedA = motorSpeedA - xMapped;
 motorSpeedB = motorSpeedB + xMapped;
 // Confine the range from 0 to 255
 if (motorSpeedA < 0) {
 motorSpeedA = 0;
 }
 if (motorSpeedB > 255) {
 motorSpeedB = 255;
 }
 }

Jadi sekali lagi, pertama kita perlu mengubah pembacaan sumbu X ke nilai kecepatan dari 0 hingga 255. Untuk bergerak ke kiri, kita menggunakan nilai ini untuk mengurangi kecepatan motor kiri dan meningkatkan kecepatan motor yang tepat. Di sini, karena fungsi aritmatika kita menggunakan dua tambahan “jika” pernyataan untuk membatasi rentang kecepatan motor dari 0 hingga 255.
Metode yang sama digunakan untuk menggerakkan mobil ke kanan.

Tergantung pada tegangan yang diberikan dan motor itu sendiri, pada kecepatan yang lebih rendah motor tidak dapat mulai bergerak dan menghasilkan suara berdengung. Dalam kasus saya, motor tidak dapat bergerak jika nilai sinyal PWM di bawah 70. Oleh karena itu menggunakan dua pernyataan ini jika saya benar-benar terbatas pada rentang kecepatan dari 70 hingga 255. Pada akhirnya kami hanya mengirim kecepatan motor akhir atau Sinyal PWM ke pin mengaktifkan driver L298N.

// Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70)
 if (motorSpeedA < 70) {
 motorSpeedA = 0;
 }
 if (motorSpeedB < 70) {
 motorSpeedB = 0;
 }
 analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
 analogWrite(enB, motorSpeedB); // Send PWM signal to motor B

Berikut kode lengkap contoh mobil robot Arduino:

/* Arduino DC Motor Control - PWM | H-Bridge | L298N
 Example 02 - Arduino Robot Car Control
 by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#define enA 9
#define in1 4
#define in2 5
#define enB 10
#define in3 6
#define in4 7
int motorSpeedA = 0;
int motorSpeedB = 0;
void setup() {
 pinMode(enA, OUTPUT);
 pinMode(enB, OUTPUT);
 pinMode(in1, OUTPUT);
 pinMode(in2, OUTPUT);
 pinMode(in3, OUTPUT);
 pinMode(in4, OUTPUT);
}
void loop() {
 int xAxis = analogRead(A0); // Read Joysticks X-axis
 int yAxis = analogRead(A1); // Read Joysticks Y-axis
 // Y-axis used for forward and backward control
 if (yAxis < 470) {
 // Set Motor A backward
 digitalWrite(in1, HIGH);
 digitalWrite(in2, LOW);
 // Set Motor B backward
 digitalWrite(in3, HIGH);
 digitalWrite(in4, LOW);
 // Convert the declining Y-axis readings for going backward from 470 to 0 into 0 to 255 value for the PWM signal for increasing the motor speed
 motorSpeedA = map(yAxis, 470, 0, 0, 255);
 motorSpeedB = map(yAxis, 470, 0, 0, 255);
 }
 else if (yAxis > 550) {
 // Set Motor A forward
 digitalWrite(in1, LOW);
 digitalWrite(in2, HIGH);
 // Set Motor B forward
 digitalWrite(in3, LOW);
 digitalWrite(in4, HIGH);
 // Convert the increasing Y-axis readings for going forward from 550 to 1023 into 0 to 255 value for the PWM signal for increasing the motor speed
 motorSpeedA = map(yAxis, 550, 1023, 0, 255);
 motorSpeedB = map(yAxis, 550, 1023, 0, 255);
 }
 // If joystick stays in middle the motors are not moving
 else {
 motorSpeedA = 0;
 motorSpeedB = 0;
 }
 // X-axis used for left and right control
 if (xAxis < 470) {
 // Convert the declining X-axis readings from 470 to 0 into increasing 0 to 255 value
 int xMapped = map(xAxis, 470, 0, 0, 255);
 // Move to left - decrease left motor speed, increase right motor speed
 motorSpeedA = motorSpeedA - xMapped;
 motorSpeedB = motorSpeedB + xMapped;
 // Confine the range from 0 to 255
 if (motorSpeedA < 0) {
 motorSpeedA = 0;
 }
 if (motorSpeedB > 255) {
 motorSpeedB = 255;
 }
 }
 if (xAxis > 550) {
 // Convert the increasing X-axis readings from 550 to 1023 into 0 to 255 value
 int xMapped = map(xAxis, 550, 1023, 0, 255);
 // Move right - decrease right motor speed, increase left motor speed
 motorSpeedA = motorSpeedA + xMapped;
 motorSpeedB = motorSpeedB - xMapped;
 // Confine the range from 0 to 255
 if (motorSpeedA > 255) {
 motorSpeedA = 255;
 }
 if (motorSpeedB < 0) {
 motorSpeedB = 0;
 }
 }
 // Prevent buzzing at low speeds (Adjust according to your motors. My motors couldn't start moving if PWM value was below value of 70)
 if (motorSpeedA < 70) {
 motorSpeedA = 0;
 }
 if (motorSpeedB < 70) {
 motorSpeedB = 0;
 }
 analogWrite(enA, motorSpeedA); // Send PWM signal to motor A
 analogWrite(enB, motorSpeedB); // Send PWM signal to motor B
}

Selamat Mencoba

 

About kelas-fisika

Check Also

Proyek Arduino Pilah Warna

kelas-fisika.com – Proyek Arduino Pilah Warna Dalam artikel ini kelas-fisika akan menunjukkan bagaimana Anda dapat membuat …

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Powered by themekiller.com