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

Einführung

Hier werden wir eine Kamera mit einem Auslöser bauen, bei deren Betätigung die Kamera ein Foto macht, während die LED blinkt.

Benötigte Komponenten

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

../_images/4.1.1_camera_list.png

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können diese auch separat über die untenstehenden Links kaufen.

KOMPONENTENVORSTELLUNG

KAUF-LINK

GPIO-Erweiterungsplatine

BUY

Steckbrett

BUY

Jumper-Kabel

BUY

Widerstand

BUY

LED

BUY

Taste

BUY

Kameramodul

BUY

Schaltplan

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO18

Pin 12

1

18

../_images/4.1.1_camera_schematic.png

Experimentelle Verfahren

Schritt 1: Bauen Sie den Schaltkreis.

../_images/4.1.1_camera_circuit.png

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

Schritt 3: Gehen Sie zum Raspberry Pi Desktop. Für ein besseres Erlebnis benötigen Sie möglicherweise einen Bildschirm, siehe: Verbinden Sie Ihren Raspberry Pi. Oder greifen Sie remote auf den Raspberry Pi Desktop zu, für eine detaillierte Anleitung siehe Remote-Desktop.

Schritt 4: Öffnen Sie ein Terminal und wechseln Sie in den Ordner des Codes.

cd ~/raphael-kit/python-pi5

Schritt 5: Ausführen.

sudo python3 4.1.1_Camera_zero.py

Nachdem der Code ausgeführt wurde, drücken Sie den Knopf, der Raspberry Pi wird die LED blinken lassen und ein Foto machen. Das Foto wird my_photo.jpg genannt und im Verzeichnis ~ gespeichert.

Bemerkung

Sie können auch 4.1.1_Camera_zero.py im Pfad ~/raphael-kit/python/ mit einer Python-IDE öffnen, den Ausführen-Button klicken, um es zu starten, und den Code mit dem Stop-Button beenden.

Wenn Sie das Foto auf Ihren PC herunterladen möchten, siehe Filezilla Software.

Code

Bemerkung

Sie können den untenstehenden Code modifizieren/zurücksetzen/kopieren/ausführen/stoppen. Bevor Sie dies tun, müssen Sie zum Quellcodepfad wie raphael-kit/python gehen. Nach der Änderung des Codes können Sie ihn direkt ausführen, um die Auswirkung zu sehen.

#!/usr/bin/env python3
von picamera2 import Picamera2, Preview
von gpiozero import LED, Button
import time
import os

# Den Login-Namen und das Home-Verzeichnis des aktuellen Benutzers abrufen
user = os.getlogin()
user_home = os.path.expanduser(f'~{user}')

# Die Kamera initialisieren
camera = Picamera2()
camera.start()

# Eine Variable initialisieren, um den Status der Kamera zu verfolgen
global status
status = False

# LED und Knopf mit ihren GPIO-Pinnummern einrichten
led = LED(17)
button = Button(18)

def takePhotos(pin):
    """Funktion, um den Kamerastatus auf True zu setzen, wenn der Knopf gedrückt wird."""
    global status
    status = True

try:
    # Die Funktion zuweisen, die aufgerufen werden soll, wenn der Knopf gedrückt wird
    button.when_pressed = takePhotos

    # Hauptschleife
    while True:
        # Überprüfen, ob der Knopf gedrückt wurde
        if status:
            # Die LED fünfmal blinken lassen
            for i in range(5):
                led.on()
                time.sleep(0.1)
                led.off()
                time.sleep(0.1)
            # Ein Foto aufnehmen und speichern
            camera.capture_file(f'{user_home}/my_photo.jpg')
            print('Foto aufgenommen!')
            # Den Status zurücksetzen
            status = False
        else:
            # Die LED ausschalten, wenn nicht aufgenommen wird
            led.off()

        # Kurz warten, bevor der Knopfstatus erneut überprüft wird
        time.sleep(1)

except KeyboardInterrupt:
    # Die Kamera stoppen und die LED ausschalten, wenn ein KeyboardInterrupt auftritt
    camera.stop_preview()
    led.off()
    pass

Code-Erklärung

  1. Importiert die notwendigen Bibliotheken für Zeitsteuerung, Kamerasteuerung und GPIO-Komponentensteuerung.

    #!/usr/bin/env python3
    von picamera2 import Picamera2, Preview
    von gpiozero import LED, Button
    import time
    import os
    
  2. Ruft den Login-Namen und das Home-Verzeichnis des aktuellen Benutzers ab, um Fotos zu speichern.

    # Get the current user's login name and home directory
    user = os.getlogin()
    user_home = os.path.expanduser(f'~{user}')
    
  3. Initialisiert die Kamera und startet sie.

    # Initialize the camera
    camera = Picamera2()
    camera.start()
    
  4. Deklariert status als globale Variable und initialisiert sie mit False.

    # Initialize a variable to track the camera's status
    global status
    status = False
    
  5. Initialisiert eine LED, die mit dem GPIO-Pin 17 verbunden ist, und einen Knopf, der mit dem GPIO-Pin 18 verbunden ist.

    # Set up LED and button with their GPIO pin numbers
    led = LED(17)
    button = Button(18)
    
  6. Definiert eine Funktion takePhotos, die die globale Variable status auf True setzt, wenn der Knopf gedrückt wird.

    def takePhotos(pin):
        """Function to set the camera's status to True when the button is pressed."""
        global status
        status = True
    
  7. Weist die Funktion takePhotos zu, die aufgerufen werden soll, wenn der Knopf gedrückt wird.

    try:
        # Assign the function to be called when the button is pressed
        button.when_pressed = takePhotos
    
        ...
    
  8. Überprüft kontinuierlich, ob der status True ist. Wenn ja, lässt es die LED fünfmal blinken, macht ein Foto und setzt status zurück. Wenn nicht, bleibt die LED aus. Es gibt eine 1-Sekunden-Verzögerung zwischen den Iterationen der Schleife.

    try:
        ...
    
        # Main loop
        while True:
            # Check if the button has been pressed
            if status:
                # Blink the LED five times
                for i in range(5):
                    led.on()
                    time.sleep(0.1)
                    led.off()
                    time.sleep(0.1)
                # Capture and save a photo
                camera.capture_file(f'{user_home}/my_photo.jpg')
                print('Take a photo!')
                # Reset the status
                status = False
            else:
                # Turn off the LED if not capturing
                led.off()
    
            # Wait for a short period before checking the button status again
            time.sleep(1)
    
  9. Fängt ein KeyboardInterrupt (wie Ctrl+C) ab und stoppt die Kameravorschau und schaltet die LED aus, bevor das Programm beendet wird.

    except KeyboardInterrupt:
        # Stop the camera and turn off the LED if a KeyboardInterrupt occurs
        camera.stop_preview()
        led.off()
        pass