Bài 22 · Vật lí · Hóa học · Sinh học
Đo nhiệt độ môi trường
cảm biến đầu tiên đáng tin cậy
DS18B20 là cảm biến tôi khuyên mọi thầy cô bắt đầu. Nó rẻ, chống nước, một dây đi được vài chục mét, và quan trọng nhất — nó trả về thẳng số đo bằng độ C, không bắt bạn phải tự chuyển đổi gì cả.
01 Mục tiêu và yêu cầu cần đạt
Nhiệt độ là đại lượng dễ đo nhất mà lại dùng được ở nhiều môn nhất. Một cảm biến DS18B20 phục vụ được bài nhiệt học của Vật lí, bài enthalpy của Hóa, bài hô hấp của Sinh, và bài vi khí hậu của Công nghệ.
Sau bài này học sinh làm được
- Nối và đọc được cảm biến DS18B20 qua giao thức 1-Wire.
- Giải thích được vì sao cảm biến số đáng tin hơn nhiệt kế thủy ngân trong việc theo dõi quá trình.
- Hiệu chuẩn cảm biến bằng hai mốc nhiệt độ đã biết trước.
- Xuất số liệu thành tệp CSV và vẽ được đường nhiệt độ theo thời gian.
- Chỉ ra được vị trí đặt đầu dò ảnh hưởng tới kết quả như thế nào.
- Vật lí 12 — Vật lí nhiệt: nội năng, nhiệt lượng, sự truyền nhiệt; thực hành đo nhiệt dung riêng.
- Hóa học 10 — Năng lượng hóa học: thực hiện thí nghiệm xác định biến thiên enthalpy của phản ứng.
- Sinh học 10 và 11 — ảnh hưởng của nhiệt độ tới hoạt tính enzyme; hô hấp tỏa nhiệt ở hạt nảy mầm.
- Công nghệ 11 — vi khí hậu chuồng nuôi.
Trích nguyên văn yêu cầu cần đạt từ chương trình môn học trước khi đưa vào kế hoạch bài dạy.
02 Lí thuyết
Nhiệt kế thủy ngân cho điểm rời rạc, không cho quá trình
Nó đo rất tốt một giá trị tại một thời điểm. Nhưng phần lớn hiện tượng nhiệt ở phổ thông là một quá trình: nước nóng dần, đá tan, phản ứng tỏa nhiệt rồi nguội. Muốn thấy quá trình thì cần đường liên tục, không phải ba chấm điểm.
DS18B20 đọc mỗi giây một lần suốt hai mươi phút mà không ai phải ngồi canh.
DS18B20 là cảm biến SỐ
Khác hẳn nhiệt điện trở. Trong vỏ thép nhỏ có cả một con chip: bộ cảm nhiệt,
bộ chuyển đổi sang số, hệ số hiệu chuẩn nạp sẵn từ nhà máy, và số hiệu riêng
64 bit. Nó không đưa một điện áp để ta tự đoán — nó đưa thẳng 26.44
và bảo: đây là độ C.
- Dải đo: −55 đến +125 °C.
- Sai số nhà máy: ±0,5 °C trong −10 đến +85 °C.
- Độ phân giải: 12 bit → bước 0,0625 °C.
- Thời gian đo: 750 ms ở 12 bit — con số hay bị quên nhất.
- Chiều dài dây: vài chục mét, đặt cảm biến ngoài vườn mà bo vẫn trong phòng.
1-Wire — một dây vừa nhận lệnh vừa trả lời
Hai bên cùng kéo dây xuống mức thấp theo những khoảng thời gian có quy ước, bên kia đọc độ dài các khoảng ấy.
Để dây tự nhả về mức cao, phải có điện trở 4,7 kΩ nối lên 3,3 V. Thiếu nó thì dây thả nổi và chip đọc ra rác — chi tiết mà người mới nào cũng quên đúng một lần.
Mỗi con có số hiệu 64 bit khắc sẵn, không con nào trùng. Mắc song song năm con lên cùng một dây, chương trình vẫn gọi đúng từng con.
Bài nhiệt dung riêng cần đo nhiệt độ nước và nhiệt độ phòng cùng lúc mà chỉ tốn một chân GPIO.
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 |
| DS18B20 đầu dò chống nước | Loại dây thép bọc, dài 1 m. Ba dây: đỏ, đen, vàng | 1–2 · 15–35k |
| Điện trở 4,7 kΩ | Bắt buộc, kéo dây dữ liệu lên 3V3 | 1 · 200đ |
| Breadboard và dây cắm | 1 bộ · 30k | |
| Cốc thủy tinh chịu nhiệt | Dùng cho phần hiệu chuẩn | 2 |
| Nước đá | Càng nhiều đá càng tốt | một bát |
04 Lắp mạch và sơ đồ nối dây
| Khối | Nối dây | Nguồn |
|---|---|---|
| DS18B20 | Dây đỏ → 3V3 · dây đen → GND · dây vàng → GPIO4 | 3,3 V |
| Điện trở kéo lên | Nối giữa dây vàng (GPIO4) và 3V3 | — |
Mạch trên breadboard: ESP32, đầu dò DS18B20, con điện trở 4,7 kΩ cắm giữa hàng GPIO4 và hàng 3V3. Chụp chếch 45°, thấy rõ con điện trở nằm ở đâu.
Khung giữ chỗ — thay bằng ảnh chụp thật khi cóCận cảnh ba đầu dây của DS18B20 đã tuốt vỏ, kèm nhãn màu. Nhiều loại có màu dây khác nhau — chụp đúng loại thầy cô đang dùng.
Khung giữ chỗ — thay bằng ảnh chụp thật khi cóCốc nước đá đang tan có que khuấy và đầu dò nhúng giữa cốc, màn hình bên cạnh hiện số gần 0 °C. Đây là ảnh minh chứng cho phần hiệu chuẩn.
Khung giữ chỗ — thay bằng ảnh chụp thật khi cóBa đầu dò đặt ba vị trí trong cùng một cốc nước nóng: sát đáy, sát thành, giữa cốc. Màn hình hiện ba số khác nhau.
Khung giữ chỗ — thay bằng ảnh chụp thật khi cóBốn bước
- Cắm ba dây của DS18B20 lên breadboard: đỏ vào hàng 3V3, đen vào hàng GND, vàng vào một hàng trống.
- Cắm điện trở 4,7 kΩ nối hàng dây vàng với hàng 3V3.
- Nối hàng dây vàng sang
GPIO4của ESP32. - Kiểm tra lại một lần nữa trước khi cắm USB — đặc biệt là đừng đảo đỏ với đen.
Phần lớn đầu dò DS18B20 dùng đỏ–đen–vàng. Nhưng có lô dùng đỏ–đen–trắng, thậm chí có lô dùng xanh cho GND.
Nếu nghi ngờ, đo bằng đồng hồ vạn năng ở thang thông mạch: hai dây nguồn thường nối tới vỏ thép hoặc có điện trở rất nhỏ giữa chúng. Hoặc đơn giản hơn: mua loại đã hàn sẵn module có ghi chú chân.
Cắm ngược đỏ với đen thì cảm biến nóng lên rất nhanh trong vài giây rồi hỏng. Nếu chạm tay thấy đầu dò ấm bất thường, rút điện ngay.
Trên thị trường có loại DS18B20 bán kèm một bo mạch nhỏ xíu ở đầu dây, trên đó đã hàn sẵn con điện trở 4,7 kΩ. Đắt hơn mươi nghìn.
Với lớp học, tôi khuyên mua loại này. Bớt đi một con điện trở là bớt đi một chỗ học sinh cắm sai, và bớt một câu hỏi phải trả lời tám lần mỗi buổi. Còn khi dạy riêng về 1-Wire thì mới dùng loại dây trần để giải thích vai trò của điện trở kéo lên.
05 Mã nguồn
Mã đầy đủ tại kho GitHub, thư mục cap-2/bai-11-nhiet-do/. Có kèm bản ghi ra thẻ SD và bản gửi lên web.
Chương trình chính — đọc và in ra dạng CSV# ------------------------------------------------------------
# Bai 22 - Doc nhiet do DS18B20 va ghi thanh bang CSV
# Phan cung: DS18B20 DATA -> GPIO4, dien tro 4,7k keo len 3V3
# ------------------------------------------------------------
from machine import Pin
import onewire, ds18x20, time
# ===== CAU HINH =====
CHAN_DATA = 4
CHU_KY_MS = 1000 # 1 giay mot lan doc
# ===== het phan cau hinh =====
bus = onewire.OneWire(Pin(CHAN_DATA))
cam_bien = ds18x20.DS18X20(bus)
dia_chi = cam_bien.scan()
if not dia_chi:
raise RuntimeError("Khong thay DS18B20. Kiem tra dien tro 4,7k keo len.")
print("Tim thay", len(dia_chi), "cam bien tren cung mot day.")
print("t_s,T_degC") # dong tieu de CSV
bat_dau = time.ticks_ms()
while True:
cam_bien.convert_temp()
time.sleep_ms(750) # DS18B20 can 750 ms de do xong
t = time.ticks_diff(time.ticks_ms(), bat_dau) / 1000
for dc in dia_chi:
nhiet = cam_bien.read_temp(dc)
print("{:.1f},{:.2f}".format(t, nhiet))
time.sleep_ms(CHU_KY_MS) Kết quả trên màn hình:
Tim thay 1 cam bien tren cung mot day. t_s,T_degC 1.8,26.44 3.6,26.50 5.4,26.62 7.2,26.75 9.0,26.94
Để ý dòng đầu tiên là tiêu đề CSV có kèm đơn vị. Học sinh chỉ cần bôi đen toàn bộ cửa sổ, dán vào Google Sheets, chọn tách cột theo dấu phẩy là có ngay bảng số liệu để vẽ đồ thị.
Chương trình hiệu chuẩn hai điểm# So sanh voi hai moc nhiet do da biet truoc
# - Nuoc da dang tan (hon hop nuoc + da, co khuay): 0,0 do C
# - Nuoc dang soi manh o do cao muc bien: 100,0 do C
# (o Da Lat 1500 m thi chi khoang 95 do C - hoi hoc sinh vi sao)
from machine import Pin
import onewire, ds18x20, time
cb = ds18x20.DS18X20(onewire.OneWire(Pin(4)))
dc = cb.scan()[0]
def do_trung_binh(n=20):
tong = 0
for _ in range(n):
cb.convert_temp()
time.sleep_ms(750)
tong += cb.read_temp(dc)
return tong / n
input("Nhung dau do vao nuoc da dang tan, khuay deu, roi Enter...")
t0 = do_trung_binh()
print("Doc duoc o diem bang: {:.2f} do C (lech {:+.2f})".format(t0, t0 - 0.0))
input("Nhung vao nuoc dang soi, roi Enter...")
t100 = do_trung_binh()
print("Doc duoc o diem soi : {:.2f} do C".format(t100))
print("Do lech goc =", round(t0, 2), "do C")
print("Do doc =", round((t100 - t0) / 100, 4)) 06 Hiệu chuẩn và kiểm thử
Hai mốc nhiệt độ có sẵn trong mọi phòng học
Bạn không cần nhiệt kế chuẩn đắt tiền. Thiên nhiên đã cho sẵn hai mốc rất chính xác:
- Nước đá đang tan: 0,0 °C. Điều kiện là phải có cả đá lẫn nước, và phải khuấy. Chỉ nước lạnh thôi thì không phải 0 °C; chỉ đá thôi cũng không phải.
- Nước đang sôi mạnh: 100,0 °C ở ngang mực nước biển.
Ở Đà Lạt cao 1500 m, nước sôi ở khoảng 95 °C chứ không phải 100 °C. Vậy nếu hiệu chuẩn cảm biến ở Đà Lạt mà vẫn lấy mốc 100 thì sai số hệ thống là bao nhiêu, và nó ảnh hưởng thế nào tới bài đo nhiệt dung riêng?
Đây là chỗ nối rất tự nhiên sang bài áp suất khí quyển và sang môn Địa lí.
Đọc kết quả hiệu chuẩn
Chạy chương trình hiệu chuẩn, bạn sẽ có hai con số. Cách diễn giải:
| Kết quả | Nghĩa là | Làm gì |
|---|---|---|
| Điểm băng đọc 0,0 ± 0,3 | Cảm biến tốt | Dùng thẳng, không cần bù |
| Điểm băng đọc lệch đều, ví dụ +0,8 | Sai số hệ thống về gốc | Trừ đi 0,8 trong chương trình |
| Điểm băng đúng nhưng điểm sôi lệch nhiều | Độ dốc sai — hiếm với DS18B20 | Nghi hàng nhái, thay cảm biến |
| Số nhảy loạn không ổn định | Tiếp xúc kém hoặc thiếu điện trở kéo lên | Kiểm tra lại mạch |
Danh sách kiểm
- Chương trình in ra "Tìm thấy 1 cảm biến" chứ không báo lỗi.
- Đầu dò trong nước đá đang tan đọc trong khoảng −0,5 đến +0,5 °C.
- Cầm đầu dò trong lòng bàn tay, số tăng lên rõ rệt trong 20 giây.
- Số liệu dán được vào bảng tính và vẽ ra đồ thị.
07 Kinh nghiệm và cạm bẫy
DS18B20 không đo tức thì. Sau lệnh convert_temp(), nó cần tới
750 ms để hoàn tất ở độ phân giải 12 bit.
Nếu bạn đọc sớm hơn, chương trình vẫn chạy và vẫn ra số đẹp — nhưng đó là số của lần đo trước. Đồ thị bị trễ một nhịp mà không ai nhận ra. Đây là loại lỗi khó chịu nhất vì nó không báo lỗi.
Muốn nhanh hơn thì hạ độ phân giải xuống 9 bit, chỉ mất 94 ms, đổi lại bước nhảy thành 0,5 °C. Với bài theo dõi nhiệt độ phòng thì được; với bài nhiệt dung riêng thì không.
Đây là bài học tôi phải học lại nhiều lần.
Cùng một cốc nước nóng, tôi đo được ba số khác nhau: sát đáy 68 °C, giữa cốc 63 °C, sát mặt nước 58 °C. Chênh nhau mười độ — lớn gấp hai mươi lần sai số của cảm biến.
Nghĩa là: mọi công sức chọn cảm biến chính xác đều vô nghĩa nếu đặt đầu dò sai chỗ. Ba quy tắc tôi dạy học sinh ngay từ buổi đầu:
- Đặt giữa cốc, ngập khoảng hai phần ba chiều sâu nước.
- Không chạm đáy, không chạm thành.
- Phải khuấy. Không khuấy thì nước phân tầng, và con số bạn đọc chỉ là nhiệt độ của một điểm chứ không phải của cốc nước.
Tôi luôn bắt đầu bài nhiệt học bằng thí nghiệm ba đầu dò ở ba vị trí. Nó mất năm phút và dạy được nhiều hơn một tiết giảng về đối lưu.
Vỏ thép của DS18B20 cũng cần thời gian để nóng lên bằng môi trường. Nhúng đột ngột từ không khí vào nước nóng, nó mất khoảng 8–15 giây mới ổn định.
Hệ quả thực tế: đừng nhúng đầu dò vào rồi đọc số ngay. Chờ số đứng yên đã. Và khi vẽ đồ thị nước nguội, đoạn dốc đứng ở đầu có thể là quán tính của cảm biến chứ không phải của nước.
Bản thân chuyện này lại là một thí nghiệm hay: cho học sinh vẽ đường "cảm biến đuổi theo nhiệt độ nước" và ước lượng hằng số thời gian của nó.
- Báo "Không thấy DS18B20". Chín trên mười lần là thiếu điện trở 4,7 kΩ hoặc cắm nhầm chân.
- Đọc ra đúng 85,00 °C. Đây là giá trị mặc định trong chip khi phép đo chưa hoàn tất. Bạn đọc quá sớm, hoặc nguồn không đủ.
- Đọc ra −127,00 °C. Mất kết nối giữa chừng. Kiểm tra dây.
- Số nhảy vài độ liên tục. Dây quá dài mà không có điện trở, hoặc breadboard rão.
08 Ứng dụng trong dạy học
Vật lí — theo dõi một quá trình nhiệt
Bài mở đường cho toàn bộ chương Vật lí nhiệt. Ba thí nghiệm làm được ngay với đúng bộ này:
- Đường nguội của nước. Rót nước nóng vào cốc, ghi 20 phút.
Đường cong thu được chính là định luật làm nguội Newton. Vẽ
ln(T − T_phòng)theo thời gian sẽ ra đường thẳng — nối thẳng sang bài hàm số mũ của môn Toán. - So sánh cách nhiệt. Hai cốc nước nóng như nhau, một cốc bọc khăn. Đường nào nguội chậm hơn và chậm hơn bao nhiêu?
- Nhiệt độ nước đá trong lúc tan. Học sinh luôn ngạc nhiên khi thấy nhiệt độ đứng yên ở 0 °C suốt lúc đá đang tan, dù ta vẫn đun. Đây là cách hay nhất để dạy nhiệt nóng chảy.
Hóa học — phản ứng tỏa nhiệt và thu nhiệt
Cho hai chất an toàn phản ứng trong cốc xốp và ghi nhiệt độ theo thời gian: baking soda với giấm (thu nhiệt, nhiệt độ giảm), hoặc hòa tan NaOH loãng trong nước dưới sự giám sát chặt (tỏa nhiệt).
Điều mà nhiệt kế thủy ngân không cho thấy được: hình dạng của đường nhiệt độ. Phản ứng nhanh cho đỉnh nhọn, phản ứng chậm cho đỉnh tù. Từ đó nối sang bài tốc độ phản ứng.
Sinh học — sự sống tỏa nhiệt
Thí nghiệm kinh điển mà nay đo được: cho hạt đậu ngâm nảy mầm vào một phích giữ nhiệt, cắm đầu dò vào giữa khối hạt, để một phích đối chứng chứa hạt đã luộc chín. Ghi liên tục 24 giờ.
Phích hạt sống ấm hơn phích đối chứng một vài độ. Đó là hô hấp tế bào, đo được bằng một cảm biến mười lăm nghìn đồng.
Toán — dữ liệu thật để dạy hàm số
Bộ số liệu nguội của nước là bộ dữ liệu tốt nhất tôi biết để dạy hàm mũ. Nó không phải bài toán bịa; nó là nước trong cốc của chính các em. Và thao tác "lấy logarit để bẻ thẳng đường cong" trở nên có lí do.
Hoạt động 1 — Xác định vấn đề. Quán trà sữa quảng cáo ly giữ nhiệt 6 giờ. Có thật không, và ly nào giữ nhiệt tốt nhất trong số các loại lớp mình có?
Tiêu chí sản phẩm: đo được đường nhiệt độ của ít nhất ba loại bình trong 30 phút; cùng thể tích nước, cùng nhiệt độ ban đầu ±2 °C; kết quả kèm sai số; và xếp hạng có căn cứ số liệu chứ không phải cảm tính.
Hoạt động 2 — Kiến thức nền. Ba cách truyền nhiệt; định luật làm nguội Newton; cách đọc đồ thị nhiệt độ theo thời gian.
Hoạt động 3 — Đề xuất phương án. Các nhóm bàn: đặt đầu dò ở đâu, đậy nắp hay không, khuấy hay không, đo bao lâu một lần. Đây là chỗ học sinh phải quyết định, và các quyết định khác nhau sẽ cho kết quả khác nhau — rất đáng để so.
Hoạt động 4 — Đo và xử lý. Chạy 30 phút, xuất CSV, vẽ ba đường trên cùng một đồ thị.
Hoạt động 5 — Báo cáo. Xếp hạng ba bình, giải thích bằng cấu tạo, và chỉ ra điều kiện nào trong thí nghiệm chưa thật công bằng.
- Ghép với LCD của Bài 34 để hiện số tại chỗ, không cần máy tính.
- Ghép với thẻ nhớ để chạy 24 giờ cho thí nghiệm hạt nảy mầm.
- Thêm cảm biến thứ hai trên cùng dây để đo đồng thời trong và ngoài.
- Lên Bài 77 (định luật làm nguội Newton) và Bài 83 (đường cong nóng lên và làm nguội) để làm sâu phần phân tích.
- Hướng thi Khoa học kĩ thuật: khảo sát hiệu quả cách nhiệt của các vật liệu địa phương — xơ dừa, trấu, mút xốp — cho thùng vận chuyển nông sản.