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 6: Xe tránh vật cản tự động bằng cảm biến siêu âm HC-SR04

Th11 2025
Lậ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

(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 đã 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 PinGhi chú
HC-SR04 TrigGPIO4Phát sóng
HC-SR04 EchoGPIO5Nhận tín hiệu
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, GNDCác moduleNố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ệnSố lượngGhi chú
ESP32 DevKit 38 Pin1Bộ điều khiển
Cảm biến HC-SR041Phía trước robot
L298N Driver1Điều khiển 2 motor
Motor DC + bánh xe2Trái/phải
Pin sạc 7.4V hoặc 9V1Nguồ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.