Series
Series 37 Module Cảm Biến
  1. Series 37 Module Cảm Biến: Nguyên lý hoạt động và cách test với Arduino, ESP32
  2. 1Series 37 Module Cảm Biến – DS3231 RTC: TCXO ±2ppm, I2C, Alarm Ngắt SQW & Đồng Hồ Thực Với Backup Pin
  3. 2Series 37 Module Cảm Biến – SD Card Module SPI: FAT32, Ghi Log CSV Cảm Biến & Đọc Config File Không Hardcode
  4. 3Series 37 Module Cảm Biến – LCD 1602 I2C: PCF8574 Expander, LiquidCrystal_I2C, Cuộn Chữ & Ký Tự Tùy Chỉnh
  5. 4Series 37 Module Cảm Biến – 7-Segment 1 Chữ Số: Mã Segment 0x3F-0x7F, Common Anode vs Cathode & Đếm 0-9
  6. 5Series 37 Module Cảm Biến – OLED SSD1306 0.96\” I2C: Frame Buffer, Adafruit GFX & Hiển Thị Dữ Liệu Thực Tế
  7. 6Series 37 Module Cảm Biến – Nguyên Lý LM35 Analog: Đặc Tuyến 10mV/°C, Đọc ADC Chính Xác & Hiệu Chỉnh Nhiệt Độ
  8. 7Series 37 Module Cảm Biến – Nguyên Lý Knock Sensor KY-031: Piezoelectric Thuận, Va Đập → Điện Áp & Nhận Dạng Pattern
  9. 8Series 37 Module Cảm Biến – Nguyên Lý MPU-6050: IMU 6 Trục, MEMS Gia Tốc + Con Quay, Complementary Filter & Góc Nghiêng
  10. 9Series 37 Module Cảm Biến – Nguyên Lý Relay 5V SRD-05VDC: Cơ Điện Từ, Cách Ly Galvanic & Điều Khiển Thiết Bị 220V
  11. 10Series 37 Module Cảm Biến – Nguyên Lý Hall Effect Analog (49E/SS49E): Đo Cường Độ Từ Trường Tuyến Tính & ADC
  12. 11Series 37 Module Cảm Biến – Nguyên Lý Hall Effect KY-003: Hiệu Ứng Hall, IC Số Unipolar & Phát Hiện Nam Châm
  13. 12Series 37 Module Cảm Biến – Nguyên Lý Reed Switch: Tiếp Điểm Từ Trong Kính, Phát Hiện Cửa & Đo Tốc Độ Quay
  14. 13Series 37 Module Cảm Biến – Nguyên Lý Vibration Switch SW-18010P: Lò Xo Dẫn Điện, Phát Hiện Rung & Pattern Gõ
  15. 14Series 37 Module Cảm Biến – Nguyên Lý Tilt Switch SW-520D: Bi Kim Loại Dẫn Điện, Phát Hiện Nghiêng & Báo Động
  16. 15Series 37 Module Cảm Biến – Nguyên Lý Touch Sensor TTP223: Capacitive Self-Capacitance, Chế Độ Toggle & Latch
  17. 16Series 37 Module Cảm Biến – Nguyên Lý Rotary Encoder KY-040: Xung Quadrature, Đếm Hướng Xoay & Điều Khiển Menu
  18. 17Series 37 Module Cảm Biến – Nguyên Lý Joystick KY-023: Biến Trở 2 Trục, Dead Zone & Điều Khiển Robot / Servo
  19. 18Series 37 Module Cảm Biến – Nguyên Lý Sound Sensor: Microphone Electret, LM393 Comparator & Phát Hiện Tiếng Ồn
  20. 19Series 37 Module Cảm Biến – Nguyên Lý Passive Buzzer: PWM Điều Khiển Tần Số, Hàm tone() & Phát Nhạc Arduino ESP32
  21. 20Series 37 Module Cảm Biến – Nguyên Lý Active Buzzer: Oscillator Tích Hợp, Phân Biệt Active/Passive & Code Cảnh Báo
  22. 21Series 37 Module Cảm Biến – Nguyên Lý 7-Color LED Tự Đổi Màu: IC Tích Hợp, Tần Số Dao Động Nội & Ứng Dụng Trang Trí
  23. 22Series 37 Module Cảm Biến – Nguyên Lý RGB LED Module KY-016: Điốt 3 Màu, PWM Mix Màu 16 Triệu Sắc & Hiệu Ứng
  24. 23Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động IR Receiver VS1838B: Demodulate 38kHz, NEC Protocol & Điều Khiển Từ Xa
  25. 24Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động LDR Quang Trở: CdS Photoconductor, Voltage Divider & Điều Khiển Theo Ánh Sáng
  26. 25Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động Laser Module KY-008: Diode Laser 650nm, Cộng Hưởng Quang Học & An Toàn Laser
  27. 26Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động Flame Sensor: Phổ IR Lửa 760-1100nm, LM393 & Ứng Dụng Chữa Cháy
  28. 27Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động Line Tracking Sensor TCRT5000: Dò Đường IR, Khoảng Cách Tối Ưu & Robot Theo Vạch
  29. 28Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động IR Obstacle Sensor: Phản Xạ Hồng Ngoại, LM393 & Tránh Vật Cản Robot
  30. 29Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động PIR HC-SR501: Pyroelectric Infrared, Fresnel Lens & Phát Hiện Chuyển Động
  31. 30Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động HC-SR04: Sóng Siêu Âm 40kHz, Thời Gian Bay & Đo Khoảng Cách Chính Xác
  32. 31Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động MQ-2: Semiconductor SnO₂, Đường Cong Nhạy Khí & Đo Nồng Độ Gas
  33. 32Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động Rain Sensor FC-37: Phát Hiện Mưa, LM393 Comparator & Ứng Dụng Thực Tế
  34. 33Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động Soil Moisture Sensor: Điện Trở Đất, Hiệu Chỉnh & Tưới Cây Tự Động
  35. 34Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động BMP280: Cảm Biến Áp Suất & Nhiệt Độ Chính Xác Của Bosch
  36. 35Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động DS18B20: Cảm Biến Nhiệt Độ 1-Wire Chống Nước
  37. 36Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động DHT22 (AM2302): Độ Chính Xác Cao, Dải Đo Rộng
  38. 37Series 37 Module Cảm Biến – Nguyên Lý Hoạt Động DHT11: Cảm Biến Nhiệt Độ & Độ Ẩm Phổ Biến Nhất
Cảm biến

Series 37 Module Cảm Biến – Nguyên Lý Hall Effect KY-003: Hiệu Ứng Hall, IC Số Unipolar & Phát Hiện Nam Châm

Th7 2026
Series 37 Module Cảm Biến – Nguyên Lý Hall Effect KY-003: Hiệu Ứng Hall, IC Số Unipolar & Phát Hiện Nam Châm

Hall effect sensor phát hiện từ trường không cần tiếp xúc vật lý — khác hoàn toàn với reed switch. Nguyên lý dựa trên lực Lorentz tác dụng lên điện tử chuyển động, tạo ra điện áp nhỏ có thể đo được. KY-003 tích hợp toàn bộ xử lý tín hiệu trong 1 IC nhỏ, cho ra tín hiệu số sạch.

Nguyên Lý Hoạt Động

1. Hiệu Ứng Hall — Vật Lý Cơ Bản

Phát hiện bởi Edwin Hall năm 1879:

Thanh dẫn mang dòng điện I trong từ trường B:

         B (từ trường — vào màn hình ⊗)
         ↓
    ┌────────────────────────┐
    │                        │
I → │   ●→ electron →●     │ → I
    │   ↑               │   │
    │   Lực Lorentz (F)  ↓  │
    │   = q(v × B)          │
    │                        │
    └────────────────────────┘
    
    Electron lệch lên trên
    → Tích lũy điện tích ở đỉnh và đáy
    → Tạo điện áp Hall VH = IB/(ned)
    
    VH: rất nhỏ (~mV) với Si thông thường
    → IC khuếch đại và so sánh với ngưỡng

Ý nghĩa từng đại lượng:

  • I = dòng điện qua tấm Hall (mA — do nguồn nuôi IC)
  • B = cảm ứng từ (Tesla/Gauss) — do nam châm bên ngoài
  • n = mật độ hạt tải điện (cm⁻³)
  • e = điện tích electron
  • d = độ dày tấm Hall

2. IC Hall Unipolar với Schmitt Trigger

KY-003 dùng IC Hall effect số loại unipolar (ví dụ SS49E, A3141, hoặc tương tự):

Sơ đồ khối IC Hall effect unipolar:

Tấm Hall → [Khuếch đại][Mạch so sánh ngưỡng][Schmitt Trigger] → Output
                                     ↑
                              Ngưỡng cài sẵn
                              (khoảng 170-200 Gauss)

Unipolar: Chỉ phản hồi với một cực của nam châm (thường Nam cực — South pole). Đưa Bắc cực lại gần không có tác dụng (hoặc ngược lại tùy chiều thiết kế).

Schmitt trigger: Tạo độ trễ (hysteresis) để tránh dao động ở ngưỡng:

  • Ngưỡng bật (B_ON): ~170 Gauss → output = LOW
  • Ngưỡng tắt (B_OFF): ~100 Gauss → output = HIGH
  • Hysteresis: ~70 Gauss — tránh output flicker khi từ trường dao động quanh ngưỡng

3. KY-003 vs Reed Switch — Ưu Nhược Điểm

KY-003 Hall DigitalReed Switch
Nguyên lýBán dẫn (Hall IC)Cơ học (lá từ)
Tiếp xúc vật lýKhôngKhông (nhưng cơ học bên trong)
BounceKhông (Schmitt trigger)Có (lá kim loại nảy)
Tuổi thọVô hạn (solid state)~10⁸ thao tác
Khoảng cách2-15mm (tùy IC và nam châm)Tương tự
Phân cực nam châmQuan trọng (unipolar)Không quan trọng
GiáCao hơnThấp hơn

4. Phân Biệt KY-003 (Số) vs KY-024 (Analog)

KY-003KY-024
OutputDigital: HIGH hoặc LOWAnalog: 0-VCC (tuyến tính)
ICHall switch (unipolar)Hall sensor tuyến tính (49E)
Đo cường độ từ trườngKhông
Ứng dụngCó/không nam châm, RPMĐo khoảng cách, cường độ

Thông Số Kỹ Thuật

Thông sốGiá trị
Điện áp hoạt động3.3V – 5V
Dòng tiêu thụ~5mA
Ngưỡng phát hiện~100-200 Gauss (South pole)
OutputActive LOW (open-collector + pull-up trên module)
BounceKhông (Schmitt trigger)
Thời gian phản hồi< 1ms

Sơ Đồ Chân (Pinout)

KY-003 — Nhìn từ mặt trước:

┌─────────────────────────────────┐
│  [Hall IC]  [LED chỉ thị]       │
└─────────────────────────────────┘
   GND   VCC   S
   (-)  (3.3-5V) (Signal OUT)
ChânKý hiệuMô tả
GNDMass
VCC+Nguồn 3.3V-5V
SSignalOutput — LOW khi có từ trường đủ mạnh

Mặt cảm biến: Nhìn nhãn trên IC, đưa mặt có chữ của IC về phía nam châm (hoặc thử cả 2 mặt). Với unipolar: chỉ một mặt phản hồi.

Kết Nối Phần Cứng

KY-003 với ESP32 DevKit V1

ESP32 DevKit V1           KY-003 Module
─────────────────────     ─────────────────
3V3  ─────────────────→  VCC
GND  ─────────────────→  GND
GPIO18 (Input) ────────→  S

GPIO18: interrupt-capable, output-capable, an toàn cho 3.3V logic.

KY-003 với Arduino Uno

Arduino Uno               KY-003 Module
─────────────────────     ─────────────────
5V   ─────────────────→  VCC
GND  ─────────────────→  GND
Pin 2 (INT0) ─────────→  S

Code Arduino IDE

Code Phát Hiện Nam Châm Cơ Bản — Arduino Uno

/*
 * Hall Effect KY-003 — Phát hiện nam châm
 * Board: Arduino Uno
 * Kết nối: VCC→5V, GND→GND, S→Pin2
 *
 * Output active LOW: S = LOW khi có từ trường đủ mạnh
 *
 * Lưu ý: thử cả 2 mặt của nam châm (unipolar chỉ nhạy 1 cực)
 * Đưa từng mặt lại gần mặt có IC, xem đèn LED module có sáng không
 */

const int HALL_PIN = 2;
const int LED_PIN  = 13;

void setup() {
  Serial.begin(9600);
  pinMode(HALL_PIN, INPUT); // Module đã có pull-up
  pinMode(LED_PIN, OUTPUT);
  Serial.println("=== Hall Effect KY-003 ===");
  Serial.println("Đưa nam châm lại gần mặt IC (thử cả 2 mặt)");
}

int lastState = -1;

void loop() {
  int hallVal = digitalRead(HALL_PIN);

  if (hallVal != lastState) {
    lastState = hallVal;

    if (hallVal == LOW) {
      Serial.println("NAM CHÂM PHÁT HIỆN! (từ trường đủ mạnh)");
      digitalWrite(LED_PIN, HIGH);
    } else {
      Serial.println("Không có từ trường");
      digitalWrite(LED_PIN, LOW);
    }
  }

  delay(10);
}

Code Đo RPM Bằng Hall Effect — Arduino Uno

/*
 * Hall Effect KY-003 — Đo RPM động cơ/quạt
 * Gắn nam châm nhỏ vào trục quay, KY-003 cố định
 * Mỗi vòng = 1 xung LOW
 * Board: Arduino Uno
 * Kết nối: VCC→5V, GND→GND, S→Pin2 (INT0)
 *
 * Lợi thế vs reed switch: không bounce → đo RPM chính xác hơn
 */

const int HALL_PIN = 2;
const int MAGNETS  = 1; // Số nam châm trên trục (tăng để tăng độ phân giải)

volatile unsigned long pulseCount = 0;
unsigned long lastReportTime = 0;
const unsigned long REPORT_INTERVAL = 1000; // Báo cáo mỗi 1 giây

void onMagnet() {
  pulseCount++;
}

void setup() {
  Serial.begin(9600);
  pinMode(HALL_PIN, INPUT);

  // FALLING: khi nam châm đến gần (LOW pulse)
  attachInterrupt(digitalPinToInterrupt(HALL_PIN), onMagnet, FALLING);

  Serial.println("=== RPM Meter (Hall Effect) ===");
  lastReportTime = millis();
}

void loop() {
  if (millis() - lastReportTime >= REPORT_INTERVAL) {
    // Đọc và reset (atomic)
    noInterrupts();
    unsigned long count = pulseCount;
    pulseCount = 0;
    interrupts();

    lastReportTime = millis();

    // count = số xung trong 1 giây = số vòng/giây (nếu 1 nam châm)
    float rpm = (float)count / MAGNETS * 60.0;

    Serial.print("Xung/s: "); Serial.print(count);
    Serial.print(" → RPM: "); Serial.println(rpm, 1);
  }
}

Code Cảm Biến Vị Trí Không Tiếp Xúc — Arduino Uno

/*
 * Hall Effect — Phát hiện vị trí mà không cần cơ học tiếp xúc
 * Ứng dụng: giới hạn hành trình motor, kiểm tra vị trí đóng/mở
 * Board: Arduino Uno
 * Kết nối: VCC→5V, GND→GND, S→Pin2 (INT0)
 */

const int HALL_PIN = 2;
const int MOTOR_STOP_PIN = 7; // Relay hoặc logic dừng motor

volatile bool magnetDetected = false;

// ISR — gọi khi nam châm đến ngưỡng (FALLING)
void onHallTrigger() {
  magnetDetected = true;
}

// ISR — gọi khi nam châm rời đi (RISING)
void onHallRelease() {
  magnetDetected = false;
}

void setup() {
  Serial.begin(9600);
  pinMode(HALL_PIN, INPUT);
  pinMode(MOTOR_STOP_PIN, OUTPUT);
  digitalWrite(MOTOR_STOP_PIN, LOW);

  // Cần 2 interrupt cho FALLING và RISING — Arduino Uno chỉ có 1 ISR per pin
  // Dùng CHANGE và đọc state trong ISR
  attachInterrupt(digitalPinToInterrupt(HALL_PIN), []() {
    magnetDetected = (digitalRead(HALL_PIN) == LOW);
  }, CHANGE);

  Serial.println("Giới hạn hành trình Hall Effect sẵn sàng");
}

bool lastDetected = false;

void loop() {
  if (magnetDetected != lastDetected) {
    lastDetected = magnetDetected;

    if (magnetDetected) {
      Serial.println("ĐẾN VỊ TRÍ GIỚI HẠN — Dừng motor!");
      digitalWrite(MOTOR_STOP_PIN, HIGH); // Dừng motor
    } else {
      Serial.println("Rời khỏi vị trí giới hạn");
      digitalWrite(MOTOR_STOP_PIN, LOW);  // Cho motor chạy
    }
  }
}

Code ESP32 — Hall Sensor + MQTT Alert

/*
 * Hall Effect KY-003 — ESP32, phát hiện nam châm + log
 * Board: ESP32 DevKit V1
 * Kết nối: VCC→3V3, GND→GND, S→GPIO18
 *
 * Có thể thêm MQTT hoặc HTTP notification ở phần "send alert"
 */

const int HALL_PIN = 18;

volatile bool hallEvent = false;
volatile bool currentState = false;
unsigned long detectionCount = 0;

void IRAM_ATTR onHallISR() {
  currentState = (digitalRead(HALL_PIN) == LOW); // LOW = phát hiện
  hallEvent = true;
}

void setup() {
  Serial.begin(115200);
  pinMode(HALL_PIN, INPUT);
  attachInterrupt(digitalPinToInterrupt(HALL_PIN), onHallISR, CHANGE);

  // Đọc trạng thái khởi đầu
  currentState = (digitalRead(HALL_PIN) == LOW);
  Serial.println("=== Hall Effect Sensor ESP32 ===");
  Serial.println(currentState ? "Nam châm hiện tại: ĐÃ PHÁT HIỆN" : "Trạng thái: Không có nam châm");
}

unsigned long lastEventTime = 0;

void loop() {
  if (hallEvent) {
    hallEvent = false;

    unsigned long now = millis();
    if (now - lastEventTime > 20) { // Debounce mềm 20ms
      lastEventTime = now;

      if (currentState) {
        detectionCount++;
        Serial.printf("[%lu ms] NAM CHÂM #%lu — Phát hiện!\n", now, detectionCount);
        // Gọi sendAlert() / MQTT publish tại đây
      } else {
        Serial.printf("[%lu ms] Nam châm rời đi\n", now);
      }
    }
  }
}

Kết Quả Mong Đợi

=== Hall Effect KY-003 ===
Đưa nam châm lại gần mặt IC (thử cả 2 mặt)
NAM CHÂM PHÁT HIỆN! (từ trường đủ mạnh)
Không có từ trường
NAM CHÂM PHÁT HIỆN! (từ trường đủ mạnh)

Ứng Dụng Thực Tế

Ứng dụngChi tiết
Tốc kế không tiếp xúcGắn nam châm lên bánh xe, đo RPM
Giới hạn hành trìnhDừng motor khi đến vị trí cuối
Phát hiện nam châm từ xaKhông cần tiếp xúc qua vỏ nhựa mỏng
Mã hóa vị trí quayNhiều nam châm → nhiều vị trí
Khóa thông minhNam châm trong thẻ từ → mở khóa

Lưu Ý Khi Sử Dụng

1. Thử cả 2 mặt của nam châm — unipolar

IC unipolar chỉ nhạy với một cực. Nếu đưa sai cực vào không thấy phản hồi: lật ngược nam châm. LED trên module sẽ sáng khi phát hiện đúng.

2. Khoảng cách kích hoạt thay đổi theo nam châm

Nam châm neodymium nhỏ (5mm): kích hoạt ở ~5mm. Ferrite lớn: ~15-20mm. Dùng khoảng cách nhất quán trong ứng dụng, không thay đổi loại nam châm sau khi đã căn chỉnh.

3. Không bounce nhưng vẫn cần debounce nhỏ

Schmitt trigger loại bỏ bounce điện tử nhưng rung cơ học (nam châm gắn trên trục quay còn dao động) vẫn có thể gây xung lặp. Debounce 5-20ms là đủ.

4. ESP32 có Hall sensor tích hợp — không cần module ngoài

ESP32 có Hall effect sensor nội bộ đọc bằng hallRead(). Nhưng độ nhạy thấp hơn và kết quả phụ thuộc vào chip cụ thể → KY-003 đáng tin cậy hơn.

Bài tiếp theo: