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

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

Dalam Tutorial Arduino ini kita akan mempelajari cara mengontrol motor DC menggunakan Arduino. Kita akan melihat beberapa teknik dasar untuk mengontrol motor DC dan membuat dua contoh melalui yang kita akan mempelajari cara mengontrol motor DC menggunakan driver motor L298N dan papan Arduino.

Anda dapat menonton video berikut atau membaca tutorial tertulis di bawahnya.

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

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

Kontrol Motor DC PWM

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

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

Jadi tergantung pada ukuran motor, kita dapat dengan mudah menghubungkan output PWM Arduino ke basis transistor atau gate MOSFET dan mengontrol kecepatan motor dengan mengontrol output PWM. Sinyal PWM daya rendah Arduino menghidupkan dan mematikan gate MOSFET melalui yang motor daya tinggi dioperasikan.

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

Kontrol Motor DC H-Bridge

Di sisi lain, untuk mengontrol arah rotasi, kita hanya perlu membalik arah arus yang mengalir melalui motor, dan metode paling umum untuk melakukan itu adalah dengan menggunakan H-Bridge. Rangkaian H-Bridge berisi empat elemen switching, transistor atau MOSFET, dengan motor di tengah membentuk konfigurasi seperti huruf H. Dengan mengaktifkan dua saklar tertentu pada saat yang sama kita dapat mengubah arah arus, sehingga mengubah arah rotasi motor.

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

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

Driver L298N

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

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

Mari kita lihat lebih dekat pinout modul L298N dan menjelaskan cara kerjanya. Modul memiliki dua blok terminal baut untuk motor A dan B, dan blok terminal baut lain untuk pin Ground, VCC untuk motor dan pin 5V yang dapat menjadi input atau output.

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

Ini bergantung pada tegangan yang digunakan pada VCC motor. Modul memiliki regulator 5V internal yang diaktifkan atau dinonaktifkan menggunakan jumper. Jika tegangan suplay motor hingga 12V kita dapat mengaktifkan regulator 5V dan pin 5V dapat digunakan sebagai output, misalnya untuk menyuayi papan Arduino kita. Tetapi jika tegangan motor lebih dari 12V kita harus melepas jumper karena tegangan tersebut akan merusak regulator 5V internal. Dalam hal ini pin 5V akan digunakan sebagai input karena kita perlu menghubungkannya ke sumber daya 5V agar IC bekerja dengan benar.

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

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

Selanjutnya adalah input kontrol logis. Pin Enable A dan Enable B digunakan untuk mengaktifkan dan mengontrol kecepatan motor. Jika jumper ada pada pin ini, motor akan diaktifkan dan bekerja pada kecepatan maksimal, 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.

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

Selanjutnya, pin Input 1 dan Input 2 digunakan untuk mengontrol arah rotasi motor A, dan input 3 dan 4 untuk motor B. Menggunakan pin ini kita sebenarnya mengontrol saklar H-Bridge di dalam IC L298N. Jika input 1 LOW dan input 2 HIGH motor akan bergerak maju, dan sebaliknya, jika input 1 HIGH dan input 2 LOW 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.

Arduino dan Driver Motor L298N

Sekarang mari kita buat beberapa aplikasi praktis. Dalam contoh pertama kita akan mengontrol kecepatan motor menggunakan potensiometer dan mengubah arah rotasi menggunakan tombol tekan. Berikut adalah skema rangkaiannya.

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

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

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

  • Driver L298N ………………………………..
  • Motor DC Torsi Tinggi 12V …………..
  • Motor DC dengan Ban Roda Plastik …….
  • Papan Arduino ………………………………
  • Breadboard dan Kabel Jumper …………

Kode Arduino

Berikut adalah 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 kita perlu menentukan pin dan beberapa variabel yang diperlukan untuk program. Dalam bagian setup kita perlu menentukan mode pin dan arah rotasi awal motor. Dalam bagian loop kita memulai dengan membaca nilai potensiometer lalu memetakan nilai yang kita peroleh darinya yang dari 0 hingga 1023, ke nilai dari 0 hingga 255 untuk sinyal PWM, atau itu 0 hingga 100% siklus kerja sinyal PWM. Kemudian menggunakan fungsi analogWrite() kita mengirim sinyal PWM ke pin Enable papan L298N, yang sebenarnya mengemudikan motor.

Selanjutnya, kita memeriksa apakah kita telah menekan tombol, dan jika itu benar, kita akan mengubah arah rotasi motor dengan mengatur status Input 1 dan Input 2 secara berbalik. Tombol tekan akan berfungsi sebagai tombol switch dan setiap kali kita menekannya, itu akan mengubah arah rotasi motor.

Kontrol Robot Car Arduino menggunakan Driver Motor L298N

Jadi setelah kita mempelajari ini, sekarang kita dapat membangun robot car Arduino kita sendiri. Berikut adalah skema rangkaiannya:

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

Semua yang kita butuhkan adalah 2 Motor DC, driver motor L298N, papan Arduino dan joystick untuk kontrol. Seperti yang diketahui, untuk suplay daya, saya memilih untuk menggunakan tiga baterai Li-ion 3.7V, yang menyediakan total 11V. Saya membuat chassis dari multiplex tebal 3 mm, memasang motor padanya menggunakan bracket logam, memasang roda pada motor dan di depan memasang roda swivel.

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

Sekarang mari kita lihat kode Arduino dan lihat bagaimana itu bekerja. (Di bawah Anda dapat menemukan kode lengkap)

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 memulai dengan membaca nilai sumbu X dan Y joystick. Joystick sebenarnya terdiri dari dua potensiometer yang terhubung ke input analog Arduino dan mereka memiliki nilai dari 0 hingga 1023. Saat joystick berada di posisi tengah, nilai kedua potensiometer, atau sumbu sekitar 512.

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

Kita akan menambahkan sedikit toleransi dan mempertimbangkan nilai dari 470 hingga 550 sebagai tengah. Jadi jika kita memindahkan sumbu Y joystick ke belakang dan nilai turun di bawah 470 kita akan mengatur arah rotasi kedua motor ke mundur menggunakan empat pin input. Kemudian, kita akan mengonversi nilai yang menurun dari 470 hingga 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); }Code language: Arduino (arduino)

Demikian juga, jika kita memindahkan sumbu Y joystick ke depan dan nilai naik di atas 550 kita akan mengatur motor untuk bergerak maju dan mengonversi pembacaan dari 550 hingga 1023 menjadi nilai PWM dari 0 hingga 255. Jika joystick tetap di tengah, 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; } }Code language: Arduino (arduino)

Jadi sekali lagi, pertama kita perlu mengonversi 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 kita menggunakan dua pernyataan "if" tambahan untuk membatasi rentang kecepatan motor dari 0 hingga 255.

Menguasai Driver Motor L298N: Kontrol Arduino, Skematik, dan Kode Contoh

Metode yang sama digunakan untuk menggerakkan mobil ke kanan.

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

Bergantung pada tegangan yang diterapkan dan motor itu sendiri, pada kecepatan rendah motor tidak dapat mulai bergerak dan menghasilkan suara derau. Dalam kasus saya, motor tidak dapat bergerak jika nilai sinyal PWM di bawah 70. Oleh karena itu menggunakan dua pernyataan if ini saya sebenarnya membatasi rentang kecepatan dari 70 hingga 255. Akhirnya kita hanya mengirim kecepatan motor akhir atau sinyal PWM ke pin enable 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 adalah kode lengkap dari contoh robot car 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)

Itu saja untuk tutorial ini, dan dalam video selanjutnya kita akan meningkatkan robot car Arduino ini, dengan menambahkan perangkat Bluetooth dan Radio untuk mengaktifkan kontrol smartphone dan nirkabel.

Jangan ragu untuk bertanya di bagian komentar di bawah dan jangan lupa untuk memeriksa koleksi Proyek Arduino saya.


Proses manufaktur

  1. Membuat Remote IR Universal dengan Arduino: Panduan Langkah demi Langkah
  2. Buat Robot Pengikuti Garis Otonom dengan Arduino UNO
  3. Menghubungkan Arduino Mega ke Modul GPS NEO‑6M: Panduan Langkah demi Langkah
  4. Kit Pelatihan Arduino Komprehensif dengan Mega 2560, Sensor, Motor, dan PCB Kustom
  5. Penggunaan Termistor yang Mudah: Panduan Langkah demi Langkah Arduino
  6. Lengan Robot Arduino Dikontrol Geser Tangan – Pembangun Langkah demi Langkah DIY
  7. Library Arduino Berkinerja Tinggi untuk Kontrol Motor DC
  8. Bangun Mini CNC 2D Plotter dari Unit DVD Bekas Menggunakan L293D Motor Shield
  9. Antarmuka Otak-Komputer: Menghubungkan Pikiran dengan Tindakan
  10. Motor Direct Drive: Manfaat, Tipe, dan Prinsip Kerja