Cảm biến dò line TCRT5000 - nguyên lý, đấu nối ESP32 và code mẫu

TCRT5000 phát hồng ngoại xuống sàn và đo phản xạ để phân biệt vạch đen nền trắng. Nguyên lý, chỉnh biến trở, đấu nối ESP32 và code dò line 3 mắ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.
TCRT5000 là gì?
TCRT5000 là cảm biến quang phản xạ hồng ngoại của hãng Vishay, gồm hai phần đặt cạnh nhau trong một vỏ nhựa đen: một LED phát hồng ngoại và một phototransistor thu. Cảm biến phát tia hồng ngoại xuống mặt sàn; sàn trắng phản xạ mạnh làm phototransistor dẫn mạnh, vạch đen hấp thụ ánh sáng làm phototransistor gần như không dẫn. Đo mức dẫn này, robot phân biệt được mình đang ở trên nền trắng hay vạch đen.
Đây là cảm biến dò line phổ biến nhất trong robot giáo dục nhờ giá rẻ (module đơn 8.000-15.000 đ), dễ dùng và đủ nhanh cho cả robot thi đấu.
Thông số kỹ thuật
| Thông số | Giá trị | Ghi chú |
|---|---|---|
| Điện áp hoạt động | 3.3 - 5V | Dùng thẳng với ESP32 lẫn Arduino |
| Dòng tiêu thụ | ~20-25 mA (chủ yếu LED phát) | Mảng 5 mắt ăn ~100-125 mA |
| Khoảng cách làm việc | 1 - 8 mm, tối ưu 2.5 mm | Quá cao là mất tín hiệu |
| Bước sóng | 950 nm (hồng ngoại) | Mắt người không nhìn thấy |
| Đầu ra module | D0 (digital) và A0 (analog) | Tùy phiên bản module |
| Giá module đơn | 8.000 - 15.000 đ | Mảng 5 mắt: 45.000 - 80.000 đ |
Điểm quan trọng nhất bảng trên: khoảng cách cảm biến tới sàn chỉ 1-8 mm. Gắn cảm biến cao hơn 1 cm là nguyên nhân số một khiến robot dò line "mù" — hãy thiết kế giá gắn sao cho mặt cảm biến cách sàn khoảng 3-5 mm.
Module TCRT5000 có gì trên mạch?
Module thương mại thêm vào con cảm biến trần: điện trở hạn dòng LED, biến trở chỉnh ngưỡng, IC so sánh LM393 và 2 đèn báo. Nhờ đó module có hai kiểu đầu ra:
- Chân D0 (digital): LM393 so sánh tín hiệu với ngưỡng đặt bởi biến trở, trả HIGH/LOW rõ ràng. Dễ dùng nhất —
digitalReadlà xong - Chân A0 (analog): điện áp thô từ phototransistor, cho biết "độ đen" liên tục. Cần thiết cho thuật toán PID vì cho biết vạch lệch bao nhiêu chứ không chỉ có/không
Quy tắc chỉnh biến trở: đặt cảm biến trên nền trắng đúng độ cao làm việc, xoay biến trở đến khi đèn báo D0 vừa chuyển trạng thái, rồi kiểm tra lại trên vạch đen. Chỉnh ở chính điều kiện ánh sáng của sân chạy — ánh nắng chứa nhiều hồng ngoại làm ngưỡng sáng lệch hẳn so với trong nhà.
Đấu nối với ESP32
Robot dò line cơ bản dùng 3 mắt (trái, giữa, phải):
| Module | Chân module | Chân ESP32 | Ghi chú |
|---|---|---|---|
| Mắt trái | D0 | GPIO 34 | Input-only, hợp làm đầu vào |
| Mắt giữa | D0 | GPIO 35 | Input-only |
| Mắt phải | D0 | GPIO 32 | ADC1, đọc analog được nếu cần |
| Cả 3 | VCC | 3V3 | Chạy 3.3V để D0 trả mức 3.3V an toàn |
| Cả 3 | GND | GND | Chung mass với ESP32 |
Mẹo an toàn: nuôi module bằng 3V3 của ESP32 thì tín hiệu D0/A0 tự động nằm trong mức 3.3V, khỏi cần chia áp. Độ nhạy giảm không đáng kể so với nuôi 5V.
Code mẫu - dò line 3 mắt kiểu bậc thang
const int LEFT = 34, CENTER = 35, RIGHT = 32;
const int IN1 = 26, IN2 = 27, IN3 = 14, IN4 = 12;
const int ENA = 25, ENB = 13;
const int BASE = 150; // tốc độ nền 0-255
void setup() {
Serial.begin(115200);
pinMode(LEFT, INPUT); pinMode(CENTER, INPUT); pinMode(RIGHT, INPUT);
pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
ledcAttach(ENA, 1000, 8);
ledcAttach(ENB, 1000, 8);
digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); // hai bánh tiến
digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}
void loop() {
// module thường trả LOW khi thấy vạch đen (tùy phiên bản, kiểm tra đèn báo)
bool onLeft = digitalRead(LEFT) == LOW;
bool onCenter = digitalRead(CENTER) == LOW;
bool onRight = digitalRead(RIGHT) == LOW;
if (onCenter && !onLeft && !onRight) { // giữa vạch: chạy thẳng
ledcWrite(ENA, BASE); ledcWrite(ENB, BASE);
} else if (onLeft) { // vạch lệch trái: rẽ trái
ledcWrite(ENA, BASE / 3); ledcWrite(ENB, BASE);
} else if (onRight) { // vạch lệch phải: rẽ phải
ledcWrite(ENA, BASE); ledcWrite(ENB, BASE / 3);
} else { // mất vạch: chậm lại giữ hướng cũ
ledcWrite(ENA, BASE / 2); ledcWrite(ENB, BASE / 2);
}
}Thuật toán bậc thang này (rẽ theo 3 mức) đủ cho robot chạy đường cong nhẹ ở tốc độ vừa. Muốn chạy nhanh và mượt trên đường gấp khúc, chuyển sang đọc chân A0 của 5 mắt và điều khiển PID — xem bài Tinh chỉnh PID cho robot dò line ở mục Kiến thức.
Vì sao robot dò line chạy sai? Bảng chẩn đoán
| Triệu chứng | Nguyên nhân thường gặp | Cách sửa |
|---|---|---|
| Không phân biệt được đen/trắng | Cảm biến gắn quá cao | Hạ xuống 3-5 mm cách sàn |
| Chạy tốt trong nhà, loạn ngoài trời | Nắng chứa hồng ngoại làm nhiễu | Che nắng cho cảm biến, chỉnh lại biến trở tại sân |
| Lúc được lúc không | Biến trở chỉnh sát ngưỡng | Chỉnh lại với khoảng dư (đèn báo chuyển dứt khoát) |
| Trượt khỏi vạch ở khúc cua | Tốc độ cao hơn khả năng thuật toán | Giảm BASE hoặc nâng cấp lên PID |
| Nhiễu khi động cơ chạy | Dây cảm biến đi sát dây động cơ | Tách dây, thêm tụ 100nF sát VCC-GND module |
| Đọc ngược (trắng ra LOW) | Phiên bản module đảo logic | Đảo phép so sánh trong code |
Biến thể và nâng cấp
- Mảng 5-8 mắt (TCRT5000 array): chuẩn thi đấu, cho biết vị trí vạch chính xác hơn để chạy PID; giá 45.000-120.000 đ
- QTR-8A của Pololu: mảng 8 mắt chất lượng cao, tín hiệu analog sạch, giá cao hơn (~400.000 đ)
- Cảm biến màu TCS34725: khi sân thi có vạch nhiều màu (xanh, đỏ) mà hồng ngoại không phân biệt được
Câu hỏi thường gặp
TCRT5000 đọc được trên nền màu nào?
Nguyên tắc: đo độ phản xạ hồng ngoại, nên phân biệt tốt các cặp sáng/tối — trắng với đen là lý tưởng. Nền xám với vạch đen khó hơn; xanh dương đậm với đen gần như không phân biệt được. Sân thi chuẩn luôn là nền trắng vạch đen 1.5-3 cm.
Dùng bao nhiêu mắt dò line là hợp lý?
2 mắt đủ cho bám vạch chậm (kẹp vạch giữa 2 mắt); 3 mắt xử lý được giao cắt cơ bản; 5 mắt là chuẩn thi đấu với PID; 8 mắt cho đường đua phức tạp tốc độ cao. Người mới bắt đầu với 3 mắt là cân bằng nhất.
Vạch line làm bằng gì để robot tập chạy ở nhà?
Băng keo điện đen dán trên nền gạch trắng hoặc tấm formex trắng là đủ chuẩn. Bề rộng vạch 1.5-2 cm (một lớp băng keo điện). In sân trên bạt hiflex cũng tốt nhưng tránh loại bạt bóng gây phản xạ lóa.
TCRT5000 có dùng làm việc khác ngoài dò line không?
Có: đếm vòng quay bánh xe (dán giấy đen trắng xen kẽ lên vành bánh — thành encoder tự chế), phát hiện vật đến gần trong 1-8 mm, phát hiện mép bàn cho robot không rơi (chĩa xuống, mất phản xạ nghĩa là hết mặt bàn).
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.



