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ý Relay 5V SRD-05VDC: Cơ Điện Từ, Cách Ly Galvanic & Điều Khiển Thiết Bị 220V

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

⚠️ CẢNH BÁO AN TOÀN ĐIỆN: Điện 220V AC có thể gây chết người. Chỉ thực hiện khi hiểu rõ về điện học. Không chạm vào bất kỳ dây dẫn nào khi mạch đang được cấp điện. Nếu chưa có kinh nghiệm làm việc với điện 220V, hãy nhờ người có chuyên môn.

Relay là cầu nối giữa thế giới điện tử (3.3V/5V logic nhỏ) và điện dân dụng (220V AC, dòng lớn). Bài này giải thích cơ chế điện từ, tại sao cần cách ly galvanic, và cách code an toàn.

Nguyên Lý Hoạt Động

1. Cơ Điện Từ — Cuộn Dây + Lõi Sắt + Tiếp Điểm

SRD-05VDC là relay cơ điện từ (electromechanical relay):

Relay  Cắt ngang:

Cuộn dây (coil) 5V:
         VCC(+) ───[cuộn] ─── GND
                      
                       Từ trường khi  dòng
                   [Lõi sắt]
                      
                       Lực từ
                   [Armature]  Đòn bẩy kim loại
                      
         ┌────────────┤
    NC ──┤            ├── COM  Chân chung (dây pha 220V)
            [tiếp    
    NO ──┤   điểm]    
         └────────────┘

Khi KHÔNG  dòng cuộn:         Khi  dòng cuộn:
  - Armature  vị trí trên       - Từ trường kéo armature
  - COM tiếp xúc NC              - COM tiếp xúc NO
  - Mạch NC ĐÓNG, NO HỞ          - Mạch NO ĐÓNG, NC HỞ

2. Cách Ly Galvanic — Tại Sao Quan Trọng

Phần điện tử (cuộn dây, MCU) và phần điện lực (220V) hoàn toàn cách ly:

  • Không có đường dẫn điện trực tiếp giữa MCU 3.3V và 220V
  • Kết nối duy nhất là từ trường qua khoảng không khí
  • Nếu có sự cố bên 220V: MCU an toàn
  • Cách ly điện môi: >4kV breakdown voltage

3. Flyback Diode — Bảo Vệ Transistor

Cuộn dây là cuộn cảm (inductor) — khi mất dòng đột ngột tạo điện áp ngược (flyback voltage) rất cao (có thể 100V+):

Không  flyback diode:
Khi tắt relay đột ngột:
    VCC ─[cuộn]─ Transistor C
                               SPIKE điện áp ngược 50-100V
                               Phá transistor ngay lập tức!

 flyback diode (1N4007):
    VCC ─[cuộn]─ Transistor C
                 ─────────────
    [1N4007]  ngược chiều VCC  "khóa" dòng bình thường
    
    Khi spike: diode dẫn ngược  spike tiêu tán qua cuộn dây  an toàn

Module relay trong kit: Đã tích hợp flyback diode và transistor điều khiển. Không cần thêm bên ngoài.

4. Logic Active LOW — Phổ Biến Nhất

Hầu hết module relay trong kit:

  • IN = LOW (0V) → Transistor dẫn → Cuộn kích → Relay ON → NO ĐÓNG
  • IN = HIGH (VCC) → Transistor tắt → Không kích → Relay OFF → NC ĐÓNG

Tại sao active LOW? An toàn hơn: nếu dây tín hiệu bị đứt → IN = floating (thường HIGH) → Relay OFF → thiết bị 220V tắt. Mặc định tắt an toàn hơn mặc định bật.

Kiểm tra module: Nhìn vào LED trên module khi cấp nguồn lần đầu. Nếu LED sáng + nghe tiếng click → module active LOW và relay đang ON ngay khi cấp nguồn (INPUT floating = LOW). Giải pháp: kéo INPUT lên HIGH ngay trong setup().

Thông Số Kỹ Thuật

Thông sốGiá trị
Điện áp cuộn dây5VDC
Dòng cuộn dây~70-90mA
Điện áp tiếp điểm tối đa250VAC / 30VDC
Dòng tiếp điểm tối đa10A
Công suất tiếp điểm2500VA (250VAC × 10A)
Thời gian chuyển mạch~10ms
Tuổi thọ cơ học10⁷ thao tác
Tiếng ồnNghe được (tiếng click)

Sơ Đồ Chân (Pinout)

Module Relay 1 Kênh

Mặt trên:

┌────────────────────────────────────────────┐
│  [Relay SRD-05VDC]  [LED]  [Transistor]    │
│                     [Diode flyback]         │
└────────────────────────────────────────────┘
   GND   IN   VCC         NC   COM   NO
   (-)  (SIG) (+5V)    ← Screw terminals → 220V side
ChânMô tả
GNDMass (phía low-voltage)
INSignal input — LOW=ON, HIGH=OFF (active LOW)
VCCNguồn 5V cho cuộn dây
COMCommon — nối vào dây pha 220V
NONormally Open — nối vào thiết bị
NCNormally Closed — (ít dùng)

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

⚠️ Sơ Đồ Kết Nối An Toàn

Phía thấp (Low-voltage — an toàn):

ESP32 DevKit V1           Relay Module
─────────────────────     ─────────────────
GND  ─────────────────→  GND
5V   ─────────────────→  VCC    ← Cần 5V! Không phải 3.3V
GPIO5 (OUTPUT) ─────────→  IN   ← 3.3V đủ để kích transistor

⚠️ Quan trọng: Cuộn relay cần 5V (70-90mA). Không lấy từ pin 3V3 của ESP32. Dùng pin 5V (VBUS từ USB) hoặc nguồn ngoài.

Phía cao (High-voltage 220V — NGUY HIỂM):

NGUỒN 220V AC

├─── Dây pha (L, nâu/đỏ) ───→ COM (Relay)
                               NO  ───→ Thiết bị (đèn, quạt...)
                                          
└─── Dây trung tính (N, xanh lam) ────────┘

⚠️ TUYỆT ĐỐI không chạm vào COM, NO, NC khi nguồn 220V đang bật. Rút phích cắm khỏi ổ điện trước khi đấu nối phía 220V.

Với Arduino Uno

Arduino Uno               Relay Module
─────────────────────     ─────────────────
GND  ─────────────────→  GND
5V   ─────────────────→  VCC
Pin 9 (OUTPUT) ─────────→  IN

Code Arduino IDE

Code Bật/Tắt Relay Cơ Bản — Arduino Uno

/*
 * Relay SRD-05VDC — Bật/tắt đèn 220V
 * Board: Arduino Uno
 * Kết nối phía thấp: VCC→5V, GND→GND, IN→Pin9
 * Kết nối phía cao (220V): COM→dây pha, NO→đèn→dây trung tính
 *
 * ACTIVE LOW: LOW = relay ON, HIGH = relay OFF
 * QUAN TRỌNG: setup() bật HIGH ngay để tránh ON khi khởi động
 */

const int RELAY_PIN = 9;
#define RELAY_ON  LOW   // Active LOW module
#define RELAY_OFF HIGH

void setup() {
  Serial.begin(9600);
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, RELAY_OFF); // Tắt ngay khi khởi động (an toàn)
  Serial.println("=== Relay Control ===");
  Serial.println("Relay OFF ban đầu");
  delay(1000);
}

void loop() {
  // Bật đèn 5 giây
  Serial.println("Relay ON — Đèn BẬT");
  digitalWrite(RELAY_PIN, RELAY_ON);
  delay(5000);

  // Tắt đèn 3 giây
  Serial.println("Relay OFF — Đèn TẮT");
  digitalWrite(RELAY_PIN, RELAY_OFF);
  delay(3000);
}

Code Hẹn Giờ Timer — Arduino Uno

/*
 * Relay — Bộ hẹn giờ: bật lúc X giây, tắt sau Y giây
 * Ứng dụng: hẹn giờ tưới cây, bật đèn buổi sáng
 * Board: Arduino Uno
 * Kết nối: VCC→5V, GND→GND, IN→Pin9
 */

const int RELAY_PIN = 9;
#define RELAY_ON  LOW
#define RELAY_OFF HIGH

// Cấu hình timer
const unsigned long ON_DURATION_MS  = 10000; // Bật 10 giây
const unsigned long OFF_DURATION_MS = 5000;  // Tắt 5 giây

bool relayState = false;
unsigned long lastToggleTime = 0;

void setRelay(bool on, const char* reason) {
  relayState = on;
  digitalWrite(RELAY_PIN, on ? RELAY_ON : RELAY_OFF);
  Serial.print("Relay ");
  Serial.print(on ? "ON " : "OFF");
  if (reason) { Serial.print(" — "); Serial.print(reason); }
  Serial.println();
}

void setup() {
  Serial.begin(9600);
  pinMode(RELAY_PIN, OUTPUT);
  setRelay(false, "Khởi động");
  lastToggleTime = millis();
}

void loop() {
  unsigned long now = millis();
  unsigned long elapsed = now - lastToggleTime;

  if (!relayState && elapsed >= OFF_DURATION_MS) {
    // Đang tắt → bật
    lastToggleTime = now;
    setRelay(true, "Hết thời gian tắt");
  } else if (relayState && elapsed >= ON_DURATION_MS) {
    // Đang bật → tắt
    lastToggleTime = now;
    setRelay(false, "Hết thời gian bật");
  }
}

Code Relay Kích Bởi Cảm Biến — Arduino Uno

/*
 * Relay + PIR Sensor — Bật đèn khi phát hiện người
 * Board: Arduino Uno
 * Kết nối:
 *   Relay: VCC→5V, GND→GND, IN→Pin9
 *   PIR HC-SR501: VCC→5V, GND→GND, OUT→Pin2
 *
 * Đèn tự tắt sau 30 giây không thấy người
 */

const int RELAY_PIN = 9;
const int PIR_PIN   = 2;
#define RELAY_ON  LOW
#define RELAY_OFF HIGH

const unsigned long AUTO_OFF_DELAY = 30000; // 30 giây

volatile bool motionDetected = false;
unsigned long lastMotionTime = 0;
bool lightOn = false;

void onMotion() {
  motionDetected = true;
}

void setup() {
  Serial.begin(9600);
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(PIR_PIN, INPUT);
  digitalWrite(RELAY_PIN, RELAY_OFF); // Tắt ban đầu

  attachInterrupt(digitalPinToInterrupt(PIR_PIN), onMotion, RISING);

  // Chờ PIR warmup (30 giây khuyến nghị)
  Serial.println("PIR warmup 30 giây...");
  delay(30000);
  Serial.println("Hệ thống sẵn sàng");
}

void loop() {
  if (motionDetected) {
    motionDetected = false;
    lastMotionTime = millis();

    if (!lightOn) {
      lightOn = true;
      digitalWrite(RELAY_PIN, RELAY_ON);
      Serial.println("PHÁT HIỆN NGƯỜI — Bật đèn");
    } else {
      Serial.println("Gia hạn thêm 30 giây");
    }
  }

  // Tắt đèn sau 30 giây không phát hiện
  if (lightOn && (millis() - lastMotionTime >= AUTO_OFF_DELAY)) {
    lightOn = false;
    digitalWrite(RELAY_PIN, RELAY_OFF);
    Serial.println("30s không phát hiện — Tắt đèn");
  }
}

Code ESP32 — Relay Điều Khiển Qua Serial

/*
 * Relay SRD-05VDC — ESP32, điều khiển qua Serial
 * Board: ESP32 DevKit V1
 * Kết nối: VCC→5V(VIN/VBUS), GND→GND, IN→GPIO5
 *
 * Gửi lệnh qua Serial Monitor:
 *   "ON"  → bật relay
 *   "OFF" → tắt relay
 *   "STATUS" → xem trạng thái
 *   "TIMER 10" → bật 10 giây rồi tự tắt
 */

const int RELAY_PIN = 5;
#define RELAY_ON  LOW
#define RELAY_OFF HIGH

bool relayState = false;
unsigned long timerEnd = 0;
bool timerActive = false;

void setRelay(bool on) {
  relayState = on;
  digitalWrite(RELAY_PIN, on ? RELAY_ON : RELAY_OFF);
}

void setup() {
  Serial.begin(115200);
  pinMode(RELAY_PIN, OUTPUT);
  setRelay(false); // Tắt ngay khi khởi động
  Serial.println("=== Relay Controller ESP32 ===");
  Serial.println("Lệnh: ON | OFF | STATUS | TIMER <giây>");
}

void loop() {
  // Kiểm tra timer
  if (timerActive && millis() >= timerEnd) {
    timerActive = false;
    setRelay(false);
    Serial.println("Timer hết — Relay OFF");
  }

  // Đọc lệnh từ Serial
  if (Serial.available() > 0) {
    String cmd = Serial.readStringUntil('\n');
    cmd.trim();
    cmd.toUpperCase();

    if (cmd == "ON") {
      timerActive = false;
      setRelay(true);
      Serial.println("Relay ON");
    } else if (cmd == "OFF") {
      timerActive = false;
      setRelay(false);
      Serial.println("Relay OFF");
    } else if (cmd == "STATUS") {
      Serial.print("Relay: ");
      Serial.println(relayState ? "ON" : "OFF");
      if (timerActive) {
        Serial.print("Timer còn: ");
        Serial.print((timerEnd - millis()) / 1000);
        Serial.println(" giây");
      }
    } else if (cmd.startsWith("TIMER ")) {
      int seconds = cmd.substring(6).toInt();
      if (seconds > 0) {
        setRelay(true);
        timerActive = true;
        timerEnd = millis() + (unsigned long)seconds * 1000;
        Serial.print("Relay ON, tự tắt sau ");
        Serial.print(seconds);
        Serial.println(" giây");
      }
    } else {
      Serial.println("Lệnh không hợp lệ. Dùng: ON / OFF / STATUS / TIMER <giây>");
    }
  }
}

Kết Quả Mong Đợi

=== Relay Control ===
Relay OFF ban đầu
Relay ON — Đèn BẬT       ← Nghe tiếng "click" và đèn sáng
Relay OFF — Đèn TẮT      ← Nghe tiếng "click" và đèn tắt

Ứng Dụng Thực Tế

Ứng dụngChi tiết
Đèn thông minhKích bởi PIR / thời gian / app
Hệ thống tưới câyTimer bật bơm 5 phút mỗi sáng
Điều khiển quạt theo nhiệt độDHT11 + relay: T > 30°C → bật quạt
Smart power stripTắt hoàn toàn thiết bị không standby
Hệ thống báo độngCòi 220V kêu khi cảm biến trigger

Lưu Ý An Toàn & Kỹ Thuật

⚠️ An Toàn Điện 220V — BẮT BUỘC:

  1. Rút điện trước khi đấu nối hoặc thay đổi phía 220V
  2. Dùng dây có tiết diện đủ: tối thiểu 1.5mm² cho 10A
  3. Đặt relay trong hộp cách điện — không để hở
  4. Earth/ground thiết bị điện đúng cách
  5. Kiểm tra cách điện trước khi cấp nguồn 220V
  6. Không sửa chữa khi đang cắm điện

Kỹ thuật:

1. Cấp 5V cho cuộn relay — không dùng 3.3V

Cuộn cần 5V/90mA để kéo armature đủ mạnh. Ở 3.3V: relay có thể hoạt động không ổn định hoặc không đóng tiếp điểm hoàn toàn.

2. RELAY_OFF ngay trong setup()

Vì active LOW: IN floating = LOW = relay ON. Nếu không set HIGH trong setup() → thiết bị 220V bật ngay khi reset MCU. Luôn set RELAY_OFF trước tiên.

3. Giới hạn dòng 10A

Tiếp điểm relay 10A chỉ dùng cho tải điện trở (bóng đèn, máy sưởi). Tải cảm ứng (motor, biến áp) cần relay công suất cao hơn vì dòng khởi động có thể gấp 5-10x dòng danh định.

4. Không switch DC điện áp cao

DC 220V không có zero-crossing như AC — arc (tia lửa) lớn hơn và kéo dài hơn khi ngắt. Relay AC không phù hợp cho DC điện áp cao.

Bài tiếp theo: