Camera bẫy thú với Raspberry Pi và cảm biến chuyển động PIR
Muốn biết con gì hay ghé qua sân vườn hay máng ăn chim nhà bạn vào ban đêm hoặc lúc bạn vắng nhà? Một camera bẫy thú tự chế bằng Raspberry Pi rẻ hơn nhiều so với camera thương mại chuyên dụng, và bạn hoàn toàn kiểm soát được nơi lưu ảnh — không cần tài khoản cloud, không cần trả phí thuê bao.
Nguyên lý hoạt động
- Cảm biến PIR liên tục theo dõi thay đổi bức xạ hồng ngoại trong vùng quan sát; khi có vật thể ấm (chim, sóc, mèo…) di chuyển qua, chân output của PIR chuyển từ LOW lên HIGH.
- Script Python trên Raspberry Pi liên tục kiểm tra trạng thái chân GPIO nối với PIR.
- Khi phát hiện HIGH, script dùng
picamera2để chụp một ảnh tĩnh (hoặc quay clip vài giây), lưu file với tên có timestamp. - Sau mỗi lần chụp, script chờ một khoảng “cooldown” trước khi tiếp tục theo dõi, để một con vật đứng lại ăn không tạo ra hàng trăm file trùng lặp.
Linh kiện
- Raspberry Pi (Zero 2 W là lựa chọn tiết kiệm và đủ dùng, Pi 4/5 nếu muốn quay video độ phân giải cao)
- Pi Camera Module (v2 hoặc v3, gắn qua cổng CSI)
- Cảm biến chuyển động PIR (HC-SR501)
- Thẻ microSD đủ dung lượng lưu ảnh/video (khuyến nghị 32GB trở lên nếu để chạy nhiều ngày)
- Hộp đựng chống nước nếu đặt ngoài trời (xem phần lưu ý bên dưới)
- Pin sạc dự phòng hoặc nguồn 5V ổn định nếu đặt xa ổ điện
Code mẫu
#!/usr/bin/env python3
import time
from datetime import datetime
from pathlib import Path
from gpiozero import MotionSensor
from picamera2 import Picamera2
CHAN_PIR = 4
THU_MUC_LUU = Path("/home/pi/anh_thu")
THOI_GIAN_NGHI = 30 # giay - tranh chup lien tuc khi con vat con o gan
THU_MUC_LUU.mkdir(exist_ok=True)
pir = MotionSensor(CHAN_PIR)
camera = Picamera2()
cau_hinh = camera.create_still_configuration()
camera.configure(cau_hinh)
camera.start()
time.sleep(2) # cho cam bien anh sang on dinh
print("San sang. Dang cho chuyen dong...")
try:
while True:
pir.wait_for_motion()
thoi_diem = datetime.now().strftime("%Y%m%d_%H%M%S")
duong_dan = THU_MUC_LUU / f"con_vat_{thoi_diem}.jpg"
camera.capture_file(str(duong_dan))
print(f"Da chup: {duong_dan}")
# cho het thoi gian nghi truoc khi theo doi tiep,
# tranh spam anh khi con vat dung lai an lau
time.sleep(THOI_GIAN_NGHI)
except KeyboardInterrupt:
print("Dung chuong trinh.")
finally:
camera.stop()
Chạy nền liên tục bằng systemd hoặc đơn giản hơn với nohup:
nohup python3 camera_bay_thu.py > log.txt 2>&1 &
Muốn quay clip video ngắn thay vì ảnh tĩnh, thay
camera.capture_file()bằngcamera.start_and_record_video(str(duong_dan_mp4), duration=8)từ thư việnpicamera2.encoders.
Những lỗi thường gặp
- Không đặt thời gian “nghi” của cảm biến PIR ổn định: nhiều module HC-SR501 có biến trở chỉnh thời gian giữ tín hiệu HIGH (time delay) và độ nhạy — chỉnh quá nhạy sẽ chụp cả khi lá cây rung theo gió.
- Thiếu cooldown ở tầng code: chỉ dựa vào độ trễ phần cứng của PIR là chưa đủ; nên luôn thêm
time.sleep()sau mỗi lần chụp trong code để kiểm soát chủ động, tránh một con vật đứng ăn 5 phút tạo ra hàng chục file trùng. - Camera chưa “warm up”: gọi
capture_file()ngay saucamera.start()có thể cho ảnh bị tối hoặc lệch màu vì cảm biến ánh sáng chưa kịp tự cân chỉnh — luôn chờ 1-2 giây trước khi chụp lần đầu. - Đầy thẻ SD: chạy vài tuần liên tục với độ phân giải cao có thể lấp đầy thẻ nhanh hơn dự kiến — nên thêm script dọn ảnh cũ tự động hoặc đồng bộ định kỳ lên máy tính/NAS.
Lưu ý khi đặt ngoài trời
Nếu gắn camera ngoài vườn, hãy dùng hộp nhựa chống nước (IP65 trở lên) có lỗ khoét vừa ống kính camera, và để hở một khe thông hơi nhỏ để tránh đọng hơi nước bên trong hộp khi nhiệt độ thay đổi giữa ngày và đêm — hơi ẩm đọng lại là nguyên nhân phổ biến khiến board bị oxy hóa sau vài tháng.
Mở rộng
Thêm đèn hồng ngoại (IR illuminator) để chụp được ảnh rõ vào ban đêm mà không làm động vật giật mình bởi ánh sáng thường, hoặc chạy một mô hình nhận diện loài động vật đơn giản (TensorFlow Lite) trên Pi để tự động phân loại ảnh theo loài thay vì phải xem thủ công.
Bình luận