(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 đã biết cách dừng xe khi gặp vật cản, ở bài này chúng ta sẽ nâng cấp xe robot lên cấp độ “thông minh” hơn: 👉 Xe tự động tránh vật cản và tìm đường đi mới.
Bài này là ứng dụng thực tế đầu tiên giúp bạn hiểu cách lập trình robot phản ứng theo môi trường — nền tảng của robot tự hành trong đời sống.
⚙️ 1. Nguyên lý hoạt động
Xe sử dụng cảm biến siêu âm HC-SR04 để đo khoảng cách phía trước.
- Nếu không có vật cản → đi thẳng.
- Nếu phát hiện vật cản gần hơn 15 cm → dừng, rẽ sang hướng khác (trái hoặc phải).
- Sau đó kiểm tra lại khoảng cách để quyết định tiếp tục đi.
💡 Tư duy logic:
Nếu khoảng cách < 15 → Dừng → Rẽ → Kiểm tra → Tiếp tục đi
Ngược lại → Tiếp tục đi thẳng
📡 2. Sơ đồ mạch kết nối

| Thiết bị | ESP32 Pin | Ghi chú |
|---|---|---|
| HC-SR04 Trig | GPIO4 | Phát sóng |
| HC-SR04 Echo | GPIO5 | Nhận tín hiệu |
| L298N IN1 | GPIO26 | Motor trái |
| L298N IN2 | GPIO27 | Motor trái |
| L298N IN3 | GPIO25 | Motor phải |
| L298N IN4 | GPIO33 | Motor phải |
| L298N ENA | GPIO14 | PWM trái |
| L298N ENB | GPIO32 | PWM phải |
| 5V, GND | Các module | Nối chung mass |
💻 3. Code mẫu: Xe tránh vật cản tự động
/*
* Bài 6 - IoTLabs Motor Course
* Xe tránh vật cản tự động bằng HC-SR04 + ESP32 + L298N
*/
#define TRIG_PIN 4
#define ECHO_PIN 5
#define IN1 26
#define IN2 27
#define IN3 25
#define IN4 33
#define ENA 14
#define ENB 32
#define PWM_FREQ 5000
#define PWM_RES 8
long duration;
int distance;
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
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);
}
int getDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void goForward(int speed = 200) {
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
ledcWrite(0, speed); ledcWrite(1, speed);
}
void turnLeft(int speed = 200) {
digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
ledcWrite(0, speed); ledcWrite(1, speed);
}
void turnRight(int speed = 200) {
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
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() {
int dist = getDistance();
Serial.print("Khoảng cách: "); Serial.print(dist); Serial.println(" cm");
if (dist < 15) {
stopMotor();
delay(300);
turnRight(200);
delay(600);
} else {
goForward(200);
}
delay(100);
}
✅ Kết quả: Xe tự động đi thẳng khi không có vật cản, và rẽ phải khi phát hiện vật ở gần.
🧠 4. Giải thích ngắn
- Cảm biến HC-SR04 đo khoảng cách liên tục.
- Nếu < 15 cm → xe dừng → rẽ → tiếp tục đi.
- Bạn có thể thay đổi hướng rẽ hoặc thời gian
delay(600)để tối ưu góc quay.
🎯 5. Mục tiêu học tập
- Hiểu thuật toán tránh vật cản cơ bản.
- Lập trình robot phản ứng theo môi trường.
- Chuẩn bị cho bài sau: xe tự động dò đường thông minh.
🧩 6. Hoạt động mở rộng
- Gắn thêm 2 cảm biến siêu âm ở bên trái/phải để robot chọn hướng tốt nhất.
- Gắn buzzer hoặc LED cảnh báo khi robot phát hiện vật cản.
- Hiển thị khoảng cách thực tế trên màn hình OLED 0.96 inch.
📦 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 |
| Cảm biến HC-SR04 | 1 | Phía trước robot |
| L298N Driver | 1 | Điều khiển 2 motor |
| Motor DC + bánh xe | 2 | Trái/phải |
| Pin sạc 7.4V hoặc 9V | 1 | Nguồn cấp |
| Dây nối, Breadboard | – |
🚀 8. Kết luận
Xe tránh vật cản là một trong những dự án kinh điển khi học robot.
Bằng việc kết hợp lập trình, cảm biến và điều khiển động cơ, bạn đã giúp xe phản ứng thông minh với môi trường — nền tảng để bước vào AI Robotics ở cấp độ cao hơn.


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