Proje hakkında
Raspberry Pi kartlarında kamera için özel bir CSI konnektörü bulunur. Bu konnektöre takılan kamera modülü, USB kameralara göre çok daha hızlı veri aktarır ve işlemciyi daha az yorar. Resmi Camera Module 3 otomatik odaklama da yapabilir.
Projenin ilk bölümünde kamerayı komut satırından test edip ardından Python ile butona basıldığında tarih ve saat bilgisiyle adlandırılmış fotoğraflar kaydedeceğiz. İkinci bölümde belirli aralıklarla kare çeken bir time-lapse programı yazıp bu kareleri ffmpeg ile videoya dönüştüreceğiz. Bitkinin büyümesi, bulutların hareketi veya bir LEGO yapımı için harika bir araç!
- Kamera modülünü CSI konnektörüne doğru takmayı
- rpicam komutlarıyla kamerayı test etmeyi
- Picamera2 ile Python'dan fotoğraf çekmeyi
- Kareleri ffmpeg ile videoya dönüştürmeyi
Malzeme listesi
Projeyi tamamlamak için aşağıdaki 7 çeşit malzemeye ihtiyacınız var. Raspberry Pi'niz hazırsa geri kalan parçaların çoğu elektronik başlangıç setlerinde bulunur.
Raspberry Pi 4 veya 5 1 adet
Raspberry Pi OS (Bookworm veya üstü) kurulu olmalı. Pi 3B+ ile de çalışır.
microSD kart 1 adet
En az 16 GB, Raspberry Pi OS yüklü.
Resmi güç adaptörü 1 adet
Pi 5 için 5V 5A USB-C, Pi 4 için 5V 3A USB-C.
Raspberry Pi Camera Module 3 1 adet
Camera Module v2 de kullanılabilir; v3 otomatik odaklıdır.
Pi 5 kamera kablosu (22-15 pin) 1 adet
Sadece Raspberry Pi 5 için. Pi 4'te kameranın kendi kablosu kullanılır.
Push buton 1 adet
Fotoğraf çekmek için.
Jumper kablo (dişi-erkek) 2 adet
Devre bağlantıları
Bağlantıları Raspberry Pi kapalıyken ve güç kablosu çıkarılmışken yapın. Her satırda önce GPIO (BCM) numarası, ardından kart üzerindeki fiziksel pin numarası yazar; çizgi rengi önerilen kablo rengidir.
Adım adım kurulum
Pi'yi kapatın
Kamera konnektörüne asla güç varken dokunmayın. Güç kablosunu çıkarın.
Kamerayı bağlayın
Konnektörün kilidini kaldırın, şerit kabloyu doğru yönde takın ve kilidi kapatın. Kablonun düz ve tam oturduğundan emin olun.
Butonu bağlayın
Butonun bir bacağını pin 3'e (GPIO2), çapraz bacağını pin 6'ya (GND) bağlayın.
Kamerayı test edin
Pi'yi açıp terminale
rpicam-helloyazın. Birkaç saniyeliğine kamera önizlemesi açılmalı. Eski sistemlerde komutun adılibcamera-helloolabilir.İlk fotoğrafı çekin
rpicam-still -o deneme.jpgkomutuyla bir fotoğraf çekin ve Dosya Yöneticisi'nden açıp kontrol edin.Butonlu kamerayı çalıştırın
İlk Python kodunu foto_buton.py olarak kaydedip çalıştırın. Her basışta yeni bir fotoğraf kaydedilecek.
Time-lapse çekin
İkinci kodu çalıştırın. Kareler timelapse klasörüne kaydedilir. Bitince üçüncü bloktaki ffmpeg komutuyla videoya dönüştürün.
Python kodu
Kodları Thonny editörüne yapıştırıp .py uzantısıyla kaydedin ve Run düğmesine basın ya da terminalden python3 dosya_adi.py komutuyla çalıştırın. Programı durdurmak için Ctrl+C tuşlarını kullanın.
Butona her basıldığında tarih-saat isimli fotoğraf kaydeder.
# Butonla fotoğraf çeken kamera
# RobotikHocasi.com
from picamera2 import Picamera2
from gpiozero import Button
from datetime import datetime
from signal import pause
kamera = Picamera2()
kamera.configure(kamera.create_still_configuration())
kamera.start()
buton = Button(2)
def fotograf_cek():
dosya = datetime.now().strftime("foto_%Y%m%d_%H%M%S.jpg")
kamera.capture_file(dosya)
print("Kaydedildi:", dosya)
buton.when_pressed = fotograf_cek
print("Fotograf cekmek icin butona basin. Cikis: Ctrl+C")
pause()
Belirli aralıklarla kare çeken time-lapse programı.
# Time-lapse (zaman atlamalı) çekim
from picamera2 import Picamera2
from time import sleep
import os
KLASOR = "timelapse"
ARALIK = 10 # İki kare arası süre (saniye)
ADET = 60 # Toplam kare sayısı -> 10 dakika
os.makedirs(KLASOR, exist_ok=True)
kamera = Picamera2()
kamera.configure(kamera.create_still_configuration(main={"size": (1920, 1080)}))
kamera.start()
sleep(2) # Otomatik pozlama ve beyaz dengesinin oturması için
for i in range(ADET):
dosya = f"{KLASOR}/kare_{i:04d}.jpg"
kamera.capture_file(dosya)
print(f"{i + 1}/{ADET} kaydedildi")
sleep(ARALIK)
kamera.stop()
print("Bitti! Simdi kareleri videoya donusturun.")
Kareleri saniyede 24 karelik bir MP4 videosuna dönüştürür.
# ffmpeg yüklü değilse kurun
sudo apt install -y ffmpeg
# kare_0000.jpg, kare_0001.jpg ... dosyalarından video oluştur
ffmpeg -framerate 24 -i timelapse/kare_%04d.jpg -c:v libx264 -pix_fmt yuv420p timelapse.mp4
Kod açıklaması
kamera.create_still_configuration()Kamerayı yüksek çözünürlüklü fotoğraf çekmeye uygun şekilde ayarlar. Video için create_video_configuration() kullanılır.
kamera.start()Kamera sensörünü çalıştırır. Bu satırdan sonra capture_file() ile istediğiniz an fotoğraf alabilirsiniz.
datetime.now().strftime("foto_%Y%m%d_%H%M%S.jpg")Dosya adına o anki tarih ve saati ekler; örneğin foto_20261024_153012.jpg. Böylece fotoğraflar birbirinin üzerine yazılmaz.
buton.when_pressed = fotograf_cekFonksiyonun adını parantezsiz yazarız; gpiozero fonksiyonu butona her basıldığında arka planda çağırır.
f"{KLASOR}/kare_{i:04d}.jpg"f-string içinde {i:04d} sayıyı 4 haneli ve başı sıfırlı yazar: 0000, 0001, 0002… ffmpeg kareleri bu sırayla okur.
sleep(2)Kamera açıldıktan hemen sonra çekilen ilk karelerde parlaklık ve renk henüz ayarlanmamış olabilir. İki saniye beklemek bunu önler.
Nasıl çalışır?
Kamera modülündeki görüntü sensörü, gelen ışığı milyonlarca küçük piksel hücresinde elektrik sinyaline çevirir. Bu ham veri CSI şerit kablosu üzerinden doğrudan Raspberry Pi'nin görüntü işlemcisine aktarılır. Burada renk düzeltme, keskinleştirme ve gürültü azaltma yapılır; Picamera2 ise bu işlenmiş görüntüyü Python'a sunar.
Time-lapse, olayı normalden çok daha seyrek kaydedip normal hızda oynatma tekniğidir. 10 saniyede bir çekilen 60 kare, saniyede 24 kare hızında oynatıldığında 10 dakikalık olay 2,5 saniyeye sığar. Bir bitkinin bir haftalık büyümesini izlemek için aralığı 5–10 dakikaya çıkarmanız yeterlidir.
Sorun giderme
No cameras available hatası
Camera in use by another process hatası
Fotoğraflar çok karanlık veya renkleri bozuk
ffmpeg No such file hatası
Geliştirme fikirleri
Projeyi tamamladıysanız, aşağıdaki fikirlerle bir adım öteye taşıyabilirsiniz.
Hareket algılayan kamera
PIR sensörü ekleyerek biri geçtiğinde otomatik fotoğraf çeken bir güvenlik kamerası yapın.
Bitki büyüme günlüğü
Kamerayı bir saksıya doğrultup bir hafta boyunca saatte bir kare çekin.
Nesne tanıma
OpenCV ve hazır bir yapay zeka modeliyle görüntüdeki nesneleri tanıyın.
Web'den canlı görüntü
Flask ile kameranın son fotoğrafını telefondan görebileceğiniz bir sayfa yapın.