Series
Lập Trình & Điều Khiển Động Cơ với ESP32
  1. Series: Lập trình & Điều khiển Động Cơ từ Cơ Bản tới Nâng Cao
  2. 1Lập trình & Điều khiển Động Cơ – Bài 1: Giới thiệu về Động cơ và Nguyên lý Hoạt động
  3. 2Lập trình & Điều khiển Động Cơ – Bài 2: Điều khiển tốc độ Động cơ DC bằng PWM
  4. 3Lập trình & Điều khiển Động Cơ – Bài 3: Đảo chiều quay của động cơ DC bằng mạch cầu H (L298N)
  5. 4Lập trình & Điều khiển Động Cơ – Bài 4: Viết hàm điều khiển chuyển động cho xe robot
  6. 5Lập trình & Điều khiển Động Cơ – Bài 5: Cảm biến vật cản cho xe robot (Tự dừng khi gặp chướng ngại vật)
  7. 6Lập trình & Điều khiển Động Cơ – Bài 6: Xe tránh vật cản tự động bằng cảm biến siêu âm HC-SR04
  8. 7Lập trình & Điều khiển Động Cơ – Bài 7: Điều khiển xe robot bằng điện thoại qua WiFi (Web Remote)
  9. 8Lập trình & Điều khiển Động Cơ – Bài 8: Điều khiển xe robot bằng Bluetooth từ điện thoại (ESP32 + App Android)
  10. 9Lập trình & Điều khiển Động Cơ – Bài 9: Lập trình xe robot dò line (chạy theo vạch đen)
  11. 10Lập trình & Điều khiển Động Cơ – Bài 10: Xe robot tránh vật cản kết hợp dò line (robot tự hành thông minh)
  12. 11Lập trình & Điều khiển Động Cơ – Bài 11: Điều khiển Servo bằng ESP32 (Cơ bản và Ứng dụng trong robot)
  13. 12Lập trình & Điều khiển Động Cơ – Bài 12: Kết hợp Servo và Cảm biến siêu âm HC-SR04 – Quay theo vật cản (Radar mini)
  14. 13Lập trình & Điều khiển Động Cơ – Bài 13: Servo Tracking, tạo hệ thống đầu quay cảm biến tự động theo vật cản
  15. 14Lập trình & Điều khiển Động Cơ – Bài 14: Lăp ráp đầu cảm biến quay theo vật cản lên xe robot (Xe radar thông minh)
  16. 15Lập trình & Điều khiển Động Cơ – Bài 15: Tích hợp còi cảnh báo và đèn LED vào xe robot (Báo hiệu trạng thái thông minh)
  17. 16Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot
  18. 17Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 1): Hiểu nguyên lý
  19. 18Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 2): Thiết kế phần cứng
  20. 19Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 3): Lập trình cơ bản
  21. 20Lập trình & Điều khiển Động Cơ – Nâng cao -Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 4): Tối ưu điều khiển
  22. 21Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 5): Báo hiệu thông minh
  23. 22Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 6): Truyền dữ liệu 2 chiều
  24. 23Lập trình & Điều khiển Động Cơ – Nâng cao – Bài 16: Thiết kế bộ điều khiển từ xa cho Robot (phần 7): Kiểm thử & demo thực tế
Kiến thức

Lập trình & Điều khiển Động Cơ – Bài 10: Xe robot tránh vật cản kết hợp dò line (robot tự hành thông minh)

Th11 2025
Lập trình & Điều khiển Động Cơ – Bài 10: Xe robot tránh vật cản kết hợp dò line (robot tự hành thông minh)

(Từ 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ò linetrá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 PinGhi chú
HC-SR04 TrigGPIO4Phát sóng siêu âm
HC-SR04 EchoGPIO5Nhận phản xạ
IR Sensor TráiGPIO34Dò line trái
IR Sensor PhảiGPIO35Dò line phải
L298N IN1GPIO26Motor trái
L298N IN2GPIO27Motor trái
L298N IN3GPIO25Motor phải
L298N IN4GPIO33Motor phải
L298N ENAGPIO14PWM trái
L298N ENBGPIO32PWM phải
5V, GNDTất cả moduleNố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ệnSố lượngGhi chú
ESP32 DevKit 38 Pin1Bộ điều khiển
Cảm biến siêu âm HC-SR041Phía trước xe
Cảm biến dò line IR2Trái và phải
L298N Motor Driver1Cầu H kép
Motor DC + bánh xe2
Pin 7.4V hoặc 9V1Nguồ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.