Ở 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ửa | GPIO | Output |
|---|---|---|
| Đóng | LOW | CLOSED |
| Mở | HIGH | OPEN |
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


