RP–03 · Raspberry Pi başlangıç projesi

Kamera ile Fotoğraf ve Time-Lapse

Raspberry Pi'yi Arduino'dan ayıran en güçlü özelliklerden biri kamera desteğidir. Bu projede kamera modülünü bağlayıp Picamera2 kütüphanesiyle butona basınca fotoğraf çekecek, ardından saatler süren bir olayı saniyelere sığdıran time-lapse videosu üreteceğiz.

SeviyeBaşlangıç
Süre40–45 dk
Malzeme7 çeşit
Picamera2rpicam-stillDosya adlandırmadatetimef-stringffmpeg

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.

Kamera şerit kablosuCAM konnektörüPi 5'te CAM/DISP 0 veya 1
Buton 1. bacakGPIO2 · pin 3Dahili pull-up kodda açılır
Buton 2. bacak (çapraz)GND · pin 6
Konnektörün plastik kilidini iki yanından tutup yavaşça yukarı kaldırın. Şerit kabloyu metal temasları konnektörün içindeki temaslara bakacak şekilde sonuna kadar itin ve kilidi aşağı bastırın. Kablo yanlış yönde takılırsa kamera algılanmaz ama zarar görmez. Kablo kırılgandır; keskin bükmeyin.

Adım adım kurulum

  1. Pi'yi kapatın

    Kamera konnektörüne asla güç varken dokunmayın. Güç kablosunu çıkarın.

  2. 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.

  3. Butonu bağlayın

    Butonun bir bacağını pin 3'e (GPIO2), çapraz bacağını pin 6'ya (GND) bağlayın.

  4. Kamerayı test edin

    Pi'yi açıp terminale rpicam-hello yazın. Birkaç saniyeliğine kamera önizlemesi açılmalı. Eski sistemlerde komutun adı libcamera-hello olabilir.

  5. İlk fotoğrafı çekin

    rpicam-still -o deneme.jpg komutuyla bir fotoğraf çekin ve Dosya Yöneticisi'nden açıp kontrol edin.

  6. 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.

  7. 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.

foto_buton.pyPython
# 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ı.

timelapse.pyPython
# 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.

terminalTerminal
# 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_cek

Fonksiyonun 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ı
Şerit kablonun yönünü ve tam oturduğunu kontrol edin. Raspberry Pi 5 kullanıyorsanız kameranın kendi kablosu değil, 22-15 pinlik Pi 5 kablosu gerekir.
Camera in use by another process hatası
Kamerayı kullanan başka bir program (örneğin açık bir rpicam-hello veya ikinci bir Python betiği) var. Onu kapatıp tekrar deneyin.
Fotoğraflar çok karanlık veya renkleri bozuk
Kamera başladıktan sonra en az 2 saniye bekleyin. Lens üzerindeki koruyucu filmi çıkardığınızdan emin olun.
ffmpeg No such file hatası
Komutu timelapse klasörünün bulunduğu dizinde çalıştırın ve dosya adlarının kare_0000.jpg şeklinde başladığını kontrol edin.

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.

Sık sorulan sorular

Camera Module 3 ile v2 arasındaki fark nedir?
Camera Module 3 otomatik odaklama ve daha yüksek çözünürlüğe sahiptir. v2 sabit odaklıdır ama bu projedeki tüm kodlar ikisiyle de çalışır.
USB web kamerası ile bu kodlar çalışır mı?
Picamera2 CSI kameralar için tasarlanmıştır. USB kameralarla OpenCV'nin VideoCapture sınıfını veya fswebcam programını kullanabilirsiniz.
İnternette gördüğüm picamera kodları neden çalışmıyor?
Eski picamera kütüphanesi güncel Raspberry Pi OS sürümlerinde desteklenmiyor. Yerini Picamera2 aldı; komutların çoğu benzer olsa da birebir aynı değildir.

Bir sonraki projeye hazır mısınız?

Raspberry Pi serisindeki 5 projeyi tamamladığınızda GPIO, kamera, sensör verisi ve web sunucusu ile çalışmanın temellerini öğrenmiş olursunuz.

Raspberry Pi projelerine dön