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


(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 bài học trước, bạn đã tạo radar mini quét 180° bằng Servo và HC-SR04.
Bây giờ, ta sẽ nâng cấp hệ thống để servo tự động xoay theo vật cản gần nhất, giúp cảm biến “theo dõi mục tiêu” (object tracking) như một chiếc đầu robot thực thụ.

Ứng dụng thực tế:

  • Robot an ninh quét và theo dõi chuyển động.
  • Cảm biến định vị vật thể chuyển động trong khu vực.
  • Cơ cấu đầu quay của robot mô phỏng AI.

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

  • Servo gắn cảm biến HC-SR04.
  • Servo quét dải 0° → 180° để đo khoảng cách.
  • ESP32 ghi nhận góc có khoảng cách nhỏ nhất (vật gần nhất).
  • Sau khi quét xong, servo quay về góc có vật gần nhất để “theo dõi”.

💡 Mô phỏng: Giống như robot “quay đầu nhìn” về phía có vật thể.

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

Thiết bịESP32 PinGhi chú
Servo SG90 (Signal)GPIO5Điều khiển góc quay
HC-SR04 TrigGPIO12Phát xung siêu âm
HC-SR04 EchoGPIO14Nhận phản xạ
5VVCC cả haiNguồn servo + cảm biến
GNDMass chung

⚠️ Đảm bảo servo và cảm biến có nguồn 5V ổn định để tránh rung giật khi quay liên tục.

💻 3. Code mẫu: Servo tự động theo dõi vật cản

/*
 * Bài 13 - IoTLabs Motor Course
 * Servo tự động xoay theo vật cản gần nhất (Object Tracking)
 */

#include <Servo.h>
#define TRIG_PIN 12
#define ECHO_PIN 14
Servo myServo;

long duration;
int distance;

void setup() {
  Serial.begin(115200);
  myServo.attach(5);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  Serial.println("Servo Tracking 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; // cm
}

void loop() {
  int minDist = 999;
  int bestAngle = 90;

  // Quét từ 0 đến 180 để tìm vật gần nhất
  for (int pos = 0; pos <= 180; pos += 5) {
    myServo.write(pos);
    delay(150);
    int dist = getDistance();
    Serial.print("Góc: "); Serial.print(pos);
    Serial.print("° | Khoảng cách: "); Serial.print(dist); Serial.println(" cm");

    if (dist > 0 && dist < minDist) {
      minDist = dist;
      bestAngle = pos;
    }
  }

  // Quay về hướng có vật gần nhất
  Serial.print("Vật gần nhất ở góc: "); Serial.print(bestAngle);
  Serial.print("°, cách "); Serial.print(minDist); Serial.println(" cm");
  myServo.write(bestAngle);
  delay(1500);
}

Kết quả: Servo quét xung quanh, xác định vị trí vật cản gần nhất và tự quay đầu về hướng đó để theo dõi.

🧠 4. Giải thích

  • minDist lưu khoảng cách nhỏ nhất trong quá trình quét.
  • bestAngle lưu góc có vật gần nhất.
  • Sau khi quét hết 180°, servo tự xoay lại góc bestAngle.
  • Có thể thêm điều kiện “nếu vật di chuyển” → servo tự quét lại.

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

  • Biết cách lập trình servo theo hướng “mục tiêu gần nhất”.
  • Hiểu ứng dụng quét và phân tích dữ liệu cảm biến theo góc.
  • Chuẩn bị cho bài sau: xe robot tự quay đầu tránh vật cản.

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

  • Gửi dữ liệu qua Bluetooth / WiFi để hiển thị biểu đồ radar.
  • Kết hợp camera AI (ESP32-CAM) để theo dõi bằng hình ảnh.
  • Gắn hệ thống này lên xe robot để tự quay đầu né vật cản.

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

Linh kiệnSố lượngGhi chú
ESP32 DevKit 38 Pin1Bộ điều khiển chính
Servo SG901Gắn cảm biến
HC-SR041Đo khoảng cách
Nguồn 5V / pin1Nguồn ổn định
Dây nối

🚀 8. Kết luận

Bằng việc kết hợp lập trình servo và cảm biến siêu âm, bạn vừa tạo đầu cảm biến biết “nhìn theo” vật thể.

Đây là nền tảng cho các robot có khả năng theo dõi và phản ứng với môi trường – bước đầu tiến tới robot tương tác thông minh (Reactive Robot).

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 *