IoTLabs

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

Hệ thống giám sát nhà thông minh mini với Raspberry Pi – Bài 2: Đấu nối cảm biến cửa từ và chuyển động PIR

Ở bài 24.1, chúng ta đã hiểu tổng quan hệ thống giám sát cửa và chuyển động.
Trong bài này, chúng ta sẽ bắt đầu phần thực hành đầu tiên:

👉 Kết nối phần cứng thật với Raspberry Pi

Cụ thể:

  • đấu nối cảm biến cửa từ (door sensor)
  • đấu nối cảm biến chuyển động PIR
  • test tín hiệu GPIO
  • hiểu rõ các lưu ý quan trọng về điện áp 3.3V

Bạn sẽ làm được gì sau bài này

  • Đấu nối thành công cảm biến cửa từ và PIR với Raspberry Pi
  • Đọc được tín hiệu ON/OFF từ GPIO
  • Hiểu cách hoạt động của input digital
  • Tránh được lỗi cháy GPIO (rất quan trọng)

Chuẩn bị phần cứng

Thiết bị cần có

  • Raspberry Pi (Pi 3 / 4 / 5 đều OK)
  • Cảm biến cửa từ (magnetic reed switch)
  • Cảm biến PIR (HC-SR501 hoặc tương tự)
  • Breadboard
  • Dây jumper

Tổng quan kết nối

Trong bài này, chúng ta sẽ kết nối:

Door Sensor → GPIO input
PIR Sensor  → GPIO input

👉 Raspberry Pi chỉ đọc tín hiệu (input), không cấp nguồn trực tiếp cho tải.

⚠️ Lưu ý cực kỳ quan trọng về GPIO

  • GPIO Raspberry Pi dùng mức 3.3V
  • Không được đưa tín hiệu 5V trực tiếp vào GPIO

👉 Nếu sai:

  • có thể cháy GPIO
  • thậm chí hỏng cả board

Phần 1: Đấu nối cảm biến cửa từ

Cách hoạt động

Cảm biến cửa từ là một công tắc:

  • cửa đóng → mạch đóng (LOW hoặc HIGH tùy wiring)
  • cửa mở → mạch hở

Sơ đồ kết nối cơ bản

GPIO17 ---- Door Sensor ---- GND

👉 Nghĩa là:

  • một chân sensor → GPIO
  • một chân → GND

Kết nối với pull-up

Chúng ta sẽ dùng internal pull-up resistor của Raspberry Pi.

👉 Khi đó:

  • cửa đóng → GPIO = LOW
  • cửa mở → GPIO = HIGH

Code test cảm biến cửa

import RPi.GPIO as GPIO
import time

DOOR_PIN = 17

GPIO.setmode(GPIO.BCM)
GPIO.setup(DOOR_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)

while True:
    state = GPIO.input(DOOR_PIN)

    if state == 0:
        print("🚪 Door CLOSED")
    else:
        print("🚪 Door OPEN")

    time.sleep(1)

Kết quả mong đợi

Trạng thái cửaGPIOOutput
ĐóngLOWCLOSED
MởHIGHOPEN

Phần 2: Đấu nối cảm biến PIR

Cách hoạt động

PIR có 3 chân:

  • VCC → cấp nguồn
  • GND → mass
  • OUT → tín hiệu

👉 Khi có chuyển động:

  • OUT = HIGH

👉 Khi không có chuyển động:

  • OUT = LOW

Sơ đồ kết nối PIR

VCC → 5V
GND → GND
OUT → GPIO27

⚠️ Lưu ý quan trọng

  • PIR thường dùng 5V
  • nhưng chân OUT thường là 3.3V → an toàn cho GPIO

👉 Tuy nhiên:

  • vẫn nên dùng module chuẩn (HC-SR501)
  • không tự chế nếu chưa chắc chắn

Code test PIR

import RPi.GPIO as GPIO
import time

PIR_PIN = 27

GPIO.setmode(GPIO.BCM)
GPIO.setup(PIR_PIN, GPIO.IN)

while True:
    state = GPIO.input(PIR_PIN)

    if state == 1:
        print("🟢 Motion DETECTED")
    else:
        print("⚪ No motion")

    time.sleep(1)

Lưu ý khi test PIR

  • PIR cần 10–30 giây khởi động
  • trong thời gian này có thể báo sai
  • nên chờ ổn định trước khi test

Phần 3: Test cả 2 cảm biến cùng lúc

import RPi.GPIO as GPIO
import time

DOOR_PIN = 17
PIR_PIN = 27

GPIO.setmode(GPIO.BCM)

GPIO.setup(DOOR_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(PIR_PIN, GPIO.IN)

while True:
    door = GPIO.input(DOOR_PIN)
    motion = GPIO.input(PIR_PIN)

    if door == 0:
        print("🚪 Door CLOSED")
    else:
        print("🚪 Door OPEN")

    if motion == 1:
        print("🟢 Motion DETECTED")

    print("------")
    time.sleep(1)

Các lỗi thường gặp

❌ GPIO luôn HIGH

Nguyên nhân:

  • chưa dùng pull-up
  • wiring sai

👉 Fix:

GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

❌ PIR luôn báo chuyển động

Nguyên nhân:

  • chưa ổn định
  • sensitivity cao

👉 Fix:

  • chờ 30s
  • chỉnh biến trở trên PIR

❌ Không đọc được tín hiệu

Nguyên nhân:

  • sai chân GPIO
  • dây lỏng

👉 Fix:

  • kiểm tra lại wiring
  • in debug từng bước

❌ Giá trị bị nhảy liên tục

Nguyên nhân:

  • nhiễu
  • không debounce

👉 Fix:

  • xử lý debounce (bài 24.3)

Gợi ý vị trí lắp đặt

Cửa từ

  • gắn sát mép cửa
  • nam châm và sensor phải thẳng hàng

PIR

  • hướng ra khu vực cần giám sát
  • tránh:
    • quạt
    • ánh nắng trực tiếp
    • nguồn nhiệt mạnh

Kết nối với bài tiếp theo

Hiện tại bạn đã có:

✅ Cảm biến cửa hoạt động
✅ PIR hoạt động
✅ Raspberry Pi đọc được tín hiệu

👉 Bước tiếp theo: Bài 3: Đọc trạng thái cửa và phát hiện chuyển động bằng Python

Chúng ta sẽ:

  • xử lý event thay đổi trạng thái
  • debounce
  • log event local
  • chuẩn bị cho rule engine