Cảm biến tiệm cận điện dung: cấu tạo, nguyên lý, cách chế tạo và tự làm cảm biến mức nước với ESP32
Cảm biến tiệm cận điện dung hoạt động thế nào: điện cực, điện cực bù, điện trường viền, hằng số điện môi, báo mức xuyên thành bồn, cách chế tạo và tự làm cảm biến mức nước bằng chân cảm ứng ESP32.
Cảm biến tiệm cận cảm ứng từ chỉ thấy kim loại. Khi cần phát hiện nước trong bồn nhựa, hạt ngũ cốc trong phễu, hộp giấy trên băng tải hay bàn tay người, ta dùng cảm biến tiệm cận điện dung. Cảm biến này đo điện dung giữa điện cực ở mặt cảm biến và môi trường phía trước; bất cứ vật nào có hằng số điện môi lớn hơn không khí đi vào cũng làm điện dung tăng. Bài viết giải thích cấu tạo, nguyên lý điện trường viền, vai trò của hằng số điện môi, ứng dụng và điểm yếu, quy trình chế tạo, rồi hướng dẫn tự làm cảm biến mức nước điện dung chỉ với ESP32 và một miếng giấy nhôm.
1. Cấu tạo

- Điện cực cảm biến: một tấm đồng tròn sát mặt trước. Nó cùng với "đất" (vật, thân máy, môi trường xung quanh) tạo thành một tụ điện rất nhỏ, cỡ vài pF.
- Điện cực bù (chắn): điện cực phụ được giữ cùng điện thế với điện cực chính, giúp điện trường hướng ra phía trước và giảm ảnh hưởng của lớp hơi ẩm, bụi bám trên mặt cảm biến.
- Mạch đo: bộ dao động RC hoặc mạch đo thời gian nạp xả; điện dung tăng làm tần số hoặc biên độ thay đổi. Mạch so sánh có độ trễ quyết định trạng thái ngõ ra.
- Biến trở chỉnh độ nhạy: nằm ở đuôi thân, để chỉnh ngưỡng theo vật cần phát hiện và theo bề dày thành bồn.
- Tầng ra và vỏ: giống cảm biến cảm ứng từ: NPN hoặc PNP, thường mở hoặc thường đóng, vỏ nhựa PBT hoặc kim loại có ren, đèn báo.

2. Nguyên lý: điện trường viền và hằng số điện môi

Điện dung của tụ điện phẳng là C = ε0 · εr · A / d: tỉ lệ với diện tích A, với hằng số điện môi εr của vật liệu nằm giữa hai bản, và tỉ lệ nghịch với khoảng cách d. Trong cảm biến tiệm cận, "tụ điện" không phải hai bản song song mà là điện trường viền tỏa ra trước điện cực. Khi một vật đi vào vùng này:
- Vật cách điện có εr lớn hơn không khí (nước khoảng 80, thủy tinh khoảng 5 đến 10, nhựa khoảng 2 đến 4) làm điện dung tăng. εr càng lớn, vật càng dễ phát hiện và phát hiện được từ xa hơn.
- Vật dẫn điện (kim loại, cơ thể người, nước có muối) như một bản cực thứ hai nối đất, làm điện dung tăng mạnh nhất.
- Khoảng tác động định mức Sn của cảm biến điện dung đo với tấm kim loại nối đất. Với vật khác, khoảng tác động giảm theo εr; biến trở độ nhạy dùng để bù lại.
Điện trường đi xuyên qua vật liệu không dẫn điện, nên cảm biến đặt bên ngoài một bồn nhựa hay kính vẫn "nhìn thấy" chất lỏng bên trong. Đây là cách báo mức không cần khoan bồn.
3. Ứng dụng và điểm yếu

- Báo mức: chất lỏng, hạt, bột trong bồn, phễu, silo; xuyên qua thành nhựa, kính dày vài milimét.
- Phát hiện vật không kim loại: hộp giấy, chai nhựa, tấm gỗ, gạch trên băng tải.
- Giao diện người: nút cảm ứng trên bếp từ, thang máy, màn hình cảm ứng điện dung của điện thoại cũng hoạt động theo cùng nguyên lý, chỉ khác là dùng cả một lưới điện cực trong suốt.
- Điểm yếu: hơi nước đọng, bọt, lớp chất lỏng bám trên thành bồn có thể làm cảm biến báo sai; nhiệt độ và độ ẩm làm giá trị gốc trôi. Cảm biến công nghiệp có điện cực bù và mạch tự bù; cảm biến tự chế phải bù bằng phần mềm.
4. Chế tạo cảm biến điện dung

- Điện cực trên mạch in: điện cực tròn bằng đồng ở mặt trước, vòng điện cực bù bao quanh, lớp đồng phía sau làm mặt chắn để cảm biến không nhạy với vật ở phía sau.
- Mạch đo: IC đo điện dung (dao động RC, đếm thời gian nạp, hoặc mạch chia điện tích) đổi thay đổi cỡ phần mười pF thành tín hiệu số hoặc điện áp.
- Biến trở độ nhạy: biến trở nhiều vòng ở đuôi, hoặc nút dạy (teach-in) trên loại mới.
- Vỏ và đổ keo: vỏ nhựa PBT hoặc thép không gỉ có mặt nhựa; đổ keo kín vì hơi ẩm lọt vào bên trong cũng làm thay đổi điện dung.
- Hiệu chuẩn: đặt tấm kim loại nối đất ở khoảng Sn, chỉnh để tác động đúng; kiểm tra độ trễ và độ ổn định theo nhiệt độ.
- Tự chế: một miếng giấy nhôm hay lá đồng làm điện cực, nối dây ngắn vào chân cảm ứng của ESP32, bọc băng keo để không chạm trực tiếp vào nước.
5. Thực hành: tự làm cảm biến mức nước điện dung với ESP32
ESP32 có 10 chân cảm ứng chạm (T0 đến T9). Mỗi chân có mạch đo điện dung sẵn bên trong: phần cứng nạp xả chân nhiều lần và đếm số chu kỳ trong một khoảng thời gian; điện dung của chân thay đổi thì số đếm thay đổi. Gắn thêm một điện cực lớn là có cảm biến điện dung tự chế.
Linh kiện
- ESP32 DevKit V1 30 chân.
- Một miếng giấy nhôm hoặc lá đồng khoảng 5 × 5 cm, băng keo, một chai hoặc hộp nhựa.
- Một dây cắm ngắn.
Sơ đồ

- Dán miếng giấy nhôm lên mặt ngoài chai ở độ cao muốn báo mức, bọc băng keo bên ngoài.
- Nối miếng giấy nhôm vào chân GPIO4 (T0) bằng dây ngắn, cố định dây không cho lắc.
- Cấp nguồn cho ESP32 khi nước còn thấp hơn điện cực để chương trình lấy giá trị gốc.
Chương trình
/*
PYWORLD.VN - Tự làm cảm biến tiệm cận điện dung bằng chân cảm ứng chạm của ESP32 và một miếng giấy nhôm
Điện cực (giấy nhôm, lá đồng 5 x 5 cm) nối vào GPIO4 (T0) bằng dây ngắn; dán ngoài thành chai nhựa để báo mức nước
So sánh với giá trị gốc lúc khởi động theo phần trăm, có độ trễ; gõ "g" để lấy lại giá trị gốc
*/
#define CHAN_DIEN_CUC T0 // GPIO4
const int SO_MAU = 16;
const float NGUONG_PHAN_TRAM = 3.0; // Thay đổi lớn hơn mức này so với gốc: có vật
const float DO_TRE_PHAN_TRAM = 1.0; // Phải giảm dưới (ngưỡng - độ trễ) mới coi là hết vật
const float HE_SO_TROI = 0.002; // Cập nhật gốc rất chậm khi không có vật, bù nhiệt độ và độ ẩm
float giaTriGoc = 0;
bool coVat = false;
float docTrungBinh() {
uint64_t tong = 0;
for (int i = 0; i < SO_MAU; i++) {
tong += touchRead(CHAN_DIEN_CUC);
}
return (float)tong / SO_MAU;
}
void layGoc() {
float tong = 0;
for (int i = 0; i < 8; i++) {
tong += docTrungBinh();
delay(20);
}
giaTriGoc = tong / 8;
coVat = false;
Serial.printf("Gia tri goc: %.0f (de dien cuc khong co vat khi lay goc)\n", giaTriGoc);
}
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("\nCam bien dien dung tu che voi chan cam ung T0 (GPIO4)");
layGoc();
}
void loop() {
if (Serial.available() && Serial.read() == 'g') {
layGoc();
}
float giaTri = docTrungBinh();
// Không giả định chiều thay đổi: tùy phiên bản chip và trình điều khiển, giá trị có thể tăng hoặc giảm khi có vật
float thayDoi = (giaTri - giaTriGoc) / giaTriGoc * 100.0f;
float doLon = fabsf(thayDoi);
if (!coVat && doLon > NGUONG_PHAN_TRAM) {
coVat = true;
} else if (coVat && doLon < NGUONG_PHAN_TRAM - DO_TRE_PHAN_TRAM) {
coVat = false;
}
if (!coVat) {
giaTriGoc += HE_SO_TROI * (giaTri - giaTriGoc);
}
Serial.printf("Doc %.0f | Goc %.0f | Thay doi %+.2f %% | %s\n", giaTri, giaTriGoc, thayDoi,
coVat ? "CO VAT (nuoc da toi dien cuc)" : "khong co vat");
delay(250);
}
Giải thích
- Lúc khởi động, chương trình đọc nhiều lần để lấy giá trị gốc khi chưa có vật.
- Mỗi lần đọc, tính phần trăm thay đổi so với gốc. Chương trình xét độ lớn của thay đổi chứ không giả định chiều, vì tùy phiên bản chip và trình điều khiển, giá trị đọc có thể tăng hoặc giảm khi có vật.
- Thay đổi vượt 3 % thì báo có vật; phải giảm xuống dưới 2 % mới báo hết. Khoảng chênh 1 % là độ trễ chống nhấp nháy.
- Khi không có vật, giá trị gốc được kéo dần về giá trị đọc với hệ số rất nhỏ (0,002) để bù trôi do nhiệt độ, độ ẩm. Khi có vật thì không cập nhật, nếu không cảm biến sẽ "quen" với vật và tự báo hết.
- Gõ
gtrong Serial Monitor để lấy lại giá trị gốc bất cứ lúc nào.
Kết quả mong đợi

Mức thay đổi thực tế phụ thuộc kích thước điện cực, bề dày thành chai và dây nối. Quan sát phần trăm thay đổi khi nước ngập điện cực rồi chỉnh NGUONG_PHAN_TRAM vào khoảng một nửa con số đó.
6. Xử lý lỗi thường gặp
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Báo có vật khi đưa tay lại gần dây | Dây nối dài, chính dây cũng là một điện cực | Rút ngắn dây, dùng cáp có lưới chắn nối đất, đi dây sát thân máy |
| Thay đổi quá nhỏ khi nước ngập | Điện cực nhỏ, thành chai dày | Tăng diện tích điện cực, dán sát thành chai, giảm ngưỡng |
| Vẫn báo có nước khi đã rút | Nước bám thành chai sau điện cực; ngưỡng quá thấp | Tăng ngưỡng, dùng chai thành trơn, đặt điện cực theo chiều dọc |
| Giá trị gốc trôi dần trong ngày | Nhiệt độ, độ ẩm thay đổi | Giữ cơ chế cập nhật gốc chậm; lấy lại gốc bằng lệnh g |
| Cảm biến công nghiệp không phát hiện chai nhựa rỗng | Nhựa có εr nhỏ, lượng vật liệu ít | Tăng độ nhạy bằng biến trở, đưa cảm biến lại gần, hoặc dùng cảm biến quang |
7. Xem thêm
- ESP32 điều khiển module relay: bật máy bơm khi nước cạn, tắt khi đầy.
- Deep Sleep trên ESP32: chân cảm ứng còn dùng được để đánh thức ESP32.
- Các bài khác trong loạt: cảm biến tiệm cận cảm ứng từ, cảm biến mức, cảm biến độ ẩm.
Xem thêm