Nota

Ciao, benvenuto nella Community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.

Perché Unirsi?

  • Supporto Tecnico Esperto: Risolvi i problemi post-vendita e affronta le sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e Condividi: Scambia suggerimenti e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime.

  • Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Giveaway: Partecipa a giveaway e promozioni festive.

👉 Sei pronto a esplorare e creare con noi? Clicca [Qui] e unisciti oggi stesso!

4.1.1 Fotocamera

Introduzione

Qui realizzeremo una fotocamera con un otturatore; quando premi il pulsante, la fotocamera scatterà una foto mentre il LED lampeggia.

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

../_images/4.1.1_camera_list.png

È decisamente conveniente acquistare un kit completo, ecco il link:

Nome

COMPONENTI NEL KIT

LINK

Raphael Kit

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

LED

ACQUISTA

Pulsante

ACQUISTA

Modulo Fotocamera

ACQUISTA

Diagramma Schematica

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO18

Pin 12

1

18

../_images/4.1.1_camera_schematic1.png

Procedure Sperimentali

Passo 1: Costruisci il circuito.

../_images/4.1.1_camera_circuit1.png

Passo 2: Accedi al desktop di Raspberry Pi. Potresti aver bisogno di uno schermo per un’esperienza migliore, fai riferimento a: Collega il tuo Raspberry Pi. Oppure accedi al desktop di Raspberry Pi da remoto, per un tutorial dettagliato consulta Desktop Remoto.

Passo 3: Apri un Terminale e vai nella cartella del codice.

cd ~/raphael-kit/python-pi5

Passo 4: Esegui.

sudo python3 4.1.1_Camera_zero.py

Dopo l’esecuzione del codice, premi il pulsante: il Raspberry Pi farà lampeggiare il LED e scatterà una foto. La foto verrà chiamata my_photo.jpg e salvata nella directory ~.

Nota

Puoi anche aprire 4.1.1_Camera_zero.py nel percorso ~/raphael-kit/python/ con un IDE Python, cliccare sul pulsante Esegui per avviare e utilizzare il pulsante Stop per interrompere il codice.

Se desideri scaricare la foto sul tuo PC, fai riferimento a Software FileZilla.

Avvertimento

Se viene visualizzato l’errore RuntimeError: Cannot determine SOC peripheral base address, fare riferimento a If gpiozero doesn’t work..

Code

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

# Ottieni il nome dell'utente attualmente connesso e la sua directory home
user = os.getlogin()
user_home = os.path.expanduser(f'~{user}')

# Inizializza la fotocamera
camera = Picamera2()
camera.start()

# Inizializza una variabile per tracciare lo stato della fotocamera
global status
status = False

# Imposta il LED e il pulsante con i rispettivi numeri di pin GPIO
led = LED(17)
button = Button(18)

def takePhotos(pin):
    """Function to set the camera's status to True when the button is pressed."""
    global status
    status = True

try:
    # Assegna la funzione da chiamare quando si preme il pulsante
    button.when_pressed = takePhotos

    # Ciclo principale
    while True:
        # Controlla se il pulsante è stato premuto
        if status:
            # Fai lampeggiare il LED cinque volte
            for i in range(5):
                led.on()
                time.sleep(0.1)
                led.off()
                time.sleep(0.1)
            # Cattura e salva una foto
            camera.capture_file(f'{user_home}/my_photo.jpg')
            print('Take a photo!')
            # Reimposta lo stato
            status = False
        else:
            # Spegni il LED se non stai scattando foto
            led.off()

        # Aspetta un breve periodo prima di controllare nuovamente lo stato del pulsante
        time.sleep(1)

except KeyboardInterrupt:
    # Interrompi l'anteprima della fotocamera e spegni il LED se si verifica un'interruzione da tastiera
    camera.stop_preview()
    led.off()
    pass

Spiegazione del Codice

  1. Importa le librerie necessarie per la gestione del tempo, il controllo della fotocamera e dei componenti GPIO.

    #!/usr/bin/env python3
    from picamera2 import Picamera2, Preview
    from gpiozero import LED, Button
    import time
    import os
    
  2. Recupera il nome dell’utente attualmente connesso e la sua directory home per salvare le foto.

    # Ottieni il nome dell'utente attualmente connesso e la sua directory home
    user = os.getlogin()
    user_home = os.path.expanduser(f'~{user}')
    
  3. Inizializza la fotocamera e la avvia.

    # Inizializza la fotocamera
    camera = Picamera2()
    camera.start()
    
  4. Dichiara status come variabile globale e la imposta inizialmente su False.

    # Inizializza una variabile per tracciare lo stato della fotocamera
    global status
    status = False
    
  5. Inizializza un LED collegato al pin GPIO 17 e un pulsante collegato al pin GPIO 18.

    # Imposta il LED e il pulsante con i rispettivi numeri di pin GPIO
    led = LED(17)
    button = Button(18)
    
  6. Definisce una funzione takePhotos che imposta la variabile globale status su True quando si preme il pulsante.

    def takePhotos(pin):
        """Function to set the camera's status to True when the button is pressed."""
        global status
        status = True
    
  7. Assegna la funzione takePhotos per essere chiamata quando si preme il pulsante.

    try:
        # Assegna la funzione da chiamare quando si preme il pulsante
        button.when_pressed = takePhotos
    
        ...
    
  8. Controlla continuamente se status è True. In tal caso, fa lampeggiare il LED cinque volte, cattura una foto e reimposta status. In caso contrario, il LED rimane spento. C’è un ritardo di 1 secondo tra ogni iterazione del ciclo.

    try:
        ...
    
        # Ciclo principale
        while True:
            # Controlla se il pulsante è stato premuto
            if status:
                # Fai lampeggiare il LED cinque volte
                for i in range(5):
                    led.on()
                    time.sleep(0.1)
                    led.off()
                    time.sleep(0.1)
                # Cattura e salva una foto
                camera.capture_file(f'{user_home}/my_photo.jpg')
                print('Take a photo!')
                # Reimposta lo stato
                status = False
            else:
                # Spegni il LED se non stai scattando foto
                led.off()
    
            # Aspetta un breve periodo prima di controllare nuovamente lo stato del pulsante
            time.sleep(1)
    
  9. Cattura un’interruzione da tastiera (come Ctrl+C) e interrompe l’anteprima della fotocamera, spegnendo il LED prima di uscire.

    except KeyboardInterrupt:
        # Interrompi l'anteprima della fotocamera e spegni il LED se si verifica un'interruzione da tastiera
        camera.stop_preview()
        led.off()
        pass