Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Driver Motor L298N – Antarmuka Arduino, Cara Kerja, Kode, Skema

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

Anda dapat menonton video berikut atau membaca tutorial tertulis di bawah ini.

Kita dapat mengontrol kecepatan motor DC hanya dengan mengontrol tegangan input ke motor dan metode yang paling umum untuk melakukannya adalah dengan menggunakan sinyal PWM.

Kontrol Motor DC PWM

PWM, atau modulasi lebar pulsa adalah teknik yang memungkinkan kita untuk menyesuaikan nilai rata-rata tegangan yang masuk ke perangkat elektronik dengan menghidupkan dan mematikan daya dengan kecepatan tinggi. Tegangan rata-rata tergantung pada siklus kerja, atau jumlah waktu sinyal ON versus jumlah waktu sinyal OFF dalam satu periode waktu.

Jadi tergantung pada ukuran motor, kita cukup menghubungkan output PWM Arduino ke basis transistor atau gerbang MOSFET dan mengontrol kecepatan motor dengan mengontrol output PWM. Sinyal PWM Arduino berdaya rendah menghidupkan dan mematikan gerbang di MOSFET yang melaluinya motor daya tinggi digerakkan.

Kontrol Motor DC H-Bridge

Di sisi lain, untuk mengontrol arah putaran, kita hanya perlu membalikkan arah aliran arus yang melalui motor, dan metode yang paling umum untuk melakukannya adalah dengan menggunakan H-Bridge. Sirkuit H-Bridge berisi empat elemen switching, transistor atau MOSFET, dengan motor di tengah membentuk konfigurasi seperti H. Dengan mengaktifkan dua sakelar tertentu secara bersamaan 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 kendali penuh atas motor DC. Ada banyak driver motor DC yang memiliki fitur ini dan L298N adalah salah satunya.

Pengemudi L298N

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

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

Hal ini tergantung dari tegangan yang digunakan pada motor VCC. Modul ini memiliki regulator 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 melepaskan jumper karena tegangan tersebut akan menyebabkan kerusakan pada regulator 5V onboard. Dalam hal ini pin 5V akan digunakan sebagai input karena kita perlu menghubungkannya ke catu daya 5V agar IC dapat bekerja dengan baik.

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

Berikutnya adalah input kontrol logika. Pin Enable A dan Enable B digunakan untuk mengaktifkan dan mengontrol 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 mengontrol kecepatan motor. Jika kita menghubungkan pin ini ke Ground, motor akan dinonaktifkan.

Selanjutnya, pin Input 1 dan Input 2 digunakan untuk mengontrol arah putaran motor A, dan input 3 dan 4 untuk motor B. Dengan menggunakan pin ini sebenarnya kita mengontrol sakelar H-Bridge di dalam IC L298N. Jika input 1 LOW dan input 2 HIGH maka motor akan bergerak maju, dan sebaliknya, jika input 1 HIGH dan input 2 LOW maka motor akan bergerak mundur. Jika kedua input sama, baik LOW atau HIGH motor akan berhenti. Hal yang sama berlaku untuk input 3 dan 4 dan motor B.

Pengemudi Motor Arduino dan L298N

Sekarang mari kita membuat beberapa aplikasi praktis. Pada contoh pertama kita akan mengontrol kecepatan motor menggunakan potensiometer dan mengubah arah putaran menggunakan tombol tekan. Berikut skema rangkaiannya.

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

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

  • Sopir L298N ……………………………….. 
  • Motor DC Torsi Tinggi 12V ………….. 
  • Motor DC dengan Roda Ban Plastik …….
  • Dewan Arduino ………………………………
  • Breadboard dan Kabel Lompat ………… 

Kode Arduino

Berikut 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);
  }
}
Code language: Arduino (arduino)

Deskripsi: Jadi pertama-tama kita perlu mendefinisikan pin dan beberapa variabel yang diperlukan untuk program. Di bagian setup kita perlu mengatur mode pin dan arah putaran awal motor. Pada bagian loop kita mulai dengan membaca nilai potensiometer kemudian memetakan nilai yang kita peroleh dari itu yaitu dari 0 sampai 1023, ke nilai dari 0 sampai 255 untuk sinyal PWM, atau itu 0 sampai 100% duty cycle dari sinyal PWM. Kemudian menggunakan fungsi analogWrite() kami mengirim sinyal PWM ke pin Enable pada papan L298N, yang sebenarnya menggerakkan motor.

Selanjutnya kita cek apakah sudah menekan tombol tersebut, dan jika benar maka kita akan merubah arah putaran motor dengan mengatur keadaan Input 1 dan Input 2 secara terbalik. Push button akan berfungsi sebagai tombol toggle dan setiap kali kita menekannya akan merubah arah putaran motor.

Kontrol Mobil Robot Arduino menggunakan Driver Motor L298N

Jadi setelah kita mempelajari ini, sekarang kita bisa membuat mobil robot Arduino kita sendiri. Berikut skema rangkaiannya:

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

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

int xAxis = analogRead(A0); // Read Joysticks X-axis
int yAxis = analogRead(A1); // Read Joysticks Y-axisCode language: Arduino (arduino)

Setelah menentukan pin, di bagian loop, kita mulai dengan membaca 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 di posisi tengahnya, nilai kedua potensiometer, atau sumbu adalah sekitar 512.

Kami akan menambahkan sedikit toleransi dan menganggap nilai dari 470 hingga 550 sebagai pusat. Jadi jika kita menggerakkan sumbu Y joystick ke belakang dan nilainya di bawah 470, kita akan mengatur arah putaran kedua 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 menjadi 255 yang sebenarnya merupakan 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);
  }Code language: Arduino (arduino)

Serupa, jika kita menggerakkan sumbu Y joystick ke depan dan nilainya di atas 550, kita akan mengatur motor untuk bergerak maju dan mengubah pembacaan dari 550 hingga 1023 menjadi nilai PWM dari 0 hingga 255. Jika joystick tetap di tengahnya, kecepatan motor akan menjadi 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;
    }
  }Code language: Arduino (arduino)

Jadi sekali lagi, pertama-tama kita perlu mengubah pembacaan sumbu X menjadi nilai kecepatan dari 0 hingga 255. Untuk bergerak ke kiri, kita menggunakan nilai ini untuk mengurangi kecepatan motor kiri dan meningkatkan kecepatan motor kanan. Di sini, karena fungsi aritmatika, kami menggunakan dua pernyataan “jika” tambahan untuk membatasi rentang kecepatan motor dari 0 hingga 255.

Metode yang sama digunakan untuk memindahkan mobil ke kanan.

Terkait: Cara Membuat Pengontrol Kecepatan Motor DC PWM menggunakan IC Timer 555

Tergantung pada tegangan yang diberikan dan motor itu sendiri, pada kecepatan rendah motor tidak dapat mulai bergerak dan menghasilkan suara mendengung. Dalam kasus saya, motor tidak dapat bergerak jika nilai sinyal PWM di bawah 70. Oleh karena itu dengan menggunakan dua pernyataan if ini, saya sebenarnya membatasi rentang kecepatan dari 70 hingga 255. Pada akhirnya kami hanya mengirim kecepatan motor akhir atau Sinyal PWM ke pin pengaktifan 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 BCode language: Arduino (arduino)

Berikut kode lengkap contoh mobil robot 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
}Code language: Arduino (arduino)

Jadi itu saja untuk tutorial ini, dan di video saya berikutnya kami akan mengupgrade mobil robot Arduino ini, dengan menambahkan perangkat Bluetooth dan Radio untuk mengaktifkan kontrol smartphone dan nirkabel.

Jangan ragu untuk mengajukan pertanyaan apa pun di bagian komentar di bawah dan jangan lupa untuk memeriksa koleksi Proyek Arduino saya.


Proses manufaktur

  1. Cara Meretas Remote IR
  2. Robot Pengikut Baris
  3. Cara Menghubungkan Arduino Mega dengan Modul GPS NEO-6M
  4. Platform Pelatihan Arduino
  5. Seberapa Mudah Menggunakan Termistor?!
  6. Lengan Robot Arduino DIY – Dikendalikan oleh Gerakan Tangan
  7. Perpustakaan Pengendali Motor DC
  8. Cara membuat plotter CNC 2D mini menggunakan drive DVD bekas, L293D
  9. Inilah Ide:Cara Kerja Antarmuka Otak-Komputer
  10. Keuntungan Motor Penggerak Langsung – Apa Itu Dan Cara Kerjanya.