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


(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

Bài này là bước phát triển tiếp theo của Bài 13 – Servo Tracking.
Chúng ta sẽ gắn hệ thống đầu cảm biến radar (servo + HC-SR04) lên xe robot có 2 motor DC và mạch L298N, để xe tự quét môi trường và chọn hướng an toàn để di chuyển.

Ứng dụng thực tế:

  • Xe robot tự dò đường và tránh vật cản.
  • Hệ thống radar xoay giúp robot “quan sát 180°” như mắt người.
  • Bước nền cho robot tự hành cấp độ cao (AI Pathfinding).

⚙️ 1. Nguyên lý hoạt động

  1. Servo + HC-SR04 quét trái → phải → đo khoảng cách.
  2. ESP32 xác định hướng có khoảng cách xa nhất (ít vật cản).
  3. Robot quay bánh xe theo hướng đó và tiếp tục đi thẳng.
  4. Lặp lại quá trình để duy trì di chuyển an toàn.

💡 Giống như một chiếc xe có “đôi mắt” di chuyển theo hướng trống

🔌 2. Sơ đồ kết nối phần cứng

Thiết bịESP32 PinGhi chú
HC-SR04 TrigGPIO12Phát xung siêu âm
HC-SR04 EchoGPIO14Nhận phản xạ
Servo SG90 (Signal)GPIO5Quay đầu cảm biến
L298N IN1GPIO26Motor trái
L298N IN2GPIO27Motor trái
L298N IN3GPIO25Motor phải
L298N IN4GPIO33Motor phải
ENAGPIO32PWM motor trái
ENBGPIO13PWM motor phải
5VCấp cho tất cả module
GNDChung mass

⚠️ Dùng nguồn pin 7.4V hoặc 9V cho motor và nguồn ổn định 5V cho servo + cảm biến.

💻 3. Code mẫu: Xe radar tự tránh vật cản

/*
 * Bài 14 - IoTLabs Motor Course
 * Xe radar tự quét vật cản và chọn hướng đi an toàn
 */

#include <Servo.h>

#define TRIG_PIN 12
#define ECHO_PIN 14
#define IN1 26
#define IN2 27
#define IN3 25
#define IN4 33
#define ENA 32
#define ENB 13

Servo headServo;
long duration;
int distance;

void setup() {
  Serial.begin(115200);
  headServo.attach(5);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
  Serial.println("Radar Robot Started!");
}

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);
}

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

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

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

void loop() {
  int bestAngle = 90;
  int maxDist = 0;

  // Quét 180° để tìm hướng xa nhất
  for (int pos = 30; pos <= 150; pos += 15) {
    headServo.write(pos);
    delay(300);
    int dist = getDistance();
    Serial.print("Góc: "); Serial.print(pos);
    Serial.print("° | Khoảng cách: "); Serial.print(dist); Serial.println(" cm");
    if (dist > maxDist) {
      maxDist = dist;
      bestAngle = pos;
    }
  }

  Serial.print("Hướng an toàn nhất: "); Serial.print(bestAngle);
  Serial.print("°, khoảng cách: "); Serial.println(maxDist);

  // Điều khiển hướng đi theo góc tốt nhất
  if (bestAngle < 80) {
    turnLeft();
    delay(600);
  } else if (bestAngle > 100) {
    turnRight();
    delay(600);
  } else {
    goForward();
  }

  delay(1000);
  stopMotor();
}

Kết quả: Xe robot quét môi trường xung quanh bằng đầu radar xoay, chọn hướng có khoảng cách xa nhấttự di chuyển tránh vật cản thông minh.

🧠 4. Giải thích nhanh

  • Servo quay đầu cảm biến để đo ở các góc khác nhau.
  • ESP32 ghi nhận khoảng cách từng góc, chọn hướng “trống” nhất.
  • Robot di chuyển theo hướng đó, tạo hành vi “tự tìm đường”.

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

  • Biết cách phối hợp servo + cảm biến + motor trong một hệ thống robot.
  • Nắm logic phân tích dữ liệu cảm biến theo góc.
  • Tạo nền cho robot AI tự tìm đường tránh vật cản.

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

  • Kết hợp OLED để hiển thị hướng và khoảng cách.
  • Thêm LED hiển thị vùng an toàn.
  • Dùng 2 servo để xoay cả đầu và cổ robot.

📦 7. Linh kiện cần thiết

Linh kiệnSố lượngGhi chú
ESP32 DevKit 38 Pin1Bộ điều khiển
Servo SG901Xoay cảm biến
HC-SR041Đo khoảng cách
L298N Motor Driver1Điều khiển bánh xe
Motor DC + bánh xe2Di chuyển
Pin 7.4V hoặc 9V1Nguồn động cơ
Nguồn 5V1Servo + HC-SR04
Dây nối

🚀 8. Kết luận

Bạn vừa tạo được xe radar thông minh có khả năng “nhìn – phân tích – phản ứng”.
Đây là một trong những bước quan trọng nhất để bước vào thế giới robot tự hành (Autonomous Robot), nơi máy móc có thể quan sát và quyết định hướng đi như con người.

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 *