Hướng dẫn làm robot tránh vật cản với Arduino, L298N và cảm biến siêu âm

Mạch điều khiển động cơ L298 mạch cầu H
Module L298N – mạch cầu H điều khiển động cơ DC cho robot

Robot tránh vật cản là dự án nhập môn kinh điển khi học Arduino và robot, kết hợp cảm biến siêu âm, mạch điều khiển động cơ và khung xe robot. Bài viết hướng dẫn đầy đủ từ chọn linh kiện, đấu nối đến code mẫu để bạn tự làm được robot tự tránh vật cản đơn giản.

1. Chuẩn bị linh kiện

  • 1 board Arduino Uno R3
  • 1 module điều khiển động cơ L298N (mạch cầu H)
  • 1 khung xe robot kèm 2 hoặc 4 động cơ giảm tốc DC và bánh xe
  • 1 cảm biến siêu âm HC-SR04
  • Pin nguồn cho động cơ (thường dùng pin 7.4V – 12V tuỳ động cơ, tách riêng nguồn động cơ và nguồn Arduino nếu có thể)
  • Dây cắm breadboard (dây cắm đực-cái, đực-đực)

2. Sơ đồ đấu nối

L298N với Arduino: IN1, IN2, IN3, IN4 nối vào 4 chân digital bất kỳ trên Arduino (ví dụ chân 7, 6, 5, 4), ENA và ENB nối vào 2 chân PWM (ví dụ chân 9, 10) nếu muốn điều chỉnh tốc độ, hoặc nối thẳng lên 5V nếu chạy tốc độ cố định. Chân GND của L298N nối chung GND với Arduino.

Động cơ với L298N: 2 động cơ bên trái nối chung vào ngõ OUT1, OUT2, 2 động cơ bên phải nối chung vào OUT3, OUT4. Nguồn pin cấp vào chân 12V/VCC của L298N để cấp nguồn cho động cơ.

Cảm biến HC-SR04 với Arduino: VCC vào 5V, GND vào GND, Trig và Echo nối vào 2 chân digital còn trống (ví dụ chân 2, 3).

3. Code mẫu robot tránh vật cản

#define TRIG_PIN 2
#define ECHO_PIN 3
#define IN1 7
#define IN2 6
#define IN3 5
#define IN4 4

void setup() {
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

float docKhoangCach() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  long duration = pulseIn(ECHO_PIN, HIGH);
  return duration * 0.0343 / 2;
}

void diThang() {
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}

void lui() {
  digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}

void xoayPhai() {
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}

void dung() {
  digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
}

void loop() {
  float kc = docKhoangCach();

  if (kc > 20 || kc <= 0) {
    diThang();
  } else {
    dung();
    delay(200);
    lui();
    delay(400);
    xoayPhai();
    delay(400);
  }
}

4. Nguyên lý hoạt động

Arduino liên tục đọc khoảng cách từ cảm biến siêu âm. Nếu phía trước còn trống (khoảng cách lớn hơn ngưỡng an toàn, ví dụ 20cm), robot tiếp tục đi thẳng. Khi phát hiện vật cản gần hơn ngưỡng, robot dừng lại, lùi một chút rồi xoay sang hướng khác trước khi tiếp tục đi thẳng, lặp lại liên tục để tự dò đường tránh vật cản.

5. Mẹo tinh chỉnh

  • Nếu robot chạy quá nhanh khó kiểm soát, nối ENA/ENB vào chân PWM và dùng lệnh analogWrite để giảm tốc độ động cơ thay vì chạy full tốc độ.
  • Ngưỡng khoảng cách tránh vật cản (20cm trong code mẫu) nên tăng lên nếu robot chạy nhanh, để có đủ thời gian phản ứng trước khi va chạm.
  • Thời gian lùi và xoay trong code có thể chỉnh tăng giảm tuỳ kích thước robot và độ rộng không gian di chuyển.
  • Nên tách riêng nguồn pin cho động cơ và nguồn cho Arduino (hoặc dùng chung nhưng có tụ lọc) để tránh sụt áp làm Arduino tự reset khi động cơ khởi động đột ngột.

Đây là bước khởi đầu cơ bản, từ đây bạn có thể nâng cấp thêm nhiều cảm biến, thêm động cơ servo gắn cảm biến để quét nhiều hướng, hoặc lập trình phức tạp hơn. Tham khảo đầy đủ khung xe robot, động cơ, module điều khiển tại danh mục Robot - Phụ kiện DIY và Module - Mạch điện của Linh Kiện Điện Tử Hưng Yên.

Để 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 *

Lên đầu trang