Camera time-lapse theo dõi cây trồng với Raspberry Pi
Xem một hạt mầm nảy lên rồi vươn lá trong vài giây video luôn là thứ gây nghiện, mà lại là một trong những dự án Raspberry Pi dễ bắt đầu nhất: không cần cảm biến phức tạp, không cần mạch điện — chỉ cần một camera, một lịch chụp đều đặn, và một lệnh ffmpeg ở cuối để ghép mọi thứ lại.
Nguyên lý hoạt động
- Pi Camera được gắn cố định, hướng thẳng vào chậu cây, không xê dịch trong suốt quá trình theo dõi.
- Một script Python dùng thư viện
picamera2chụp một ảnh, đặt tên theo timestamp, rồi thoát — chạy độc lập mỗi lần được gọi. cron(hoặc systemd timer) gọi script này theo chu kỳ cố định, ví dụ mỗi 10 phút, suốt ngày đêm trong vài tuần.- Khi đã có đủ ảnh, dùng
ffmpegghép toàn bộ chuỗi ảnh theo thứ tự thời gian thành một file video MP4.
Điểm mấu chốt để video mượt, không giật hình: khóa cứng phơi sáng và cân bằng trắng cho mọi lần chụp. Nếu để camera tự động điều chỉnh theo ánh sáng từng thời điểm trong ngày, video cuối cùng sẽ bị nhấp nháy sáng-tối liên tục giữa các khung hình.
Linh kiện
- Raspberry Pi (Pi 3/4/Zero 2 W đều dùng được)
- Pi Camera Module (v2 hoặc v3, kết nối qua cáp dẹt CSI)
- Thẻ microSD dung lượng đủ lớn (khuyến nghị 32GB trở lên, hoặc gắn thêm ổ USB nếu chụp dài ngày)
- Giá đỡ hoặc kẹp cố định camera, tránh rung lắc giữa các lần chụp
- Nguồn 5V ổn định cho Pi chạy liên tục nhiều tuần
Code mẫu
Script chụp một ảnh, dùng thông số phơi sáng cố định để tránh nhấp nháy:
#!/usr/bin/env python3
import time
from datetime import datetime
from picamera2 import Picamera2
OUTPUT_DIR = "/home/pi/timelapse"
picam2 = Picamera2()
config = picam2.create_still_configuration(main={"size": (1920, 1080)})
picam2.configure(config)
# Khoa phoi sang va can bang trang de tat ca khung hinh giong het nhau ve do sang
picam2.set_controls({
"AeEnable": False,
"AwbEnable": False,
"ExposureTime": 20000, # micro giay, chinh theo anh sang thuc te noi dat cay
"AnalogueGain": 1.5,
"ColourGains": (1.4, 1.6), # (do, xanh duong) - do truoc de tim gia tri on dinh
})
picam2.start()
time.sleep(2) # cho cam bien on dinh truoc khi chup
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"{OUTPUT_DIR}/frame_{timestamp}.jpg"
picam2.capture_file(filename)
picam2.close()
Thêm dòng sau vào crontab -e để chụp mỗi 10 phút:
*/10 * * * * /usr/bin/python3 /home/pi/capture_frame.py >> /home/pi/timelapse.log 2>&1
Sau vài tuần, ghép toàn bộ ảnh thành video bằng ffmpeg:
ffmpeg -framerate 24 -pattern_type glob -i '/home/pi/timelapse/frame_*.jpg' \
-vf "scale=1920:-2" -c:v libx264 -pix_fmt yuv420p /home/pi/timelapse_output.mp4
-framerate 24 nghĩa là cứ 24 ảnh gộp thành 1 giây video — với ảnh chụp mỗi 10 phút, 1 giây video tương ứng khoảng 4 giờ thực tế.
Những lỗi thường gặp
- Để camera tự động phơi sáng/cân bằng trắng là nguyên nhân phổ biến nhất gây nhấp nháy video — luôn khóa
AeEnablevàAwbEnablenhư trong script trên. - Cron chạy với môi trường khác terminal — không có sẵn
PATHđầy đủ, nên luôn dùng đường dẫn tuyệt đối (/usr/bin/python3, đường dẫn file script đầy đủ) trong dòng crontab. - Thẻ nhớ đầy sau vài tuần vì mỗi ảnh full-HD tốn khoảng 1-2MB, chụp mỗi 10 phút suốt một tháng có thể lên tới hàng GB — cân nhắc gắn thêm ổ USB hoặc tự động xóa ảnh cũ sau khi đã render video.
- Tên file phải sắp xếp đúng thứ tự thời gian để
ffmpeg -pattern_type globghép đúng trình tự — định dạng timestampYYYYMMDD_HHMMSSđảm bảo sắp xếp theo bảng chữ cái trùng với sắp xếp theo thời gian.
Mở rộng
Thêm cảm biến ánh sáng để tự bỏ qua khung hình ban đêm (đỡ tốn dung lượng vô ích), chèn watermark ngày-giờ lên video bằng bộ lọc drawtext của ffmpeg, hoặc tự động đồng bộ ảnh lên lưu trữ đám mây/NAS mỗi đêm để không lo mất dữ liệu nếu thẻ nhớ hỏng giữa chừng.
Bình luận