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.
Es ist sicherlich praktisch, ein ganzes Kit zu kaufen. Hier ist der Link:
Name |
ARTIKEL IN DIESEM KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Sie können sie auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
|---|---|
- |
Schaltplan
T-Board Name |
physical |
wiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
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.
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.
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
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.
Richtet GPIO ein und konfiguriert den PIR-Bewegungssensor an
GPIO17als 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
LOWliest, wenn keine Bewegung erkannt wird.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.
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.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.jpgusw.Wartet drei Sekunden nach einer bewegungsbasierten Aufnahme.
time.sleep(3)
Dies verhindert, dass zu viele Bilder zu schnell hintereinander aufgenommen werden.
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.
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.
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.