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.2 Fotocamera a Scatto Automatico

Introduzione

Quando sei fuori, i piccoli scoiattoli del bosco potrebbero farti visita sul davanzale. Creiamo una fotocamera a scatto automatico per immortalare questi adorabili visitatori!

Componenti Necessari

In questo progetto, abbiamo bisogno dei seguenti componenti.

../_images/4.1.4_automatic_capture_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

Modulo Fotocamera

ACQUISTA

Modulo Sensore di Movimento PIR

-

Diagramma Schematica

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

../_images/4.1.4_automatic_capture_schematic.png

Procedure Sperimentali

Prima di iniziare questo progetto, assicurati di aver completato il progetto 3.1.1 Modulo Fotografia.

Passo 1: Costruisci il circuito.

../_images/4.1.4_automatic_capture_circuit.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.4_AutomaticCaptureCamera_zero.py

Dopo l’esecuzione del codice, il modulo PIR rileverà l’ambiente circostante e, se percepisce il passaggio del piccolo scoiattolo, la fotocamera scatterà una foto. L’intervallo tra una foto e l’altra è di 3 secondi e il numero totale di foto scattate verrà visualizzato nella finestra di stampa.

Il modulo PIR ha due potenziometri: uno per regolare la sensibilità e l’altro per regolare la distanza di rilevamento. Per far funzionare meglio il modulo PIR, è necessario ruotare entrambi i potenziometri in senso antiorario fino alla fine.

../_images/4.1.4_PIR_TTE.png

Nota

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

Avvertimento

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

Code

Nota

Puoi Modificare/Reimpostare/Copiare/Eseguire/Interrompere il codice sottostante. Ma prima di ciò, devi andare nel percorso del codice sorgente come raphael-kit/python-pi5. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.

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

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

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

# Inizializza il sensore di movimento sul pin GPIO 17
pir = MotionSensor(17)

try:
    i = 1  # Inizializza il contatore delle immagini
    while True:
        if pir.motion_detected:
            # Scatta una foto quando viene rilevato un movimento e salvala con un numero unico
            camera.capture_file(f'{user_home}/capture%s.jpg' % i)
            print('The number is %s' % i)  # Stampa il numero dell'immagine
            time.sleep(3)  # Attendi 3 secondi prima del rilevamento successivo
            i += 1  # Incrementa il contatore delle immagini
        else:
            print('waiting')  # Stampa 'in attesa' quando non viene rilevato alcun movimento
            time.sleep(0.5)  # Controlla il movimento ogni 0,5 secondi

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

Spiegazione del Codice

  1. Importa le classi Picamera2 e Preview per il controllo della fotocamera, la classe MotionSensor per il rilevamento del movimento e le librerie standard time e os per la gestione del tempo e delle interazioni con il sistema operativo.

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

    # Recupera il nome dell'utente attualmente connesso e la 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. Inizializza un sensore di movimento PIR collegato al pin GPIO 17.

    # Inizializza il sensore di movimento sul pin GPIO 17
    pir = MotionSensor(17)
    
  5. Inizializza un contatore i per tenere traccia del numero di immagini catturate. In un ciclo infinito, verifica se viene rilevato un movimento. Se viene rilevato un movimento, scatta una foto, salvala con un nome univoco basato sul contatore i, stampa il numero dell’immagine e attende 3 secondi prima di controllare nuovamente il movimento. Il contatore i viene incrementato dopo ogni scatto.

    try:
        i = 1  # Inizializza il contatore delle immagini
        while True:
            if pir.motion_detected:
                # Scatta una foto quando viene rilevato un movimento e salvala con un numero unico
                camera.capture_file(f'{user_home}/capture%s.jpg' % i)
                print('The number is %s' % i)  # Stampa il numero dell'immagine
                time.sleep(3)  # Attendi 3 secondi prima del rilevamento successivo
                i += 1  # Incrementa il contatore delle immagini
    
  6. Se non viene rilevato alcun movimento, stampa in attesa e controlla il movimento ogni 0,5 secondi.

    try:
        ...
    
        while True:
            ...
    
            else:
                print('waiting')  # Stampa 'in attesa' quando non viene rilevato alcun movimento
                time.sleep(0.5)  # Controlla il movimento ogni 0,5 secondi
    
  7. Cattura un’interruzione da tastiera (come Ctrl+C) per interrompere l’anteprima della fotocamera ed uscire correttamente dallo script.

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