(Khóa học: Lập trình & Điều khiển Động Cơ từ Cơ Bản tới Nâng Cao)
📘 Giới thiệu
Sau khi bạn đã học cách điều khiển một động cơ DC tiến – lùi bằng mạch cầu H (L298N), bước tiếp theo là kết hợp hai động cơ để tạo chuyển động linh hoạt cho xe robot:
- Tiến về phía trước
- Lùi lại
- Rẽ trái
- Rẽ phải
- Dừng
Bài học này giúp bạn viết các hàm điều khiển riêng biệt cho từng hướng di chuyển, tạo nền tảng cho các bài học robot tự hành ở phần sau.
⚙️ 1. Nguyên lý điều khiển xe robot hai bánh

Xe robot hai bánh có 2 động cơ DC độc lập:
- Motor trái (M1) → điều khiển bởi IN1, IN2, ENA
- Motor phải (M2) → điều khiển bởi IN3, IN4, ENB
| Chuyển động | Motor trái | Motor phải |
|---|---|---|
| Tiến | Quay thuận | Quay thuận |
| Lùi | Quay ngược | Quay ngược |
| Rẽ trái | Dừng / quay ngược nhẹ | Quay thuận |
| Rẽ phải | Quay thuận | Dừng / quay ngược nhẹ |
| Dừng | Dừng cả hai |
🔌 2. Sơ đồ kết nối (ESP32 + L298N + 2 động cơ)
| ESP32 Pin | L298N Pin | Ghi chú |
|---|---|---|
| GPIO26 | IN1 | Motor trái hướng 1 |
| GPIO27 | IN2 | Motor trái hướng 2 |
| GPIO14 | ENA | PWM tốc độ trái |
| GPIO25 | IN3 | Motor phải hướng 1 |
| GPIO33 | IN4 | Motor phải hướng 2 |
| GPIO32 | ENB | PWM tốc độ phải |
| 5V, GND | L298N 5V, GND | Nguồn logic |
💻 3. Code mẫu: Viết hàm điều khiển chuyển động
/*
* Bài 4 - IoTLabs Motor Course
* Viết hàm điều khiển chuyển động xe robot 2 bánh bằng ESP32 + L298N
*/
#define IN1 26
#define IN2 27
#define ENA 14
#define IN3 25
#define IN4 33
#define ENB 32
#define PWM_FREQ 5000
#define PWM_RES 8
void setup() {
pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
ledcSetup(0, PWM_FREQ, PWM_RES);
ledcSetup(1, PWM_FREQ, PWM_RES);
ledcAttachPin(ENA, 0);
ledcAttachPin(ENB, 1);
}
// ====== Các hàm điều khiển ======
void goForward(int speed = 200) {
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
ledcWrite(0, speed); ledcWrite(1, speed);
}
void goBackward(int speed = 200) {
digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
ledcWrite(0, speed); ledcWrite(1, speed);
}
void turnLeft(int speed = 200) {
digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); // Trái quay ngược
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); // Phải quay thuận
ledcWrite(0, speed); ledcWrite(1, speed);
}
void turnRight(int speed = 200) {
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); // Trái quay thuận
digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); // Phải quay ngược
ledcWrite(0, speed); ledcWrite(1, speed);
}
void stopMotor() {
digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
ledcWrite(0, 0); ledcWrite(1, 0);
}
void loop() {
goForward(); delay(2000);
turnLeft(); delay(1000);
turnRight(); delay(1000);
goBackward(); delay(2000);
stopMotor(); delay(2000);
}
✅ Kết quả: Robot tiến 2s → rẽ trái → rẽ phải → lùi → dừng, lặp lại chu kỳ.
🧠 4. Giải thích ngắn
- Mỗi motor có 2 chân điều khiển hướng (IN1–IN2 / IN3–IN4).
- Dùng PWM (ENA, ENB) để điều chỉnh tốc độ từng bánh.
- Tạo hàm riêng biệt giúp code dễ mở rộng, ví dụ thêm điều khiển từ điện thoại hoặc AI.
🎯 5. Mục tiêu học tập
- Hiểu logic điều khiển robot hai bánh.
- Viết và tái sử dụng hàm điều khiển.
- Chuẩn bị cho các bài tiếp theo: cảm biến vật cản và điều khiển thông minh.
🧩 6. Hoạt động mở rộng
- Thêm nút nhấn hoặc remote để chọn hướng di chuyển.
- Điều khiển xe qua giao diện web (WiFi WebServer).
- Tích hợp cảm biến siêu âm để xe tự tránh vật cản.
📦 7. Linh kiện cần thiết
| Linh kiện | Số lượng | Ghi chú |
|---|---|---|
| ESP32 DevKit 38 Pin | 1 | Bộ điều khiển |
| L298N Driver | 1 | Mạch cầu H kép |
| Motor DC 3–6V | 2 | Bánh trái và phải |
| Bánh xe + khung robot | 1 bộ | 2 bánh + caster |
| Pin 7.4V hoặc 9V | 1 | Nguồn cấp động cơ |
| Dây nối + Breadboard | – |
🚀 8. Kết luận
Bài học này giúp bạn làm chủ kỹ năng lập trình cấu trúc chuyển động – nền tảng cho mọi robot di động.
Khi hiểu được cách điều khiển độc lập từng bánh, bạn có thể phát triển các ứng dụng nâng cao như xe dò line, xe tránh vật cản hoặc xe điều khiển bằng giọng nói.


Để lại một bình luận