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.
È decisamente conveniente acquistare un kit completo, ecco il link:
Nome |
COMPONENTI NEL KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
- |
Diagramma Schematica
T-Board Name |
physical |
wiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
Procedure Sperimentali
Prima di iniziare questo progetto, assicurati di aver completato il progetto 3.1.1 Modulo Fotografia.
Passo 1: Costruisci il circuito.
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.
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
Importa le classi
Picamera2ePreviewper il controllo della fotocamera, la classeMotionSensorper il rilevamento del movimento e le librerie standardtimeeosper 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
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}')
Inizializza la fotocamera e la avvia.
# Inizializza la fotocamera camera = Picamera2() camera.start()
Inizializza un sensore di movimento PIR collegato al pin GPIO 17.
# Inizializza il sensore di movimento sul pin GPIO 17 pir = MotionSensor(17)
Inizializza un contatore
iper 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 contatorei, stampa il numero dell’immagine e attende 3 secondi prima di controllare nuovamente il movimento. Il contatoreiviene 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
Se non viene rilevato alcun movimento, stampa
in attesae 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
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