(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 Pin | Ghi chú |
|---|---|---|
| Servo SG90 (Signal) | GPIO5 | Điều khiển góc quay |
| HC-SR04 Trig | GPIO12 | Phát xung siêu âm |
| HC-SR04 Echo | GPIO14 | Nhận phản xạ |
| 5V | VCC cả hai | Nguồn servo + cảm biến |
| GND | Mass 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
minDistlưu khoảng cách nhỏ nhất trong quá trình quét.bestAnglelư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ện | Số lượng | Ghi chú |
|---|---|---|
| ESP32 DevKit 38 Pin | 1 | Bộ điều khiển chính |
| Servo SG90 | 1 | Gắn cảm biến |
| HC-SR04 | 1 | Đo khoảng cách |
| Nguồn 5V / pin | 1 | Nguồ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).


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