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 5: Cảm biến vật cản cho xe robot (Tự dừng khi gặp chướng ngại vật)

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

(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

Trong các bài học trước, bạn đã học cách điều khiển xe robot hai bánh tiến, lùi và rẽ.
Bài học này sẽ giúp robot phát hiện vật cản phía trước bằng cảm biến siêu âm HC-SR04tự động dừng lại để tránh va chạm.
Đây là bước đầu tiên để bạn lập trình xe tránh vật cản thông minh (Obstacle Avoidance Robot).

1. Nguyên lý hoạt động của cảm biến siêu âm HC-SR04

Cảm biến siêu âm hoạt động dựa trên việc phát và nhận sóng âm phản xạ:

  • Chân Trig phát xung siêu âm.
  • Chân Echo nhận tín hiệu phản xạ trở lại từ vật cản.
  • Khoảng cách được tính theo công thức:

(Vì sóng đi và về, chia đôi thời gian tổng.)

2. Sơ đồ kết nối ESP32 + HC-SR04 + L298N

Thiết bịESP32 PinGhi chú
HC-SR04 TrigGPIO4Phát sóng siêu âm
HC-SR04 EchoGPIO5Nhận tín hiệu phản hồ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

⚠️ Đảm bảo GND của cảm biến và L298N được nối chung với GND ESP32.

3. Code mẫu: Xe robot dừng khi gặp vật cản

/*
 * Bài 5 - IoTLabs Motor Course
 * Xe robot dừng khi phát hiện vật cản bằng cảm biến siêu âm HC-SR04
 */

#define TRIG_PIN 4
#define ECHO_PIN 5

#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

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);
  distance = duration * 0.034 / 2; // cm
  return distance;
}

void goForward(int speed = 200) {
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
  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();
    Serial.println("Vật cản phía trước! Dừng lại!");
    delay(1000);
  } else {
    goForward(200);
  }
  delay(100);
}

Kết quả: Xe robot tự động dừng khi cách vật cản khoảng 15 cm và tiếp tục di chuyển khi đường trống.

4. Giải thích nhanh

  • HC-SR04 gửi xung siêu âm, đo thời gian phản hồi để tính khoảng cách.
  • Khi distance < 15, xe dừng bằng stopMotor().
  • Có thể thay đổi khoảng cách dừng tuỳ môi trường thực tế.

5. Mục tiêu học tập

  • Hiểu nguyên lý cảm biến siêu âm.
  • Biết cách đo khoảng cách và xử lý điều kiện dừng.
  • Tạo nền tảng cho xe tránh vật cản thông minh (bài sau).

6. Hoạt động mở rộng

  • Kết hợp LED cảnh báo khi xe dừng.
  • Gắn thêm buzzer hoặc DFPlayer Mini để phát âm thanh cảnh báo.
  • Dùng Serial Plotter để vẽ biểu đồ khoảng cách khi robot di chuyể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át hiện vật cản
L298N Motor Driver1Điều khiển 2 motor
Motor DC 3–6V2Bánh xe trái/phải
Nguồn pin 7.4V hoặc 9V1Nguồn cấp
Dây nối + Breadboard

8. Kết luận

Cảm biến siêu âm giúp robot “nhìn thấy” thế giới xung quanh. Với vài dòng code, bạn đã giúp xe biết phát hiện vật cản và phản ứng tự động — nền tảng cho các ứng dụng robot thông minh hơn như tránh vật cản, dò đường hoặc giao tiếp bằng âm thanh.