Đọc cảm biến dò line
1. Mục tiêu bài học #
Sau bài học này, bạn sẽ:
- Hiểu nguyên lý hoạt động của cảm biến dò line.
- Đọc trạng thái 5 mắt cảm biến trên Arduino.
- Xác định vị trí vạch đen dưới cảm biến.
- Làm nền tảng cho các bài xe dò line tự động sau này.
2. Giới thiệu module cảm biến dò line 5 mắt TCRT5000 #
Cảm biến dò line 5 mắt là một trong những cảm biến phổ biến nhất trong các robot dò line.
Module gồm:
- 5 cặp LED phát hồng ngoại và mắt thu.
- 5 đèn LED báo trạng thái.
- 5 chân tín hiệu Digital.
Nguyên lý hoạt động
LED hồng ngoại phát ánh sáng xuống mặt đất.
Khi gặp nền trắng
Màu trắng phản xạ ánh sáng mạnh.
➡ Mắt thu nhận được nhiều ánh sáng.
➡ Ngõ ra Digital = HIGH.
Khi gặp vạch đen
Màu đen hấp thụ ánh sáng.
➡ Mắt thu nhận ít ánh sáng.
➡ Ngõ ra Digital = LOW.
Ví dụ:
| Bề mặt | Giá trị Digital |
|---|
| Trắng | 1 |
| Đen | 0 |
Vị trí các mắt cảm biến
L2 L1 C R1 R2
| | | | |
[ ] [ ] [ ] [ ] [ ]
Trong đó:
- L2: ngoài cùng bên trái
- L1: trái
- C: giữa
- R1: phải
- R2: ngoài cùng bên phải
4. Sơ đồ kết nối #
5. Code đọc cảm biến line cơ bản #
#define L2_PIN 8
#define L1_PIN 9
#define C_PIN 10
#define R1_PIN 11
#define R2_PIN 12
void setup()
{
Serial.begin(9600);
pinMode(L2_PIN, INPUT);
pinMode(L1_PIN, INPUT);
pinMode(C_PIN, INPUT);
pinMode(R1_PIN, INPUT);
pinMode(R2_PIN, INPUT);
}
void loop()
{
int l2 = digitalRead(L2_PIN);
int l1 = digitalRead(L1_PIN);
int c = digitalRead(C_PIN);
int r1 = digitalRead(R1_PIN);
int r2 = digitalRead(R2_PIN);
Serial.print(l2);
Serial.print(" ");
Serial.print(l1);
Serial.print(" ");
Serial.print(c);
Serial.print(" ");
Serial.print(r1);
Serial.print(" ");
Serial.println(r2);
delay(100);
}5. Nạp code và kiểm tra #
Bước 1: Nạp code
Bước 2: Mở Serial Monitor
Chọn:
- Baudrate: 9600
Bạn sẽ thấy:
Khi tất cả cảm biến nằm trên nền trắng:
1 1 1 1 1
Khi mắt giữa nằm trên vạch đen:
1 1 0 1 1
Khi vạch nằm lệch trái:
1 0 0 1 1
Khi vạch nằm lệch phải:
1 1 0 0 1
Có thể sửa code như sau để hiển thị rõ ràng hơn
void loop()
{
int l2 = digitalRead(L2_PIN);
int l1 = digitalRead(L1_PIN);
int c = digitalRead(C_PIN);
int r1 = digitalRead(R1_PIN);
int r2 = digitalRead(R2_PIN);
Serial.print("L2=");
Serial.print(l2);
Serial.print(" L1=");
Serial.print(l1);
Serial.print(" C=");
Serial.print(c);
Serial.print(" R1=");
Serial.print(r1);
Serial.print(" R2=");
Serial.println(r2);
delay(100);
}Ví dụ:
L2=1 L1=1 C=0 R1=1 R2=1
Ta có thể suy ra vị trí của line như sau:
| Trạng thái | Vị trí line |
|---|---|
| 1 1 0 1 1 | Chính giữa |
| 1 0 1 1 1 | Lệch trái |
| 0 1 1 1 1 | Rất lệch trái |
| 1 1 1 0 1 | Lệch phải |
| 1 1 1 1 0 | Rất lệch phải |
7. Một số lưu ý #
Điều chỉnh độ cao
Khoảng cách tốt nhất:
5mm ~ 15mm
so với mặt sàn.
Nếu quá cao:
- Khó phát hiện line.
- Dễ bị nhiễu.
Màu line
Hoạt động tốt nhất với:
- Vạch đen.
- Nền trắng.
Ví dụ:
Nền trắng + line đen
hoặc
Nền vàng nhạt + line đen
8. Ứng dụng #
Encoder thường dùng để:
9. Tổng kết #
Sau bài học này bạn đã:
- Hiểu nguyên lý cảm biến dò line TCRT5000.
- Đọc được dữ liệu từ 5 mắt cảm biến.
- Xác định được vị trí tương đối của vạch line.
- Sẵn sàng xây dựng robot dò line ở bài học tiếp theo.