Cách robot dò line hoạt động
6 phút đọc02/05/2024Lê Minh Tùng

Nguyên lý hoạt động của robot dò line và hướng dẫn lắp ráp, lập trình chi tiết. Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết và ứng dụng thực tế trong robot.
Cách robot dò line hoạt động
Nguyên lý cơ bản
Robot dò line dùng cảm biến hồng ngoại (IR) để phân biệt đường đen và nền trắng:
- Nền trắng: phản xạ nhiều IR → photodiode nhận sáng → output thấp (theo module)
- Đường đen: hấp thụ IR → photodiode nhận ít sáng → output cao
Module TCRT5000
Cấu tạo gồm:
- LED IR phát 940nm
- Photodiode thu tia phản xạ
- LM393 comparator so sánh với ngưỡng
- Trimmer điều chỉnh ngưỡng nhạy
Lắp ráp 3 cảm biến
code
Bố trí cảm biến: [L] [C] [R]
↓ ↓ ↓
[đường đen]- Cách mặt đường: 5–8mm (tối ưu)
- Khoảng cách giữa các sensor: 1.5–2.5cm
- Kết nối: VCC=5V, GND, D0 → Arduino pin 2/3/4
Code bang-bang đơn giản
cpp
const int IR_L = 2, IR_C = 3, IR_R = 4;
const int IN1=5, IN2=6, IN3=7, IN4=8;
const int ENA=9, ENB=10;
const int SPD = 180;
void setup() {
for (int p : {IN1,IN2,IN3,IN4,ENA,ENB}) pinMode(p, OUTPUT);
for (int p : {IR_L,IR_C,IR_R}) pinMode(p, INPUT);
analogWrite(ENA, SPD); analogWrite(ENB, SPD);
}
void loop() {
bool L = !digitalRead(IR_L); // LOW = đen (tùy module)
bool C = !digitalRead(IR_C);
bool R = !digitalRead(IR_R);
if (!L && C && !R) {
// Đúng line: tiến
digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW);
} else if (L && !R) {
// Lệch trái → rẽ trái
digitalWrite(IN1,LOW); digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW);
} else if (!L && R) {
// Lệch phải → rẽ phải
digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW); digitalWrite(IN4,HIGH);
}
}Nâng cấp lên Proportional Control
Thay vì ON/OFF, điều chỉnh tốc độ tỉ lệ với mức lệch:
cpp
// Đọc vị trí line: -1000 (trái) đến +1000 (phải)
int linePos() {
int l = analogRead(A0), c = analogRead(A1), r = analogRead(A2);
// Giả sử đen = giá trị cao
long w = (long)(-1000)*l + 0*c + (long)(1000)*r;
long s = l + c + r;
return s ? (int)(w / s) : 0;
}
float Kp = 0.15f;
int BASE = 160;
void loop() {
int err = linePos();
int corr = (int)(Kp * err);
analogWrite(ENA, constrain(BASE + corr, 0, 255));
analogWrite(ENB, constrain(BASE - corr, 0, 255));
digitalWrite(IN1,HIGH); digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH); digitalWrite(IN4,LOW);
}Tips tối ưu robot dò line
- Hiệu chỉnh trimmer trước khi chạy — LED indicator bật trên trắng, tắt trên đen
- Tốc độ phù hợp — không quá nhanh ở góc cua
- Nguồn pin đầy — motor yếu làm robot lệch
- Mặt đường phẳng — bề mặt gồ ghề gây nhiễu cảm biến
Gợi ý dùng bài viết trong lớp học
Câu hỏi khởi động
- Linh kiện/kỹ thuật trong bài giải quyết vấn đề gì trong robot thật?
- Nếu nối sai nguồn hoặc đọc sai tín hiệu, robot sẽ biểu hiện như thế nào?
- Có cách nào đo hoặc quan sát hiện tượng thay vì đoán lỗi không?
Hoạt động thực hành nhanh
- Giáo viên cho học viên xem linh kiện hoặc sơ đồ liên quan đến chủ đề Cách robot dò line hoạt động.
- Học viên dự đoán chân nguồn, chân tín hiệu và dữ liệu đầu ra.
- Chạy code mẫu ở cấu hình an toàn, sau đó thay đổi một tham số.
- Mỗi nhóm ghi nhận lỗi gặp phải và cách kiểm tra theo thứ tự nguồn, GND, tín hiệu, code.
Checklist kỹ thuật
- Luôn kiểm tra điện áp hoạt động trước khi nối với board điều khiển.
- In dữ liệu ra Serial Monitor khi làm việc với cảm biến hoặc thuật toán.
- Với motor/servo, cấp nguồn tải riêng và nối chung GND với board.
- Ghi lại thông số đã calibration để lần sau không phải chỉnh lại từ đầu.
Câu hỏi ôn tập
- Thông số nào quan trọng nhất khi chọn linh kiện này cho robot?
- Lỗi nào dễ xảy ra nhất trong lớp học và cách phát hiện nhanh nhất là gì?
- Có thể mở rộng kiến thức này thành dự án robot nào?
Tài nguyên tải về
Tải bản PDF của bài viết để in giáo án hoặc gửi trước cho học viên.
Chia sẻ bài viết