(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 đã nắm vững dò line và tránh vật cản, trong bài này chúng ta sẽ kết hợp hai kỹ năng quan trọng để tạo ra xe robot tự hành thông minh hơn.
Xe có thể vừa dò theo đường vẽ sẵn (line đen), vừa phát hiện và né vật cản phía trước.
Đây chính là nền tảng của xe tự hành AI – giúp robot biết “nhìn đường” và “phản ứng theo tình huống thực tế”.
⚙️ 1. Nguyên lý hoạt động
Robot được trang bị:
- Hai cảm biến IR ở phía trước → Dò line.
- Cảm biến siêu âm HC-SR04 ở giữa → Phát hiện vật cản.
Nguyên lý điều khiển:
Nếu có vật cản < 15 cm → rẽ tránh.
Ngược lại → dò line như bình thường.
💡 Xe có thể rẽ trái hoặc phải tạm thời, sau đó tự trở lại đường line.
🔌 2. Sơ đồ kết nối phần cứng

| Thiết bị | ESP32 Pin | Ghi chú |
|---|---|---|
| HC-SR04 Trig | GPIO4 | Phát sóng siêu âm |
| HC-SR04 Echo | GPIO5 | Nhận phản xạ |
| IR Sensor Trái | GPIO34 | Dò line trái |
| IR Sensor Phải | GPIO35 | Dò line phải |
| 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 | Tất cả module | Nối chung nguồn |
💻 3. Code mẫu: Xe dò line tránh vật cản
/*
* Bài 10 - IoTLabs Motor Course
* Xe robot dò line kết hợp tránh vật cản
*/
#define TRIG_PIN 4
#define ECHO_PIN 5
#define LEFT_SENSOR 34
#define RIGHT_SENSOR 35
#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(LEFT_SENSOR, INPUT);
pinMode(RIGHT_SENSOR, 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() {
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
ledcWrite(0, 200); ledcWrite(1, 200);
}
void turnLeft() {
digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
ledcWrite(0, 200); ledcWrite(1, 200);
}
void turnRight() {
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
ledcWrite(0, 200); ledcWrite(1, 200);
}
void stopMotor() {
digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
ledcWrite(0, 0); ledcWrite(1, 0);
}
void loop() {
int left = digitalRead(LEFT_SENSOR);
int right = digitalRead(RIGHT_SENSOR);
int dist = getDistance();
Serial.print("Dist: "); Serial.print(dist);
Serial.print(" | L: "); Serial.print(left);
Serial.print(" | R: "); Serial.println(right);
if (dist < 15) {
stopMotor();
delay(300);
turnRight();
delay(600);
}
else if (left == 0 && right == 0) goForward();
else if (left == 0 && right == 1) turnLeft();
else if (left == 1 && right == 0) turnRight();
else stopMotor();
delay(50);
}
✅ Kết quả: Xe tự động dò theo vạch đen, nếu có vật cản ở trước thì rẽ tránh rồi trở lại đường line.
🧠 4. Giải thích ngắn
- Kết hợp 2 thuật toán: tránh vật cản + dò line.
- Khi khoảng cách < 15 cm, ưu tiên hành động né vật cản.
- Sau đó quay lại chế độ dò line bình thường.
- Có thể cải tiến thêm logic “ghi nhớ hướng” để xe quay lại chính xác hơn.
🎯 5. Mục tiêu học tập
- Hiểu cách phối hợp nhiều cảm biến trong cùng chương trình.
- Nắm vững quy trình thiết kế robot thông minh đa nhiệm.
- Mở rộng sang điều khiển AI hoặc học máy trong robot.
🧩 6. Hoạt động mở rộng
- Gắn thêm OLED hiển thị khoảng cách + trạng thái xe.
- Tích hợp âm thanh hoặc giọng nói cảnh báo khi gặp vật cản.
- Thêm servo quét góc cảm biến siêu âm để phát hiện hai bê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 |
| Cảm biến siêu âm HC-SR04 | 1 | Phía trước xe |
| Cảm biến dò line IR | 2 | Trái và phải |
| L298N Motor Driver | 1 | Cầu H kép |
| Motor DC + bánh xe | 2 | |
| Pin 7.4V hoặc 9V | 1 | Nguồn cấp |
| Dây nối, Breadboard | – |
🚀 8. Kết luận
Bài học này giúp bạn hoàn thiện robot tự hành cấp độ 2 – có khả năng vừa dò đường vừa tránh vật cản. Khi hiểu rõ cách phối hợp cảm biến và điều khiển động cơ, bạn có thể mở rộng lên xe tự hành thông minh, robot AI hoặc robot thi đấu chuyên nghiệp.


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