Bài 19 · Công nghệ · Tin học
Cảm biến dò line
phân biệt vạch và nền bằng ánh sáng hồng ngoại phản xạ
Một LED hồng ngoại chiếu xuống mặt giấy, một mắt thu nhìn phần ánh sáng dội lại. Nền trắng và vạch đen phản xạ khác nhau, nhưng kết quả còn phụ thuộc khoảng cách và ánh sáng phòng. Đó là lí do xe dò line cần được chỉnh trên chính đường chạy.
01 Mục tiêu và yêu cầu cần đạt
Tôi tách bài cảm biến khỏi bài xe robot. Khi chưa biết cảm biến phân loại đúng ở khoảng cách nào, ghép thêm động cơ chỉ làm lỗi khó tìm hơn. Bài này kết thúc khi học sinh chứng minh được tỉ lệ nhận đúng trên một đường thử cố định.
Sau bài này học sinh làm được
- Nêu được nguyên lí phát–thu ánh sáng hồng ngoại phản xạ.
- Đọc tín hiệu số kích mức thấp từ GPIO27.
- Điều chỉnh biến trở ngưỡng bằng hai mẫu đen và trắng.
- Khảo sát ảnh hưởng của độ cao và bề mặt bóng.
- Tính tỉ lệ phân loại đúng từ nhiều lần thử.
- Công nghệ — cảm biến, kiểm thử và tối ưu giải pháp kĩ thuật.
- Tin học — dữ liệu Boolean, rẽ nhánh và đo chất lượng thuật toán phân loại.
Chọn yêu cầu cần đạt đúng khối lớp khi chuyển thành kế hoạch bài dạy.
02 Lí thuyết
Đen và trắng phản xạ khác nhau
LED trên module phát ánh sáng hồng ngoại. Mặt trắng thường phản xạ nhiều ánh sáng về mắt thu hơn mặt đen. Mạch so sánh trên module đối chiếu tín hiệu với ngưỡng do biến trở đặt, rồi đưa ra chân DO chỉ còn hai trạng thái.
Khoảng cách là một phần của phép đo
Quá xa thì cả đen và trắng đều phản xạ yếu. Quá gần có thể làm mắt thu bão hoà hoặc cọ vào đường. Cảm biến còn bị ánh nắng và bề mặt bóng làm nhiễu. Một độ cao tốt phải cho hai mẫu ổn định qua nhiều lần thử, không chỉ đúng một lần.
Module trong hồ sơ bo cho DO = 0 khi gặp vạch. Mã đổi ngay thành
biến gap_vach đúng hoặc sai để phần còn lại dễ đọc. Nếu thay module,
phải thử lại chứ không tự đổi bảng chân.
03 Linh kiện
| Linh kiện | Mô tả, lưu ý khi mua | Số lượng · giá |
|---|---|---|
| ESP32 DevKit V1 | Bo 30 chân | 1 · 90–150k |
| Module dò line hồng ngoại | Một mắt, có ngõ DO và biến trở chỉnh ngưỡng | 1 · 10–20k |
| LED 5 mm và điện trở 220 Ω | Đèn báo gặp vạch | 1 bộ · 700đ |
| Giấy trắng và băng dính đen mờ | Làm đường thử rộng 18–25 mm | 1 bộ |
| Miếng kê 5–20 mm | Giữ độ cao cảm biến | vài miếng |
04 Lắp mạch và sơ đồ nối dây
| Khối | Nối dây | Nguồn |
|---|---|---|
| Nguồn module | VCC → 3V3 · GND → GND | Dùng 3,3 V theo hồ sơ bo |
| Tín hiệu số | DO → GPIO27 | Module kích mức thấp được xử lí trong mã |
| LED | GPIO23 → 220 Ω → LED → GND | Sáng khi nhận vạch đen |
| Mặt cảm biến | Hướng xuống giấy, không chạm bề mặt | Bắt đầu ở độ cao khoảng 8 mm |
Module được cố định song song mặt giấy bằng miếng kê, phía dưới là băng dính đen trên giấy trắng.
Khung giữ chỗ — thay bằng ảnh chụp thật khi cóVCC nối 3V3, GND chung, DO nối GPIO27, LED ngoài nối GPIO23.
Khung giữ chỗ — thay bằng ảnh chụp thật khi cóMa trận thử ba độ cao với nền trắng, băng đen mờ và bề mặt đen bóng.
Khung giữ chỗ — thay bằng ảnh chụp thật khi cóLàm một đường thử lặp lại được
- Dán băng đen mờ thẳng trên giấy trắng, tránh nếp nhăn và mép bong.
- Nối
VCC → 3V3,GND → GND,DO → GPIO27. - Lắp LED ngoài ở
GPIO23qua điện trở 220 Ω. - Cố định cảm biến song song mặt giấy, bắt đầu ở độ cao khoảng 8 mm.
- Đưa trắng rồi đen qua bên dưới; chỉnh biến trở rất chậm tới khi DO đổi ổn định.
Ánh sáng hồng ngoại khó thấy bằng mắt. Không áp mắt sát module để kiểm tra LED; quan sát đèn báo trên module hoặc dùng camera điện thoại từ khoảng cách bình thường.
Biến trở nhỏ và khá mỏng. Dùng tua vít phù hợp, xoay nhẹ từng chút; khi đã tới cuối hành trình thì dừng, không cố vặn thêm.
05 Mã nguồn
Mã dùng MicroPython cho ESP32. Module cấp 3,3 V và chỉ đọc DO; bài chưa điều khiển động cơ hay xe.
Bước 1 — phân biệt vạch và nền# Bai 19 - Cam bien do line mot mat
from machine import Pin
import time
# ===== CẤU HÌNH =====
CHAN_LINE = 27
CHAN_LED = 23
CHU_KY_MS = 100
# ====================
cam_bien = Pin(CHAN_LINE, Pin.IN)
led = Pin(CHAN_LED, Pin.OUT)
while True:
# Module trong ho so bo kich muc thap: 0 nghia la gap vach.
gap_vach = cam_bien.value() == 0
if gap_vach:
led.on()
print("Vach den")
else:
led.off()
print("Nen trang")
time.sleep_ms(CHU_KY_MS) Nếu màn hình luôn in một trạng thái, giữ nguyên mã và kiểm tra lần lượt nguồn, độ cao, biến trở ngưỡng. Chỉ khi module thật sự có logic ngược mới cần xem lại cấu hình.
Bước 2 — đếm số lần phân loại đúng# Moi lan chay, dat MAU_THAT la "d" (den) hoac "t" (trang)
from machine import Pin
import time
cam_bien = Pin(27, Pin.IN)
MAU_THAT = "d"
so_dung = 0
for lan in range(20):
gap_vach = cam_bien.value() == 0
du_doan = "d" if gap_vach else "t"
if du_doan == MAU_THAT:
so_dung += 1
print("Cam bien:", du_doan, "| Dung:", so_dung, "/", lan + 1)
time.sleep_ms(500)
Chạy 20 lần với mẫu đen và MAU_THAT = "d", rồi làm lại trên giấy
trắng với MAU_THAT = "t". Dịch cảm biến nhẹ giữa các lần để phép thử
không lặp đúng một điểm duy nhất.
Em mô tả bằng tiếng Việt, hệ thống dựng thuật toán và chương trình, rồi nạp thẳng xuống ESP32 qua Wi-Fi.
06 Hiệu chuẩn và kiểm thử
Tìm độ cao làm việc tốt nhất
| Độ cao | Đúng trên trắng/10 | Đúng trên đen/10 | Tổng đúng/20 | Ghi chú |
|---|---|---|---|---|
| 5 mm | … | … | … | … |
| 8 mm | … | … | … | … |
| 12 mm | … | … | … | … |
| 20 mm | … | … | … | … |
Danh sách kiểm
- Module cấp 3,3 V, DO nối GPIO27.
- Cảm biến cố định song song mặt giấy.
- Biến trở được chỉnh bằng cả mẫu đen và trắng.
- Độ cao được chọn từ ít nhất 20 lần thử.
- LED GPIO23 báo đúng theo biến
gap_vach.
07 Kinh nghiệm và cạm bẫy
Khi dựng bài, tôi dùng băng keo điện đen bóng. Ở một góc, nó phản chiếu tia hồng ngoại thẳng về mắt thu và bị nhận nhầm là nền sáng. Đổi sang băng đen mờ và giữ cảm biến song song làm kết quả ổn định hơn hẳn.
Đèn nhỏ trên module cho biết bộ so sánh đã đổi trạng thái, nhưng sản phẩm cần đọc đúng ở ESP32. Nếu đèn module đổi mà mã không đổi, kiểm tra dây DO và GND chung.
08 Ứng dụng trong dạy học
Tin học — một bộ phân loại hai lớp
Đen và trắng là hai nhãn; trạng thái DO là dự đoán. Từ 20 phép thử, học sinh tính độ chính xác và xem riêng lỗi trên từng lớp. Đây là phiên bản rất cụ thể của bài toán phân loại.
Công nghệ — chưa cần xe vẫn học được phần cốt lõi
Độ cao, vật liệu đường và ánh sáng ngoài là các ràng buộc thiết kế. Chốt được chúng trước giúp bài xe robot sau này dành thời gian cho điều khiển động cơ.
Hoạt động 1 — Xác định vấn đề. Cần chọn vật liệu vạch để robot mô hình nhận ổn định.
Tiêu chí sản phẩm: đúng ít nhất 18/20 lần; làm việc ở độ cao có thể lắp được; dùng 3,3 V.
Hoạt động 2 — Kiến thức nền. Phản xạ hồng ngoại, ngưỡng và logic kích thấp.
Hoạt động 3 — Đề xuất phương án. Chọn băng mờ, độ rộng vạch và cơ cấu giữ độ cao.
Hoạt động 4 — Chế tạo và thử. Thử chéo các vật liệu ở nhiều độ cao.
Hoạt động 5 — Báo cáo và điều chỉnh. Chọn cấu hình có tổng lỗi thấp nhất và nêu điều kiện sử dụng.
- Thử dưới ánh sáng phòng và gần cửa sổ.
- So băng đen mờ, mực in và giấy màu.
- Ghép hai cảm biến để xác định vạch lệch trái hay phải.
- Hướng thi Khoa học kĩ thuật: vật liệu dẫn đường bền và dễ nhận cho robot giáo dục.