Chuyển đến phần nội dung
  • Tiếng Việt
    • English
    • Tiếng Việt

 

  • Tiếng Việt
    • English
    • Tiếng Việt
Tài liệu sử dụng

Robot Arduino

13
  • Tổng quan
  • Cài đặt Arduino IDE
  • Điều khiển LED
  • Điều khiển động cơ Servo
  • Điều khiển động cơ DC với L298N
  • Đọc cảm biến HC-SR04
  • Đọc cảm biến encoder
  • Đọc cảm biến dò line
  • Kết nối Module Bluetooth HM-10
  • Điều khiển xe với PID
  • Lập trình robot điều khiển từ xa
  • Lập trình robot tránh vật cản
  • Lập trình robot dò line

Robot ESP32

12
  • Tổng quan
  • Điều khiển LED
  • Điều khiển động cơ Servo
  • Điều khiển động cơ DC với L298N
  • Đọc cảm biến HCSR04
  • Đọc cảm biến Encoder
  • Đọc cảm biến dò line
  • Bluetooth – Kết nối module HM10
  • Bluetooth – Lập trình điều khiển xe từ xa
  • Wifi – Lập trình web html
  • Wifi – Lập trình điều khiển xe từ xa
  • Lập trình robot dò line

Robot ESP32 Camera

1
  • Tổng quan

Robot ESP32 Lidar

1
  • Tổng quan

Robot ESP32 Lidar & Camera

1
  • Tổng quan
Xem danh mục

Điều khiển động cơ DC với L298N

1. Mục tiêu bài học #

Sau bài này, bạn sẽ có thể:

  • Điều khiển động cơ quay tiến/lùi
  • Điều chỉnh tốc độ động cơ bằng PWM
  • Điều khiển xe robot tiến, lùi, rẽ trái, rẽ phải
  • Hiểu nguyên lý hoạt động của mạch L298N

2. Mạch cầu H L298N là gì #

L298N là module điều khiển động cơ DC rất phổ biến trong các dự án robot Arduino.

Arduino không thể cấp đủ dòng điện để chạy trực tiếp động cơ, nên cần L298N để:

  • Cấp nguồn cho động cơ
  • Đảo chiều quay
  • Điều chỉnh tốc độ

3. Các chân quan trọng trên L298N #

ChânChức năng
ENAĐiều chỉnh tốc độ động cơ A
IN1, IN2Điều khiển chiều quay động cơ A
ENBĐiều chỉnh tốc độ động cơ B
IN3, IN4Điều khiển chiều quay động cơ B
OUT1, OUT2Kết nối động cơ A
OUT3, OUT4Kết nối động cơ B
12VNguồn động cơ
GNDGND
5VNguồn ra 5V

4. Sơ đồ kết nối #

5. Nguyên lý điều khiển động cơ #

6. Code test động cơ #

// Motor trái
#define ENA 5
#define IN1 0
#define IN2 1

// Motor phải
#define ENB 6
#define IN3 4
#define IN4 7

void setup() {

  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);

  pinMode(ENB, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void loop() {

  // Tiến
  forward();
  delay(2000);

  // Dừng
  stopMotor();
  delay(1000);

  // Lùi
  backward();
  delay(2000);

  // Dừng
  stopMotor();
  delay(1000);
}

void forward() {

  analogWrite(ENA, 150);
  analogWrite(ENB, 150);

  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);

  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void backward() {

  analogWrite(ENA, 150);
  analogWrite(ENB, 150);

  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);

  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

void stopMotor() {

  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);

  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

7. Điều chỉnh tốc độ động cơ #

analogWrite(ENA, 255);
analogWrite(ENB, 255);

Giá trị PWM

PWMTốc độ
0Dừng
100Chậm
150Trung bình
255Tối đa

8. Code điều khiển xe robot #

// Motor trái
#define ENA 5
#define IN1 0
#define IN2 1

// Motor phải
#define ENB 6
#define IN3 4
#define IN4 7

void setup() {

  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);

  pinMode(ENB, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

void loop() {

  forward();
  delay(2000);

  backward();
  delay(2000);

  turnLeft();
  delay(1000);

  turnRight();
  delay(1000);

  stopMotor();
  delay(2000);
}

void forward() {

  analogWrite(ENA, 150);
  analogWrite(ENB, 150);

  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);

  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void backward() {

  analogWrite(ENA, 150);
  analogWrite(ENB, 150);

  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);

  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

void turnLeft() {

  analogWrite(ENA, 0);
  analogWrite(ENB, 150);

  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void turnRight() {

  analogWrite(ENA, 150);
  analogWrite(ENB, 0);

  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
}

void stopMotor() {

  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);

  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

9. Giải thích #

10. Các lỗi thường gặp #

Động cơ không quay

Nguyên nhân:

  • Chưa cấp nguồn pin cho L298N
  • GND Arduino và L298N chưa nối chung
  • Dây động cơ cắm sai

Động cơ chỉ quay một chiều

Nguyên nhân:

  • Sai chân IN1/IN2
  • Code điều khiển chiều quay bị sai

Xe quay lệch

Nguyên nhân:

  • Hai động cơ không đều tốc độ
  • Pin yếu
  • Bánh xe ma sát khác nhau

Có thể khắc phục bằng cách chỉnh PWM riêng cho từng bánh:

analogWrite(ENA, 140);
analogWrite(ENB, 150);

11. Một số biến thể #

12. Tổng kết #

Sau bài này bạn đã biết:

  • Điều khiển động cơ DC bằng L298N
  • Điều chỉnh tốc độ bằng PWM
  • Điều khiển chiều quay
  • Điều khiển xe robot cơ bản
Cập nhật vào Tháng 5 29, 2026

Cảm xúc của bạn là gì

  • Vui
  • Bình thường
  • Buồn

Chia sẻ bài viết này :

  • Facebook
  • X
  • LinkedIn
  • Pinterest
Điều khiển động cơ ServoĐọc cảm biến HC-SR04
Table of Contents
  • 1. Mục tiêu bài học
  • 2. Mạch cầu H L298N là gì
  • 3. Các chân quan trọng trên L298N
  • 4. Sơ đồ kết nối
  • 5. Nguyên lý điều khiển động cơ
  • 6. Code test động cơ
  • 7. Điều chỉnh tốc độ động cơ
  • 8. Code điều khiển xe robot
  • 9. Giải thích
  • 10. Các lỗi thường gặp
  • 11. Một số biến thể
  • 12. Tổng kết
Bản quyền; 2026 - Giao diện WordPress tạo bởi CreativeThemes