IoTLabs

Nghiên cứu, Sáng tạo và Thử nghiệm

Series: Lập trình Raspberry Pi – Bài 9: Relay + an toàn điện + chống nhiễu (opto, flyback, ground)

Series: Lập trình Raspberry Pi & Ứng dụng thực tế Phần 2 — Lập trình GPIO & phần cứng Bài 9: Relay + an toàn điện + chống nhiễu (opto, flyback, ground)


1) Mục tiêu bài học

Sau bài này bạn sẽ:

  • Điều khiển relay 1 kênh bằng Raspberry Pi (bật/tắt tải).
  • Biết cách chọn relay an toàn (opto-isolated, low-level trigger).
  • Hiểu các nguyên tắc chống nhiễu: ground, flyback, snubber, tách nguồn.
  • Có code Python chạy được ngay + checklist debug “relay không nhả/nhấp nháy”.

Lưu ý an toàn: phần điện AC 220V nguy hiểm. Bài này tập trung vào nguyên tắc + đấu nối an toàn (không làm ẩu).

2) Chọn module relay “đúng chuẩn”

Khuyến nghị

  • Relay module có opto (opto-isolated)
  • Có jumper chọn LOW trigger / HIGH trigger (ưu tiên LOW trigger phổ biến)
  • Có diode chống ngược (đa số module tốt có sẵn)

Tránh

  • Relay trần không có transistor driver/opto (Pi kéo trực tiếp GPIO rất rủi ro)
  • Module “mập mờ” thông số, không rõ điện áp kích, không rõ cách tách nguồn

3) 3 nguyên tắc an toàn quan trọng

  1. GPIO chỉ 3.3V: không đưa 5V vào GPIO.
  2. Tách phần công suất và phần điều khiển:
    • Pi điều khiển relay (logic)
    • Relay đóng/cắt tải (power)
  3. Đấu COM/NO/NC đúng:
    • COM: chân chung
    • NO (Normally Open): mặc định hở, bật relay mới đóng (khuyến nghị)
    • NC (Normally Closed): mặc định đóng, bật relay mới hở (cẩn thận)

4) Wiring điều khiển relay (DC, phần logic)

Ví dụ dùng GPIO17 (Pin 11) điều khiển relay IN:

Trường hợp A: Module relay hỗ trợ 3.3V logic tốt

  • VCC → 5V (Pin 2 hoặc 4) (đa số relay coil cần 5V)
  • GND → GND (Pin 6)
  • IN → GPIO17 (Pin 11)

Trường hợp B: Module nhạy kém với 3.3V

  • Dùng relay module loại “3.3V compatible”
  • Hoặc dùng transistor/optocoupler driver (khuyến nghị nếu module kén)

Quan trọng: GND Pi và GND relay phải chung (trừ khi bạn dùng opto cách ly hoàn toàn + nguồn riêng và wiring cách ly đúng).


5) Phần tải: ví dụ “an toàn” trước khi đụng AC

Trước khi thử 220V, hãy test bằng tải DC thấp áp:

  • Đèn LED strip 5V/12V
  • Quạt DC nhỏ 5V/12V => ít nguy hiểm hơn, dễ debug.

Nếu bạn đóng cắt AC 220V:

  • Dùng hộp cách điện
  • Dây đúng chuẩn, siết domino chắc
  • Có cầu chì/breaker phù hợp
  • Không chạm tay khi đang cấp điện

6) Code Python: bật/tắt relay

Tạo thư mục:

mkdir -p ~/apps/relay-control
cd ~/apps/relay-control
nano relay_toggle.py

Dán code:

from gpiozero import OutputDevice
from time import sleep

# Nhiều relay module là "LOW trigger" (IN=0 -> ON)
RELAY_PIN = 17
relay = OutputDevice(RELAY_PIN, active_high=False, initial_value=False)

print("Relay demo: ON 2s -> OFF 2s (loop)")
while True:
    relay.on()   # ON
    print("Relay: ON")
    sleep(2)

    relay.off()  # OFF
    print("Relay: OFF")
    sleep(2)

Chạy:

python3 relay_toggle.py

Nếu relay module của bạn là HIGH trigger, đổi active_high=True:

relay = OutputDevice(RELAY_PIN, active_high=True, initial_value=False)

7) Chống nhiễu: tại sao relay hay làm Pi “reset”?

Khi relay đóng/cắt tải cảm (motor, coil, quạt), nhiễu sẽ:

  • gây sụt áp nguồn
  • tạo spike điện áp
  • làm Pi reboot / Wi-Fi rớt / log lỗi ngẫu nhiên

Checklist chống nhiễu thực tế

  • Nguồn riêng cho relay/tải (đừng lấy 5V relay từ Pi nếu tải nặng)
  • Chung GND đúng cách (star ground, dây gọn)
  • Với motor/coil DC: flyback diode song song tải (nếu module chưa có)
  • Với tải AC cảm: cân nhắc snubber RC hoặc MOV (tùy tải)
  • Dây AC và dây tín hiệu GPIO tách xa nhau, không đi song song dài

8) Lỗi thường gặp & cách fix nhanh

  • Relay không kêu “tạch”:
    • sai VCC (relay coil cần 5V)
    • sai trigger (LOW/HIGH)
    • GPIO sai pin
  • Relay nhấp nháy khi boot:
    • GPIO mặc định trạng thái floating → set initial_value=False
    • thêm pull-up/pull-down (nếu cần)
  • Pi reboot khi relay đóng tải:
    • nguồn yếu / dùng chung nguồn
    • tải gây nhiễu mạnh → tách nguồn + chống nhiễu như mục 7

9) Bài tập nâng cấp

  1. Làm “relay controller” có 2 mode:
    • Mode A: ON 5 giây → OFF 10 giây (theo chu kỳ)
    • Mode B: bấm button (Bài 6) để toggle relay
  2. Chạy script bằng systemd service (Bài 3) để tự chạy khi boot.