Cảm biến

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

7 phút đọc05/07/2026HocLapTrinhRobot
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 động3.3 - 5VDù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ệc1 - 8 mm, tối ưu 2.5 mmQuá cao là mất tín hiệu
Bước sóng950 nm (hồng ngoại)Mắt người không nhìn thấy
Đầu ra moduleD0 (digital) và A0 (analog)Tùy phiên bản module
Giá module đơn8.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 — digitalRead là 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):

ModuleChân moduleChân ESP32Ghi chú
Mắt tráiD0GPIO 34Input-only, hợp làm đầu vào
Mắt giữaD0GPIO 35Input-only
Mắt phảiD0GPIO 32ADC1, đọc analog được nếu cần
Cả 3VCC3V3Chạy 3.3V để D0 trả mức 3.3V an toàn
Cả 3GNDGNDChung 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

cpp
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ứngNguyên nhân thường gặpCách sửa
Không phân biệt được đen/trắngCảm biến gắn quá caoHạ xuống 3-5 mm cách sàn
Chạy tốt trong nhà, loạn ngoài trờiNắng chứa hồng ngoại làm nhiễuChe nắng cho cảm biến, chỉnh lại biến trở tại sân
Lúc được lúc khôngBiến trở chỉnh sát ngưỡngChỉ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 cuaTốc độ cao hơn khả năng thuật toánGiảm BASE hoặc nâng cấp lên PID
Nhiễu khi động cơ chạyDâ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.

Tải PDF
Chia sẻ bài viết