Bài 18 · Vật lí · Công nghệ
Cảm biến chạm điện dung
một miếng giấy bạc trở thành nút nhấn không có bộ phận chuyển động
ESP32 có sẵn phần cứng đo cảm ứng điện dung. Chỉ cần một vùng kim loại nối vào chân phù hợp, bàn tay đến gần làm điện dung thay đổi. Không có tiếp điểm cơ khí, nhưng ngưỡng lại nhạy với môi trường nên hiệu chuẩn là phần quan trọng nhất.
01 Mục tiêu và yêu cầu cần đạt
Khác nút nhấn ở bài 2, vùng chạm không đóng một công tắc. Nó tạo một thay đổi nhỏ mà chương trình phải đo và phân loại. Vì thế học sinh cần nhìn cả hai phân bố số trước khi quyết định đâu là “đã chạm”.
Sau bài này học sinh làm được
- Mô tả định tính điện dung thay đổi khi bàn tay đến gần vùng kim loại.
- Dùng
TouchPadđọc GPIO32 mà không thêm module cảm biến. - Thu hai nhóm số liệu có chạm và không chạm.
- Chọn ngưỡng nằm giữa hai nhóm và kiểm tra báo sai.
- Khảo sát ảnh hưởng của diện tích miếng chạm và lớp cách điện.
- Vật lí — điện trường, tụ điện và ảnh hưởng của môi trường điện môi.
- Công nghệ — thiết kế giao diện người–máy và đánh giá độ tin cậy.
Đối chiếu yêu cầu cần đạt theo khối lớp trước khi sử dụng trong KHBD chính thức.
02 Lí thuyết
Bàn tay làm đổi điện dung
Vùng kim loại và môi trường xung quanh tạo thành một tụ điện rất nhỏ. Cơ thể người dẫn điện và ghép điện dung với môi trường. Khi ngón tay đến gần, thời gian nạp điện thay đổi; phần cứng touch của ESP32 biến thay đổi đó thành một con số.
Không có một ngưỡng dùng cho mọi người
Độ ẩm không khí, nguồn USB, chiều dài dây, diện tích giấy bạc và cả cách chạm làm nền số thay đổi. Ngưỡng 400 trong mã chỉ là ví dụ. Cần đo vùng “không chạm” và “có chạm” ngay tại chỗ rồi đặt ngưỡng trong khoảng trống giữa chúng.
Bài dùng đúng ESP32 DevKit V1 trong hồ sơ bo. Không suy ra rằng mọi biến thể ESP32 đều có cùng chân touch; đặc biệt không chuyển nguyên sơ đồ sang C3.
03 Linh kiện
| Linh kiện | Mô tả, lưu ý khi mua | Số lượng · giá |
|---|---|---|
| ESP32 DevKit V1 | Bo ESP32 thường, không dùng ESP32-C3 cho bài này | 1 · 90–150k |
| Giấy bạc hoặc miếng kim loại nhỏ | Bo tròn cạnh, dán dưới lớp băng trong | 1 |
| Điện trở 1 MΩ | Nối tiếp theo bảng chân của hồ sơ bo | 1 · 200đ |
| LED 5 mm và điện trở 220 Ω | Đèn phản hồi khi chạm | 1 bộ · 700đ |
| Băng dính trong và dây cắm | Cố định vùng chạm | 1 bộ |
04 Lắp mạch và sơ đồ nối dây
| Khối | Nối dây | Nguồn |
|---|---|---|
| Vùng chạm | GPIO32 → điện trở 1 MΩ → miếng giấy bạc | Không nối miếng chạm với 3V3 hay GND |
| LED | GPIO23 → 220 Ω → chân dài LED · chân ngắn → GND | Đúng bảng chân hồ sơ bo |
| Lớp bảo vệ | Dán băng trong phủ kín giấy bạc | Không để cạnh sắc lộ ra |
Miếng giấy bạc bo tròn được dán dưới băng trong, nối qua điện trở 1 MΩ tới GPIO32.
Khung giữ chỗ — thay bằng ảnh chụp thật khi cóGPIO32 nối tiếp điện trở 1 MΩ tới vùng chạm; LED ở GPIO23 qua điện trở 220 Ω.
Khung giữ chỗ — thay bằng ảnh chụp thật khi cóHai cụm số đọc không chạm và có chạm, với đường ngưỡng nằm trong khoảng trống giữa hai cụm.
Khung giữ chỗ — thay bằng ảnh chụp thật khi cóLàm vùng chạm an toàn
- Cắt giấy bạc thành hình tròn hoặc vuông khoảng 3 cm, bo kín các góc.
- Dán giấy bạc lên bìa, phủ một lớp băng dính trong để cách điện.
- Nối giấy bạc qua điện trở 1 MΩ tới
GPIO32. - Lắp LED ở
GPIO23qua điện trở 220 Ω. - Giữ dây vùng chạm ngắn và xa dây USB để giảm nhiễu.
Miếng kim loại không nối 3V3, 5V, pin hay bất kì nguồn ngoài nào. Phủ kín cạnh sắc và không dùng vật kim loại lớn như cửa, khung bàn hoặc ống nước làm điện cực.
Nếu số đọc nhảy dù không ai chạm, rút ngắn dây, cố định nó và tránh chạy song song với cáp USB. Đừng chữa nhiễu bằng cách đặt ngưỡng quá sát vùng chạm.
05 Mã nguồn
Mã dùng TouchPad của MicroPython trên ESP32 DevKit V1. Vùng chạm chỉ nối GPIO32 qua điện trở 1 MΩ, tuyệt đối không nối nguồn ngoài.
Bước 1 — lấy hai nhóm số# Moi lan chay, dat TRANG_THAI la "khong_cham" hoac "co_cham"
from machine import Pin, TouchPad
import time
cam_ung = TouchPad(Pin(32))
TRANG_THAI = "khong_cham"
def lay_20_mau():
cac_mau = []
for lan in range(20):
cac_mau.append(cam_ung.read())
time.sleep_ms(100)
print("Nho nhat:", min(cac_mau))
print("Lon nhat:", max(cac_mau))
print("Trung binh:", sum(cac_mau) // len(cac_mau))
print("Chuan bi", TRANG_THAI, "trong 5 giay")
time.sleep_ms(5000)
lay_20_mau()
Chạy một lần với TRANG_THAI = "khong_cham", rồi đổi thành
"co_cham" và chạy lại. Nếu hai khoảng chồng lên nhau nhiều, sửa bố
trí trước khi chọn ngưỡng.
# Bai 18 - Cam bien cham dien dung co san trong ESP32
from machine import Pin, TouchPad
import time
# ===== CẤU HÌNH =====
CHAN_CHAM = 32
CHAN_LED = 23
NGUONG_CHAM = 400 # thay bang nguong cua chinh mieng cham
CHU_KY_MS = 200
# ====================
cam_ung = TouchPad(Pin(CHAN_CHAM))
led = Pin(CHAN_LED, Pin.OUT)
while True:
gia_tri = cam_ung.read()
print("Cam ung:", gia_tri)
# Tren bo thu, cham tay thuong lam so doc giam.
if gia_tri < NGUONG_CHAM:
led.on()
else:
led.off()
time.sleep_ms(CHU_KY_MS)
Với mạch thử, số thường giảm khi chạm. Hãy thay NGUONG_CHAM và kiểm
tra lại dấu so sánh bằng dữ liệu của chính bo.
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ử
So diện tích vùng chạm
| Miếng chạm | Không chạm: khoảng số | Có chạm: khoảng số | Khoảng cách hai nhóm | Báo sai/10 |
|---|---|---|---|---|
| 1 × 1 cm | … | … | … | … |
| 3 × 3 cm | … | … | … | … |
| 5 × 5 cm | … | … | … | … |
Danh sách kiểm
- Miếng chạm chỉ nối GPIO32 qua điện trở 1 MΩ.
- Cạnh giấy bạc được bo và phủ băng cách điện.
- Hai nhóm có ít nhất 20 mẫu mỗi nhóm.
- Ngưỡng nằm giữa hai vùng, không lấy từ nhóm khác.
- LED ở GPIO23 phản hồi ổn định trong 10 lần thử.
07 Kinh nghiệm và cạm bẫy
Khi dựng bài, tôi thử bằng cách cầm trực tiếp đầu dây nên hai nhóm số cách nhau rất xa. Sau khi phủ băng và chỉ chạm lên mặt sản phẩm, chênh lệch nhỏ hơn nhiều. Hiệu chuẩn phải làm trên đúng hình thức sử dụng cuối cùng.
Đổi máy tính hoặc bộ nguồn có thể làm nền cảm ứng đổi. Nếu sản phẩm chuyển sang nguồn khác, lấy lại hai mốc; đừng giữ nguyên ngưỡng chỉ vì mã vẫn chạy.
08 Ứng dụng trong dạy học
Vật lí — một tụ điện không nhìn thấy
Học sinh không cần hai bản kim loại đối diện rõ ràng mới gặp điện dung. Chính vùng chạm, cơ thể và môi trường tạo hệ điện dung phân bố; thay hình học là thay số đo.
Toán — tách hai cụm dữ liệu
Mục tiêu của ngưỡng là tách hai nhóm với ít lỗi nhất. Có thể cho nhóm đánh dấu toàn bộ 40 số trên một trục số rồi chọn ranh giới bằng mắt trước khi tính.
Hoạt động 1 — Xác định vấn đề. Cần một nút bền, phẳng và dễ lau cho mô hình trưng bày.
Tiêu chí sản phẩm: nhận đúng ít nhất 9/10 lần; không tự kích trong 30 giây; không có kim loại sắc lộ ra.
Hoạt động 2 — Kiến thức nền. Điện dung, TouchPad, phân bố dữ liệu và ngưỡng.
Hoạt động 3 — Đề xuất phương án. So hình dạng, diện tích và vật liệu phủ.
Hoạt động 4 — Chế tạo và thử. Mỗi nhóm thử chéo sản phẩm của nhóm khác.
Hoạt động 5 — Báo cáo và điều chỉnh. Dựa vào lần bỏ sót và kích nhầm để sửa kích thước hoặc ngưỡng.
- Tạo hai nút chạm và đo ảnh hưởng qua lại.
- So một, hai và ba lớp băng cách điện.
- Thêm logic chỉ tính một lần cho mỗi lượt chạm.
- Hướng thi Khoa học kĩ thuật: giao diện chạm thấp áp cho mô hình hỗ trợ người dùng.