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


(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 xe robot hoặc hệ thống quan sát thông minh, việc quét và theo dõi vật cản xung quanh là một chức năng cực kỳ quan trọng.

Bài này hướng dẫn bạn kết hợp Servo SG90cảm biến siêu âm HC-SR04 để tạo mô hình radar mini — có thể xoay đầu cảm biến và đo khoảng cách theo góc quay, hiển thị dữ liệu trực tiếp qua Serial.

Đây là nền tảng để phát triển các dự án như:

  • Xe robot tự tránh vật cản thông minh
  • Hệ thống radar hiển thị bản đồ vật thể
  • Cảm biến xoay quan sát 180° cho robot AI

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

  • Servo xoay cảm biến siêu âm từ 0° đến 180°.
  • Ở mỗi góc, cảm biến đo khoảng cách bằng tín hiệu echo.
  • Kết quả được gửi về Serial để vẽ biểu đồ hoặc hiển thị radar.

💡 Servo đóng vai trò “cổ xoay”, còn HC-SR04 là “mắt quan sát”.

🔌 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
Servo SG90 (VCC)5VNguồn cấp
Servo SG90 (GND)GNDMass chung
HC-SR04 TrigGPIO12Phát xung siêu âm
HC-SR04 EchoGPIO14Nhận phản xạ
HC-SR04 VCC5VNguồn 5V
HC-SR04 GNDGNDMass chung

⚠️ Nên dùng nguồn riêng cho Servo nếu quay liên tục, tránh sụt áp ESP32.

💻 3. Code mẫu: Servo quay + đo khoảng cách HC-SR04

/*
 * Bài 12 - IoTLabs Motor Course
 * Kết hợp Servo và HC-SR04 để tạo Radar mini
 */

#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("Mini Radar 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() {
  for (int pos = 0; pos <= 180; pos += 5) {
    myServo.write(pos);
    delay(200);
    int dist = getDistance();
    Serial.print("Góc: "); Serial.print(pos);
    Serial.print("° | Khoảng cách: "); Serial.print(dist); Serial.println(" cm");
  }

  for (int pos = 180; pos >= 0; pos -= 5) {
    myServo.write(pos);
    delay(200);
    int dist = getDistance();
    Serial.print("Góc: "); Serial.print(pos);
    Serial.print("° | Khoảng cách: "); Serial.print(dist); Serial.println(" cm");
  }
}

Kết quả:
Servo quay cảm biến HC-SR04 sang trái – phải liên tục, đo khoảng cách tại mỗi góc, in kết quả ra Serial Monitor (hoặc vẽ biểu đồ radar trên Processing / Python sau này).

🧠 4. Giải thích chi tiết

  • Servo giúp xoay cảm biến HC-SR04 theo nhiều góc.
  • Mỗi lần dừng ở 1 góc → đo khoảng cách bằng pulseIn().
  • Từ đó có thể vẽ bản đồ không gian 2D quanh robot.
  • Dữ liệu có thể gửi qua Serial, Bluetooth hoặc WiFi để hiển thị trực quan.

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

  • Hiểu cách kết hợp hai linh kiện khác loại (servo + sensor).
  • Lập trình đo – điều khiển phối hợp theo góc quay.
  • Chuẩn bị cho bài tiếp theo: Xe robot radar tự tránh vật cản.

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

  • Hiển thị bản đồ radar 2D bằng Python hoặc Processing.
  • Kết hợp OLED hoặc LCD hiển thị kết quả trực tiếp.
  • Thêm AI phân tích vùng trống để chọn hướng 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
Servo SG901Gắn cảm biến HC-SR04
HC-SR041Đo khoảng cách
Nguồn 5V1Cho Servo và cảm biến
Dây nối

🚀 8. Kết luận

Bạn vừa tạo ra một mô hình radar mini thông minh — bước tiến quan trọng trong lĩnh vực robot tự hành.

Khi kết hợp servo (động học) và cảm biến siêu âm (nhận thức), robot của bạn có thể “nhìn” và “phản ứng” với môi trường xung quanh – giống như một hệ thống AI cơ bả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 *