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

(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.

Comments

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

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *