Cảm biến tiệm cận cảm ứng từ: cấu tạo, nguyên lý dòng xoáy, cách chế tạo và nối với ESP32
Cảm biến tiệm cận cảm ứng từ hoạt động thế nào: cuộn dây lõi ferit, dao động tắt dần do dòng xoáy, khoảng tác động theo vật liệu, NPN, PNP, cách chế tạo và đếm vòng quay bằng ESP32.
Cảm biến tiệm cận cảm ứng từ (inductive proximity sensor) là loại cảm biến công nghiệp phổ biến bậc nhất: phát hiện kim loại ở gần mà không cần chạm. Chúng đếm sản phẩm trên băng tải, báo vị trí xi lanh, dừng hành trình bàn máy, đếm răng bánh răng để đo tốc độ. Không có bộ phận chuyển động, không tiếp điểm nên gần như không mòn, chịu được dầu, bụi, rung. Bài viết giải thích cấu tạo bên trong, nguyên lý dao động tắt dần, khoảng tác động và ảnh hưởng của vật liệu, cách lắp, các kiểu ngõ ra NPN, PNP, quy trình chế tạo, và cách nối cảm biến 12 V với ESP32 qua opto để đếm vòng quay.
1. Cấu tạo

- Cuộn dây và lõi ferit: cuộn dây quấn trong một lõi ferit hình nồi khoét một nửa, đặt ngay sau mặt cảm biến. Lõi hướng từ trường ra phía trước, tạo một vùng nhạy hình nấm trước mặt.
- Bộ dao động LC: cuộn dây cùng một tụ điện tạo mạch dao động tần số vài chục đến vài trăm kHz.
- Giải điều chế và so sánh: đo biên độ dao động, so với ngưỡng có độ trễ để quyết định có vật hay không.
- Tầng ra: transistor NPN hoặc PNP (hoặc thyristor ở loại xoay chiều 2 dây), có bảo vệ ngắn mạch và đảo cực.
- Vỏ và đèn báo: ống ren đồng thau mạ niken hoặc thép không gỉ (M8, M12, M18, M30), mặt nhựa, đèn LED sáng khi ngõ ra tác động.

2. Nguyên lý: dao động tắt dần do dòng điện xoáy

- Khi không có vật, mạch dao động chạy với biên độ lớn và đều.
- Vật kim loại đi vào vùng từ trường: từ trường biến thiên cảm ứng dòng điện xoáy trên bề mặt vật. Dòng xoáy tiêu hao năng lượng của mạch dao động; với thép, tổn hao từ trễ còn làm mất thêm năng lượng.
- Vật càng gần, dao động càng yếu. Khi biên độ xuống dưới ngưỡng tắt, ngõ ra đổi trạng thái và đèn sáng.
- Vật rời đi, biên độ phải lên quá ngưỡng bật lại (cao hơn ngưỡng tắt) thì ngõ ra mới trở về. Khoảng chênh này là độ trễ, thường dưới 15 % khoảng tác động, giúp ngõ ra không nhấp nháy khi vật đứng ở mép.
Khoảng tác động
- Sn (khoảng tác động định mức) đo với tấm thép thường dày 1 mm, cạnh bằng đường kính mặt cảm biến (hoặc 3 lần Sn nếu lớn hơn).
- Khi thiết kế nên đặt vật trong khoảng 0 đến 0,8 Sn để chắc chắn tác động dù điện áp, nhiệt độ thay đổi.
- Kim loại màu cho khoảng ngắn hơn: thép không gỉ khoảng 0,7 đến 0,8 Sn, đồng thau khoảng 0,4 đến 0,5 Sn, nhôm và đồng khoảng 0,3 đến 0,4 Sn. Có loại "hệ số 1" cho mọi kim loại.
- Vật mỏng hơn hoặc nhỏ hơn tấm chuẩn cũng làm khoảng tác động giảm.
| Cỡ thân | Sn loại lắp chìm (thường gặp) | Sn loại lắp nhô (thường gặp) |
|---|---|---|
| M8 | 1 đến 2 mm | 2 đến 4 mm |
| M12 | 2 đến 4 mm | 4 đến 8 mm |
| M18 | 5 đến 8 mm | 8 đến 12 mm |
| M30 | 10 đến 15 mm | 15 đến 22 mm |
3. Lắp đặt và ngõ ra

- Loại có vỏ chắn (lắp chìm được): vỏ kim loại bao quanh cuộn dây, từ trường chỉ hướng ra phía trước nên lắp chìm bằng mặt giá kim loại được. Khoảng tác động ngắn hơn.
- Loại không vỏ chắn (lắp nhô): từ trường loe ra hai bên, khoảng tác động dài hơn nhưng phải chừa đầu cảm biến nhô ra và để trống kim loại xung quanh.
- Hai cảm biến đặt quá gần nhau có thể gây nhiễu lẫn nhau; khoảng cách tối thiểu ghi trong thông số.
- NPN (ngõ ra "sink") kéo dây đen xuống 0 V khi tác động; tải nối giữa +V và dây đen. PNP (ngõ ra "source") đẩy dây đen lên +V; tải nối giữa dây đen và 0 V. PLC ở châu Âu hay dùng PNP, châu Á hay dùng NPN.
- NO / NC: thường mở (tác động khi có vật) hoặc thường đóng. Loại 4 dây có cả hai.
- Màu dây theo IEC 60947-5-2: nâu là +V, xanh dương là 0 V, đen là ngõ ra thường mở, trắng là ngõ ra thường đóng.
4. Chế tạo cảm biến tiệm cận cảm ứng từ

- Lõi ferit và cuộn dây: lõi được ép từ bột oxit sắt trộn mangan, kẽm rồi thiêu kết; cuộn dây đồng quấn đúng số vòng và đo điện cảm.
- Mạch điện tử: phần lớn cảm biến hiện nay dùng IC chuyên dụng gói gọn bộ dao động, giải điều chế, so sánh có trễ và tầng ra có bảo vệ.
- Lắp vỏ: ống ren tiện từ đồng thau rồi mạ niken, hoặc thép không gỉ cho ngành thực phẩm; nắp mặt bằng nhựa PBT; đèn LED nhìn được từ đuôi thân.
- Hiệu chỉnh: đặt tấm thép chuẩn đúng ở khoảng Sn, chỉnh điện trở hoặc ghi giá trị vào IC sao cho ngõ ra đổi đúng tại đó.
- Đổ keo: lấp đầy vỏ bằng epoxy hoặc polyurethane để kín nước (IP67), chịu rung, giữ cuộn dây không xê dịch theo nhiệt.
- Kiểm tra: khoảng tác động, độ trễ, tần số đóng cắt (vài trăm Hz tới vài kHz), dòng tải, thử nhiệt độ và phun nước.
5. Thực hành: đếm vòng quay bằng cảm biến tiệm cận và ESP32
Cảm biến tiệm cận công nghiệp thường chạy nguồn 6–36 V. Nhiều loại NPN giá rẻ có điện trở kéo lên bên trong nối tới nguồn, nên dây đen có thể lên tới 12 V khi không tác động; nối thẳng vào ESP32 sẽ hỏng chân GPIO. Cách an toàn là đi qua một opto PC817: phía cảm biến và phía ESP32 cách ly hoàn toàn.
Linh kiện
- ESP32 DevKit V1 30 chân.
- Một cảm biến tiệm cận cảm ứng từ M12, NPN, thường mở, 3 dây, nguồn 12 V.
- Một opto PC817, một điện trở 2,2 kΩ; nguồn 12 V.
- Một đĩa (hoặc trục) có một đầu bu lông thép để cảm biến phát hiện mỗi vòng; breadboard, dây cắm.
Sơ đồ nối

| Điểm nối | Nối tới |
|---|---|
| Dây nâu cảm biến | +12 V; đồng thời qua điện trở 2,2 kΩ tới chân 1 (anot) của PC817 |
| Dây đen cảm biến | Chân 2 (catot) của PC817 |
| Dây xanh dương cảm biến | 0 V của nguồn 12 V |
| Chân 4 (cực thu) PC817 | GPIO26 của ESP32 |
| Chân 3 (cực phát) PC817 | GND của ESP32 |
Khi cảm biến thấy kim loại, dây đen kéo xuống 0 V, dòng khoảng (12 − 1,2) V / 2,2 kΩ ≈ 4,9 mA chạy qua LED của opto; phototransistor dẫn và kéo GPIO26 xuống mức thấp.
Chương trình
/*
PYWORLD.VN - Cảm biến tiệm cận cảm ứng từ NPN 3 dây với ESP32: phát hiện kim loại, đếm vật và đo tốc độ quay
Cảm biến nguồn 12 V; dây đen (ngõ ra NPN) kéo dòng qua LED của opto PC817; phototransistor nối GPIO26 và GND
Mỗi lần đầu bu lông trên đĩa quay đi qua mặt cảm biến tạo một xung; tốc độ tính từ chu kỳ giữa hai xung
*/
#define CHAN_CAM_BIEN 26
const int SO_VAT_MOI_VONG = 1; // Số đầu bu lông (hoặc răng) trên một vòng
const uint32_t CHONG_DOI_US = 2000; // Bỏ qua xung cách xung trước dưới 2 ms
const uint32_t HET_XUNG_US = 2000000; // 2 giây không có xung: coi như đứng yên
volatile uint32_t demXung = 0;
volatile uint32_t mocXungCuoi = 0;
volatile uint32_t chuKyUs = 0;
portMUX_TYPE khoaNgat = portMUX_INITIALIZER_UNLOCKED;
void IRAM_ATTR ngatCamBien() {
uint32_t bayGio = micros();
uint32_t khoangCach = bayGio - mocXungCuoi;
if (khoangCach < CHONG_DOI_US) {
return;
}
portENTER_CRITICAL_ISR(&khoaNgat);
chuKyUs = khoangCach;
mocXungCuoi = bayGio;
demXung = demXung + 1;
portEXIT_CRITICAL_ISR(&khoaNgat);
}
void setup() {
Serial.begin(115200);
pinMode(CHAN_CAM_BIEN, INPUT_PULLUP); // Opto kéo chân xuống GND khi cảm biến thấy kim loại
attachInterrupt(digitalPinToInterrupt(CHAN_CAM_BIEN), ngatCamBien, FALLING);
Serial.println("\nCam bien tiem can cam ung tu: dem xung va toc do quay");
}
void loop() {
portENTER_CRITICAL(&khoaNgat);
uint32_t dem = demXung;
uint32_t moc = mocXungCuoi;
uint32_t chuKy = chuKyUs;
portEXIT_CRITICAL(&khoaNgat);
bool coKimLoai = digitalRead(CHAN_CAM_BIEN) == LOW;
float vongPhut = 0;
if (dem >= 2 && micros() - moc < HET_XUNG_US) {
vongPhut = 60.0e6f / ((float)chuKy * SO_VAT_MOI_VONG);
}
Serial.printf("%s | Dem %lu | Chu ky %.1f ms | %.0f vong/phut\n",
coKimLoai ? "CO kim loai " : "khong co ", (unsigned long)dem, chuKy / 1000.0f, vongPhut);
delay(500);
}
Giải thích
- Ngắt sườn xuống trên GPIO26 ghi thời điểm từng xung bằng
micros(); xung đến sớm hơn 2 ms sau xung trước bị bỏ qua để chống nhiễu. - Tốc độ (vòng/phút) = 60 000 000 / (chu kỳ µs × số vật mỗi vòng). Đo theo chu kỳ cho kết quả mượt ở tốc độ thấp hơn so với đếm xung trong một giây.
- Không có xung trong 2 giây thì coi như trục đứng yên.
- Muốn đếm sản phẩm trên băng tải, chỉ cần dùng biến
demXung.
Kết quả mong đợi

Tần số đóng cắt của cảm biến giới hạn tốc độ đo: cảm biến 500 Hz với một đầu bu lông mỗi vòng đo được tới khoảng 30 000 vòng/phút; với bánh răng nhiều răng thì giới hạn giảm tương ứng.
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ý |
|---|---|---|
| Đèn cảm biến sáng nhưng ESP32 không nhận | Nối ngược chiều LED opto; thiếu điện trở hạn dòng | Anot (chân 1) về phía +12 V, catot (chân 2) về dây đen |
| Cảm biến không phát hiện nhôm, đồng | Khoảng tác động với kim loại màu ngắn hơn nhiều | Đưa vật lại gần hơn (khoảng 0,3 Sn) hoặc dùng loại hệ số 1 |
| Ngõ ra luôn tác động | Lắp loại không vỏ chắn chìm trong giá kim loại | Để đầu nhô ra khỏi giá hoặc thay loại có vỏ chắn |
| Đếm thêm xung lạ | Nhiễu từ dây động lực, hai cảm biến đặt quá gần | Đi dây riêng, tăng thời gian chống dội, giãn khoảng cách hai cảm biến |
| Tốc độ đo sai ở tốc độ cao | Vượt tần số đóng cắt của cảm biến | Dùng ít vật trên mỗi vòng hơn, hoặc cảm biến tần số cao |
7. Xem thêm
- Ngắt GPIO trên ESP32: chống dội và đếm xung.
- Mức logic 3,3 V và 5 V: khi nào cần chuyển mức.
- ESP32 điều khiển module relay, để đóng ngắt tải khi cảm biến tác động.
- Các bài khác trong loạt: cảm biến tiệm cận điện dung, encoder tương đối, cảm biến từ trường.
Xem thêm