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 Analog (49E/SS49E): Đo Cường Độ Từ Trường Tuyến Tính & ADC

Th7 2026
Series 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

Nếu KY-003 (Bài 27) chỉ cho biết “có hay không có nam châm”, module Hall analog (dùng IC 49E hoặc SS49E) cho biết cường độ từ trường là bao nhiêu — dưới dạng điện áp tỉ lệ tuyến tính. Ở giữa không gian không có từ trường: output = VCC/2 (2.5V). Nam cực đến gần: tăng lên. Bắc cực đến gần: giảm xuống.

Nguyên Lý Hoạt Động

1. Linear Hall IC — Tuyến Tính Hai Chiều

IC Hall tuyến tính (loại 49E, SS49E) khác với unipolar digital (A3141/A3144):

So sánh đặc tuyến output:

Digital (KY-003/A3144):
                 ___
               /
OUTPUT     ___/   ngưỡng
       ___/
       ───────────────────────────
               B (Gauss)
       Chỉ 2 mức: HIGH / LOW

Analog (49E/SS49E):
              /
             /   output tỉ lệ tuyến tính với B
            /
───────────/──────────────────────
VCC/2 ── ×   điểm trung tính (B=0)
          \
           \
            \___

       B âm (Bắc)  B dương (Nam)
       
Sensitivity: ~1.4 mV/Gauss (điển hình)
Range: -1000 đến +1000 Gauss (tuyến tính)

2. Điểm Trung Tính VCC/2

Khi không có từ trường (B=0):

  • Output = VCC/2 (quiescent output)
  • Với VCC = 5V: output = 2.5V → analogRead = 512 (10-bit)
  • Với VCC = 3.3V: output = 1.65V → analogRead ≈ 2048 (12-bit ESP32)

Khi có từ trường:

  • Nam cực (South) gần mặt IC có chữ: output > VCC/2 (tăng)
  • Bắc cực (North) gần mặt đó: output < VCC/2 (giảm)
  • Hoán đổi mặt IC hoặc đảo cực → hiệu ứng ngược chiều

3. Module Analog Hall — AOUT và DOUT

Module hall analog thường có 4 chân và tích hợp comparator LM393:

Module Hall Analog:

   [49E IC]    [LM393 Comparator]
       │               │
       │        ┌──────┤ (-) ← Trimmer (ngưỡng)
       ├────────┤ (+)  │
       │        │      ↓
     AOUT      DOUT (khi AOUT > ngưỡng trimmer)
  • AOUT: Tín hiệu analog thô từ IC — tỉ lệ với từ trường
  • DOUT: Comparator output — HIGH/LOW theo trimmer ngưỡng

Thông Số Kỹ Thuật (SS49E)

Thông sốGiá trị
Điện áp hoạt động3.3V – 6V
Dòng tiêu thụ~7mA
Output tại B=0VCC/2 (±0.075V)
Sensitivity~1.4 mV/Gauss
Dải đo-1000 đến +1000 Gauss (tuyến tính)
Băng thông23 kHz (-3dB)

Sơ Đồ Chân (Pinout)

Module Hall Analog 4 Chân

┌──────────────────────────────────────┐
│  [Hall IC]  [Trimmer]  [LM393]       │
│             [LED]                    │
└──────────────────────────────────────┘
   GND   VCC   AOUT   DOUT
   (-)  (3.3-5V) (Analog) (Digital)
ChânKý hiệuMô tả
GNDMass
VCC+Nguồn 3.3V-5V
AOUTA0Analog output tỉ lệ với B
DOUTD0Digital comparator (HIGH/LOW theo trimmer)

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

Module Hall Analog với ESP32 DevKit V1

ESP32 DevKit V1           Hall Analog Module
─────────────────────     ─────────────────
3V3  ─────────────────→  VCC
GND  ─────────────────→  GND
GPIO34 (ADC Input)────→  AOUT   ← Input-only, ADC1
GPIO4  (Input) ────────→  DOUT   ← Digital comparator

GPIO34: ADC1 Ch6 — không bị ảnh hưởng WiFi, input-only. Phù hợp cho analog.

Lưu ý quan trọng: Cấp VCC = 3.3V (từ ESP32) → AOUT trung tính = 1.65V → ESP32 ADC đọc được. Không cấp 5V vào AOUT của ESP32 (max 3.3V).

Module Hall Analog với Arduino Uno

Arduino Uno               Hall Analog Module
─────────────────────     ─────────────────
5V   ─────────────────→  VCC
GND  ─────────────────→  GND
A0 (Analog Input)─────→  AOUT
Pin 2 (Input) ─────────→  DOUT

Code Arduino IDE

Code Đọc AOUT Cơ Bản — Arduino Uno

/*
 * Hall Effect Analog (49E/SS49E) — Đọc AOUT analog
 * Board: Arduino Uno
 * Kết nối: VCC→5V, GND→GND, AOUT→A0
 *
 * AOUT ở B=0: ~512 (10-bit, 5V)
 * AOUT khi Nam cực gần: > 512 (tăng)
 * AOUT khi Bắc cực gần: < 512 (giảm)
 */

const int AOUT_PIN = A0;

// Giá trị baseline khi không có từ trường (đo thực tế)
// Lý thuyết 512 nhưng thực tế có thể 490-530
int baseline = 512;

void setup() {
  Serial.begin(9600);
  // Calibrate baseline: đọc 50 mẫu khi không có nam châm
  long sum = 0;
  for (int i = 0; i < 50; i++) {
    sum += analogRead(AOUT_PIN);
    delay(10);
  }
  baseline = sum / 50;
  Serial.print("Baseline calibrated: "); Serial.println(baseline);
  Serial.println("Đưa nam châm lại gần để xem thay đổi...");
  Serial.println("ADC Raw | Delta | Cực nam châm");
}

void loop() {
  int raw = analogRead(AOUT_PIN);
  int delta = raw - baseline;

  Serial.print(raw);
  Serial.print("      | ");
  if (delta > 0) Serial.print("+");
  Serial.print(delta);
  Serial.print("   | ");

  // Xác định cực
  if (abs(delta) < 10) {
    Serial.println("Không có (hoặc quá xa)");
  } else if (delta > 0) {
    Serial.println("Nam cực (South) gần mặt IC");
  } else {
    Serial.println("Bắc cực (North) gần mặt IC");
  }

  delay(200);
}

Code Ước Tính Khoảng Cách Từ Trường — Arduino Uno

/*
 * Hall Effect Analog — Ước tính khoảng cách nam châm
 * Sử dụng quan hệ B ∝ 1/d³ (lưỡng cực từ)
 * Calibration cần thiết với nam châm cụ thể
 * Board: Arduino Uno
 * Kết nối: VCC→5V, GND→GND, AOUT→A0
 */

const int AOUT_PIN = A0;
const float SENSITIVITY = 1.4; // mV/Gauss (SS49E điển hình)
const float VCC = 5000.0;      // mV
const float ADC_MAX = 1023.0;

int baseline = 512;

void setup() {
  Serial.begin(9600);

  // Calibrate (không có nam châm!)
  long sum = 0;
  for (int i = 0; i < 100; i++) {
    sum += analogRead(AOUT_PIN);
    delay(5);
  }
  baseline = sum / 100;
  Serial.print("Baseline: "); Serial.println(baseline);
}

float readGauss() {
  int raw = analogRead(AOUT_PIN);
  int delta = raw - baseline;
  float deltaV_mV = (float)delta * VCC / ADC_MAX; // Chuyển sang mV
  return deltaV_mV / SENSITIVITY;                  // mV / (mV/Gauss) = Gauss
}

void loop() {
  float gauss = readGauss();

  Serial.print("B = ");
  Serial.print(gauss, 1);
  Serial.print(" Gauss | Cực: ");
  Serial.print(gauss > 0 ? "Nam" : (gauss < 0 ? "Bắc" : "Không"));

  // Ước tính khoảng cách (chỉ gần đúng, tùy nam châm)
  // Với nam châm 200 Gauss tại tiếp xúc:
  // B ≈ B0 / (d/d0)^3 → d ≈ d0 × (B0/|B|)^(1/3)
  // Calibrate B0 và d0 với nam châm thực tế
  if (abs(gauss) > 5) {
    float B0 = 200.0; // Gauss tại d0 (đo trực tiếp)
    float d0 = 1.0;   // mm tại tiếp xúc
    float dist = d0 * pow(B0 / abs(gauss), 1.0/3.0);
    Serial.print(" | ~");
    Serial.print(dist, 1);
    Serial.print(" mm");
  }
  Serial.println();

  delay(200);
}

Code Phân Biệt Cực Nam Châm + LED — Arduino Uno

/*
 * Hall Effect Analog — Phân biệt Nam / Bắc cực
 * LED xanh = Nam cực, LED đỏ = Bắc cực, tắt = không có nam châm
 * Board: Arduino Uno
 * Kết nối: VCC→5V, GND→GND, AOUT→A0
 *           LED đỏ→Pin9, LED xanh→Pin10 (qua 220Ω)
 */

const int AOUT_PIN   = A0;
const int LED_SOUTH  = 10; // Xanh — Nam cực
const int LED_NORTH  = 9;  // Đỏ — Bắc cực
const int THRESHOLD  = 30; // ±30 ADC units = có nam châm

int baseline = 512;

void setup() {
  Serial.begin(9600);
  pinMode(LED_SOUTH, OUTPUT);
  pinMode(LED_NORTH, OUTPUT);

  long sum = 0;
  for (int i = 0; i < 50; i++) { sum += analogRead(AOUT_PIN); delay(10); }
  baseline = sum / 50;
  Serial.println("=== Phân Biệt Cực Nam Châm ===");
}

void loop() {
  int raw = analogRead(AOUT_PIN);
  int delta = raw - baseline;

  if (delta > THRESHOLD) {
    // Nam cực (South): output tăng
    digitalWrite(LED_SOUTH, HIGH);
    digitalWrite(LED_NORTH, LOW);
    Serial.println("NAM CỰC (South) — LED xanh");
  } else if (delta < -THRESHOLD) {
    // Bắc cực (North): output giảm
    digitalWrite(LED_SOUTH, LOW);
    digitalWrite(LED_NORTH, HIGH);
    Serial.println("BẮC CỰC (North) — LED đỏ");
  } else {
    // Không có từ trường đủ mạnh
    digitalWrite(LED_SOUTH, LOW);
    digitalWrite(LED_NORTH, LOW);
  }

  delay(100);
}

Code ESP32 — ADC 12-bit + Serial Plotter

/*
 * Hall Effect Analog — ESP32, đọc 12-bit ADC, Serial Plotter
 * Board: ESP32 DevKit V1
 * Kết nối: VCC→3V3, GND→GND, AOUT→GPIO34
 *
 * Mở Serial Plotter (115200 baud) để xem đồ thị trực quan
 * Đưa nam châm lại gần: thấy đường ngang lệch khỏi baseline
 */

const int AOUT_PIN = 34;  // ADC1 Ch6

int baseline = 2048; // 12-bit midpoint (3.3V/2 ≈ 1.65V)

void setup() {
  Serial.begin(115200);

  // Calibrate baseline (không có nam châm)
  long sum = 0;
  for (int i = 0; i < 100; i++) {
    sum += analogRead(AOUT_PIN);
    delay(5);
  }
  baseline = sum / 100;

  Serial.println("ADC,Baseline"); // Header cho Serial Plotter
  Serial.print("Baseline calibrated: "); Serial.println(baseline);
}

void loop() {
  int raw = analogRead(AOUT_PIN); // 0-4095 (12-bit)
  int delta = raw - baseline;

  // Xuất cho Serial Plotter
  Serial.print(raw);
  Serial.print(",");
  Serial.println(baseline);

  delay(50); // 20Hz sampling
}

Kết Quả Mong Đợi

Baseline calibrated: 514
Đưa nam châm lại gần để xem thay đổi...
ADC Raw | Delta | Cực nam châm
514     | 0     | Không  (hoặc quá xa)
572     | +58   | Nam cực (South) gần mặt IC
498     | -16   | Không  (hoặc quá xa)
441     | -73   | Bắc cực (North) gần mặt IC

Ứng Dụng Thực Tế

Ứng dụngChi tiết
Đo cường độ từ trườngGaussmeter đơn giản
Phân biệt cực nam châmCông cụ kiểm tra nam châm
Cảm biến khoảng cách không tiếp xúcGắn nam châm, đo khoảng cách
Phát hiện vật liệu sắt từBiến dạng từ trường trái đất
Cân bằng điện từĐiều chỉnh vị trí dựa trên lực từ

Lưu Ý Khi Sử Dụng

1. Phân biệt module analog vs digital

Module analog có AOUT + DOUT. Module digital (KY-003) chỉ có S/DOUT. Đừng nhầm — cắm AOUT vào digital pin sẽ đọc 0 hoặc 1 không chính xác.

2. Calibrate baseline bắt buộc

Từ trường trái đất (~0.5 Gauss) và điện trường xung quanh làm lệch baseline. Phải đo baseline trong môi trường thực tế, không dùng 512/2048 cứng nhắc.

3. ESP32 ADC phi tuyến — ảnh hưởng đo lường

ESP32 ADC không tuyến tính ở cực trị. Nếu cần chính xác: dùng espadccal để hiệu chỉnh, hoặc dùng external ADC (MCP3208, ADS1115).

4. Từ trường trái đất gây offset nhỏ

Khi xoay module theo các hướng khác nhau, baseline thay đổi ~5-10 ADC counts do từ trường địa lý. Nếu cần độ chính xác cao: cố định hướng và calibrate tại chỗ.

Bài tiếp theo: