Lab.Vatli365
← Cấp độ 3 · Cảm biến đơn giản

Bài 14 · Vật lí · Công nghệ

Cảm biến ánh sáng bằng quang trở
biến ánh sáng thành một con số có thể đo và so sánh

Một quang trở không nói với ESP32 rằng phòng đang sáng hay tối. Nó chỉ đổi điện trở. Ta ghép thêm một điện trở cố định, đọc điện áp ở giữa rồi tự đặt ranh giới sáng–tối từ số liệu thật.

Thời lượng
1 tiết (45 phút)
Chi phí một nhóm
≈ 3 nghìn đồng (chưa tính bo)
Cấp độ
3 / 12
Trạng thái
Đã có phần cứng, đang hoàn thiện
01

Mục tiêu và yêu cầu cần đạt

Tôi thường bắt đầu bằng cách cho học sinh che quang trở bằng bàn tay. Con số trên màn hình đổi ngay, nhưng chưa ai được gọi nó là “lux”. Đây chỉ là một số đo tương đối của đúng mạch đang cầm.

Sau bài này học sinh làm được

  • Giải thích vì sao phải ghép quang trở thành cầu phân áp trước khi đọc ADC.
  • Thu số liệu ở hai điều kiện sáng và tối, rồi chọn một ngưỡng nằm giữa.
  • Dùng cấu trúc if để bật LED khi trời tối.
  • Phân biệt phép đo tương đối với phép đo độ rọi theo đơn vị lux.
  • Nhận ra ảnh hưởng của vị trí, góc chiếu và ánh sáng nền đến kết quả.
Gắn với chương trình
  • Vật lí — điện trở phụ thuộc điều kiện vật lí; hiệu điện thế và cầu phân áp.
  • Công nghệ — cảm biến, tín hiệu đầu vào và điều khiển theo ngưỡng.

Khi đưa vào KHBD, đối chiếu và trích đúng yêu cầu cần đạt của khối lớp đang dạy.

02

Lí thuyết

ESP32 không đo điện trở trực tiếp

Quang trở có điện trở giảm khi nhận nhiều ánh sáng. Chân ADC lại chỉ đo điện áp. Vì vậy ta mắc quang trở nối tiếp với điện trở 10 kΩ. Điện áp tại điểm giữa thay đổi theo tỉ lệ của hai điện trở, và ADC đổi điện áp ấy thành số từ 0 đến 4095.

Dấu so sánh phụ thuộc cách mắc

Trong sơ đồ của bài, quang trở nằm phía 3V3. Khi sáng, điện trở của nó giảm nên điện áp ở điểm đo tăng; số ADC thường tăng. Nếu đổi vị trí hai linh kiện, chiều biến thiên sẽ đảo lại. Bởi vậy chương trình không được đoán dấu < hay >; phải nhìn hai mốc thật trước.

Tại sao không gọi số ADC là lux

Lux là đơn vị độ rọi và cần cảm biến đã có đặc tuyến, hiệu chuẩn phù hợp. Quang trở rẻ tiền khác nhau giữa từng chiếc, phản ứng còn phụ thuộc màu ánh sáng và nhiệt độ. Bài này chỉ kết luận “sáng hơn”, “tối hơn” trong cùng một bố trí.

03

Linh kiện

Linh kiệnMô tả, lưu ý khi muaSố lượng · giá
ESP32 DevKit V1Bo 30 chân1 · 90–150k
Quang trở LDRLoại 5 mm thông dụng1 · 1–2k
Điện trở 10 kΩTạo cầu phân áp với quang trở1 · 200đ
LED 5 mm và điện trở 220 ΩĐèn báo khi tối1 bộ · 700đ
Breadboard và dây cắmDây đực–đực1 bộ
04

Lắp mạch và sơ đồ nối dây

Đỏ · nguồn dương Đen · GND Vàng · SCL Xanh dương · SDA Trắng · tín hiệu Xanh lá · 1-Wire
KhốiNối dâyNguồn
Quang trởMột chân → 3V3 · chân còn lại → điểm đoQuang trở không phân cực
Điện trở 10 kΩĐiểm đo → 10 kΩ → GNDHai linh kiện tạo cầu phân áp
Chân đoĐiểm đo → GPIO34GPIO34 thuộc ADC1, vẫn đọc được khi Wi-Fi bật
LEDGPIO23 → 220 Ω → chân dài LED · chân ngắn → GNDĐúng bảng chân của hồ sơ bo
B14.1 Ảnh thực

Quang trở và điện trở 10 kΩ mắc nối tiếp trên breadboard, điểm giữa nối GPIO34.

Khung giữ chỗ — thay bằng ảnh chụp thật khi có
B14.2 Hình vẽ

Cầu phân áp từ 3V3 qua quang trở và điện trở 10 kΩ xuống GND, có mũi tên ánh sáng chiếu vào LDR.

Khung giữ chỗ — thay bằng ảnh chụp thật khi có
B14.3 Ảnh kết quả

Cùng một mạch ở hai trạng thái: bị che kín và được chiếu đèn, kèm hai số đọc trên màn hình.

Khung giữ chỗ — thay bằng ảnh chụp thật khi có

Lắp theo thứ tự dễ kiểm tra

  1. Rút cáp USB. Cắm quang trở từ thanh nguồn 3V3 tới một hàng trống.
  2. Từ hàng đó, cắm điện trở 10 kΩ xuống GND.
  3. Nối chính hàng giữa ấy tới GPIO34.
  4. Lắp LED ở GPIO23 qua điện trở 220 Ω.
  5. Nhờ bạn cùng nhóm dò lại đường 3V3 → LDR → điểm đo → 10 kΩ → GND rồi mới cấp nguồn.
Chỉ dùng 3,3 V của ESP32

GPIO34 không chịu được điện áp cao hơn nguồn của bo. Không nối điểm đo với 5 V, pin rời hay adapter.

Số đứng 4095 hoặc 0

Nếu số luôn sát 4095, thường là thiếu nhánh điện trở xuống GND. Nếu luôn bằng 0, thường là thiếu nhánh quang trở lên 3V3. Đây là lỗi nối dây, chưa phải lỗi mã.

05

Mã nguồn

Mã dùng MicroPython cho ESP32 DevKit V1. Mạch chỉ dùng 3,3 V từ bo; không nối quang trở với nguồn ngoài.

Bước 1 — lấy hai mốc trước
# Chay doan nay truoc de lay hai moc cua chinh mach
from machine import ADC, Pin
import time

anh_sang = ADC(Pin(34))
anh_sang.atten(ADC.ATTN_11DB)

for lan in range(20):
    print(anh_sang.read())
    time.sleep_ms(100)

# Ghi trung binh khi che kin: MOC_TOI
# Ghi trung binh khi chieu den: MOC_SANG
# Goi y nguong ban dau:
# NGUONG_TOI = (MOC_TOI + MOC_SANG) // 2

Giữ nguyên vị trí mạch. Ghi 20 mẫu khi che kín và 20 mẫu khi chiếu đèn. Dùng trung bình của mỗi nhóm; đừng lấy một số duy nhất vì tay rung và ánh sáng phòng làm số đọc dao động.

Bước 2 — đèn tự bật khi tối
# Bai 14 - Doc quang tro va dieu khien LED
from machine import ADC, Pin
import time

# ===== CẤU HÌNH =====
CHAN_QUANG_TRO = 34
CHAN_LED = 23
NGUONG_TOI = 1500       # thay bang ket qua hieu chuan cua nhom
CHU_KY_MS = 200
# ====================

anh_sang = ADC(Pin(CHAN_QUANG_TRO))
anh_sang.atten(ADC.ATTN_11DB)
led = Pin(CHAN_LED, Pin.OUT)

while True:
    gia_tri = anh_sang.read()
    print("Anh sang:", gia_tri)

    # Voi cach mac cua bai nay, so nho hon la toi hon.
    if gia_tri < NGUONG_TOI:
        led.on()
    else:
        led.off()

    time.sleep_ms(CHU_KY_MS)

Thay NGUONG_TOI bằng ngưỡng của chính nhóm. Nếu LED hoạt động ngược, kiểm tra hai mốc và cách mắc trước khi đổi dấu so sánh.

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ử

Lập đường đáp ứng tương đối

Đặt đèn ở các khoảng cách cố định, giữ nguyên góc chiếu và ghi 10 mẫu cho mỗi vị trí.

Khoảng cách đènNhỏ nhấtLớn nhấtTrung bìnhLED
10 cm…………
20 cm…………
40 cm…………
Che kín…………

Danh sách kiểm

  • Số đọc thay đổi rõ khi che và khi chiếu sáng.
  • Hai mốc được lấy từ chính mạch, không chép ngưỡng của nhóm khác.
  • GPIO34 luôn nằm trong mạch 3,3 V.
  • LED ở GPIO23 bật đúng điều kiện đã mô tả.
  • Học sinh không ghi đơn vị lux cho số ADC thô.
07

Kinh nghiệm và cạm bẫy

Bóng bàn tay cũng là một biến

Khi dựng bài, tôi từng thấy số đọc giảm dù đã đưa đèn lại gần. Nguyên nhân là bàn tay đang giữ đèn che đúng quang trở. Từ đó tôi đánh dấu vị trí đặt đèn và yêu cầu tay rời khỏi vùng đo trước khi ghi số.

Ngưỡng nằm sát một mốc

LED sẽ chớp tắt liên tục nếu ngưỡng nằm trong vùng dao động của số đo. Chọn ngưỡng ở khoảng trống giữa hai nhóm số; bài sau có thể thêm hai ngưỡng để tạo độ trễ.

08

Ứng dụng trong dạy học

Vật líCông nghệToánSTEM

Vật lí — từ điện trở đến điện áp đo được

Cho học sinh dự đoán chiều thay đổi trước khi bật màn hình. Sau đó các em dùng sơ đồ cầu phân áp để giải thích kết quả, thay vì chỉ nhớ “cảm biến sáng cho số lớn”.

Toán — số trung bình và độ phân tán

Hai nhóm 20 mẫu là dữ liệu vừa đủ để tính trung bình, khoảng dao động và chọn ngưỡng. Câu hỏi hay là: ngưỡng nào vẫn đúng khi ánh sáng phòng thay đổi nhẹ?

Bài học STEM 5 hoạt động — “Đèn báo tủ sách thiếu sáng”

Hoạt động 1 — Xác định vấn đề. Một góc tủ sách thường tối, người đọc khó nhìn gáy sách.

Tiêu chí sản phẩm: LED bật ổn định khi vùng đọc tối; không chớp ở gần ngưỡng; toàn mạch dùng 3,3 V.

Hoạt động 2 — Kiến thức nền. Quang trở, cầu phân áp, ADC và ngưỡng.

Hoạt động 3 — Đề xuất phương án. Chọn vị trí cảm biến không bị chính LED chiếu vào.

Hoạt động 4 — Chế tạo và thử. Thu hai mốc vào buổi sáng và cuối buổi, rồi thử ngưỡng.

Hoạt động 5 — Báo cáo và điều chỉnh. So số lần báo sai giữa các vị trí đặt cảm biến.

Hướng mở rộng
  • Thêm hai ngưỡng sáng–tối để LED không chớp quanh ranh giới.
  • Ghi dữ liệu theo giờ để khảo sát ánh sáng tự nhiên trong lớp.
  • So quang trở với cảm biến lux BH1750 ở cấp độ sau.
  • Hướng thi Khoa học kĩ thuật: bản đồ độ sáng và đề xuất tiết kiệm điện cho phòng học.