Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

4.1.4 Automatische Aufnahmekamera

Einführung

Wenn Sie unterwegs sind, könnten die kleinen Eichhörnchen im Wald Ihren Fenstersims besuchen. Lassen Sie uns eine automatische Aufnahmekamera bauen, um Fotos von diesen kleinen Lieblingen zu machen!

Benötigte Komponenten

Für dieses Projekt benötigen wir folgende Komponenten.

../_images/3.1.18components.png

Es ist sicherlich praktisch, ein ganzes Kit zu kaufen. Hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

GPIO Extension Board

KAUFEN

Steckbrett

KAUFEN

Jumper-Kabel

KAUFEN

Widerstand

KAUFEN

Kameramodul

KAUFEN

PIR Bewegungssensormodul

-

Schaltplan

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

../_images/1.1.18_schematic.png

Experimentelle Verfahren

Bevor Sie mit diesem Projekt beginnen, stellen Sie sicher, dass Sie 3.1.1 Fotografie-Modul abgeschlossen haben.

Schritt 1: Bauen Sie den Schaltkreis.

../_images/3.1.18fritzing.png

Schritt 2: Um das Kameramodul anzuschließen und die Konfiguration abzuschließen, siehe: Kameramodul.

Schritt 3: Wechseln Sie auf den Raspberry Pi Desktop. Für ein besseres Erlebnis benötigen Sie möglicherweise einen Bildschirm, siehe: Verbinden Sie Ihren Raspberry Pi. Oder greifen Sie aus der Ferne auf den Raspberry Pi Desktop zu. Eine detaillierte Anleitung finden Sie unter Remote Desktop.

Schritt 4: Öffnen Sie ein Terminal und wechseln Sie in das Verzeichnis des Codes.

cd ~/raphael-kit/python/

Schritt 5: Ausführen.

sudo python3 4.1.4_AutomaticCaptureCamera.py

Nachdem der Code ausgeführt wurde, wird PIR die Umgebung erkennen. Wenn es ein kleines Eichhörnchen bemerkt, wird die Kamera ein Foto machen. Das Foto-Intervall beträgt 3 Sekunden, und die Gesamtzahl der aufgenommenen Fotos wird im Druckfenster angezeigt.

Am PIR-Modul befinden sich zwei Potentiometer: eines zur Einstellung der Empfindlichkeit und eines zur Einstellung der Erkennungsentfernung. Um das PIR-Modul besser funktionieren zu lassen, drehen Sie beide gegen den Uhrzeigersinn bis zum Anschlag.

../_images/PIR_TTE.png

Bemerkung

Sie können auch 4.1.4_AutomaticCaptureCamera.py im Pfad ~/raphael-kit/python/ mit einer Python-IDE öffnen, auf die Schaltfläche Ausführen klicken, um den Code auszuführen und den Code mit der Stopp-Schaltfläche anhalten.

Code

Bemerkung

Sie können den untenstehenden Code Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen. Bevor Sie das tun, müssen Sie jedoch zum Quellcodepfad wie raphael-kit/python wechseln. Nachdem Sie den Code geändert haben, können Sie ihn direkt ausführen, um den Effekt zu sehen.

#!/usr/bin/env python3
import time
import os
import RPi.GPIO as GPIO
from picamera2 import Picamera2

# ----------------------------
# USER DIRECTORY
# ----------------------------
user = os.getlogin()
user_home = os.path.expanduser(f'~{user}')

# ----------------------------
# GPIO SETUP
# ----------------------------
PIR_PIN = 17  # PIR motion sensor connected to GPIO17

GPIO.setmode(GPIO.BCM)
GPIO.setup(PIR_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

# ----------------------------
# CAMERA SETUP
# ----------------------------
camera = Picamera2()
camera.start()

print("Motion detection started. Press Ctrl+C to exit.")

# ----------------------------
# MAIN LOOP
# ----------------------------
try:
    i = 1
    while True:
        if GPIO.input(PIR_PIN) == GPIO.HIGH:
            filename = f"{user_home}/capture{i}.jpg"
            camera.capture_file(filename)
            print(f"Motion detected. Saved image #{i}: {filename}")
            time.sleep(3)
            i += 1
        else:
            print("waiting")
            time.sleep(0.5)

# ----------------------------
# KEYBOARD INTERRUPT
# ----------------------------
except KeyboardInterrupt:
    print("\nKeyboard interrupt received. Exiting program...")

# ----------------------------
# CLEANUP
# ----------------------------
finally:
    try:
        camera.close()
    except:
        pass

    GPIO.cleanup()
    print("Program exited cleanly.")

Code-Erklärung

  1. Liest das Home-Verzeichnis des aktuellen Benutzers aus, um dort aufgenommene Bilder zu speichern.

    user = os.getlogin()
    user_home = os.path.expanduser(f'~{user}')
    

    Dadurch wird der aktive Benutzername ermittelt und ein vollständiger Pfad zum Home-Verzeichnis erstellt.

  2. Richtet GPIO ein und konfiguriert den PIR-Bewegungssensor an GPIO17 als Eingang.

    PIR_PIN = 17
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(PIR_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
    

    Durch den Pull-down-Widerstand wird sichergestellt, dass der Pin LOW liest, wenn keine Bewegung erkannt wird.

  3. Initialisiert die Picamera2-Instanz und startet die Kamera.

    camera = Picamera2()
    camera.start()
    

    Die Kamera wird aktiviert, sodass sie sofort Bilder aufnehmen kann, sobald Bewegung erkannt wird.

  4. Erkennt Bewegung, indem der Eingabestatus des PIR-Sensors abgefragt wird.

    if GPIO.input(PIR_PIN) == GPIO.HIGH:
    

    Wenn der PIR-Sensor Bewegung erkennt, gibt er ein HIGH-Signal aus und löst damit den Aufnahmevorgang aus.

  5. Nimmt ein Bild auf und speichert es mit einer fortlaufenden Dateinummer.

    filename = f"{user_home}/capture{i}.jpg"
    camera.capture_file(filename)
    

    Jede erkannte Bewegung speichert ein neues Bild als capture1.jpg, capture2.jpg usw.

  6. Wartet drei Sekunden nach einer bewegungsbasierten Aufnahme.

    time.sleep(3)
    

    Dies verhindert, dass zu viele Bilder zu schnell hintereinander aufgenommen werden.

  7. Gibt „waiting“ aus, wenn keine Bewegung erkannt wird, und prüft nach einer kurzen Verzögerung erneut.

    else:
        print("waiting")
        time.sleep(0.5)
    

    Dadurch wird eine kontinuierliche Überwachung gewährleistet und gleichzeitig unnötige CPU-Auslastung reduziert.

  8. Behandelt KeyboardInterrupt (Ctrl+C), um das Programm sicher zu beenden.

    except KeyboardInterrupt:
        print("\nKeyboard interrupt received. Exiting program...")
    

    Eine saubere Exit-Meldung wird ausgegeben, wenn der Benutzer das Programm manuell stoppt.

  9. Gibt Kamera- und GPIO-Ressourcen vor dem Beenden frei.

    finally:
        camera.close()
        GPIO.cleanup()
    

    Dies stellt sicher, dass die Kamera ordnungsgemäß herunterfährt und alle GPIO-Pins in einen sicheren Zustand zurückkehren.

Phänomen-Bild

../_images/4.1.4spycamera.JPG