.. note:: 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 [|link_sf_facebook|] e unisciti oggi stesso! .. _4.1.4_py_pi5: 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. .. image:: ../python_pi5/img/4.1.4_automatic_capture_list.png :width: 800 :align: center È decisamente conveniente acquistare un kit completo, ecco il link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nome - COMPONENTI NEL KIT - LINK * - Raphael Kit - 337 - |link_Raphael_kit| Puoi anche acquistarli separatamente dai link sottostanti. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUZIONE AI COMPONENTI - LINK PER L'ACQUISTO * - :ref:`cpn_gpio_extension_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_camera_module` - |link_camera_buy| * - :ref:`cpn_pir` - \- Diagramma Schematica ------------------------ ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 ============ ======== ======== === .. image:: ../python_pi5/img/4.1.4_automatic_capture_schematic.png :width: 400 :align: center Procedure Sperimentali -------------------------- Prima di iniziare questo progetto, assicurati di aver completato il progetto :ref:`3.1.1_py_pi5`. **Passo 1:** Costruisci il circuito. .. image:: ../python_pi5/img/4.1.4_automatic_capture_circuit.png :width: 800 :align: center **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 :ref:`remote_desktop`. **Passo 3:** Apri un Terminale e vai nella cartella del codice. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Passo 4:** Esegui. .. raw:: html .. code-block:: 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. .. image:: ../python_pi5/img/4.1.4_PIR_TTE.png :width: 400 :align: center .. note:: 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. .. warning:: Se viene visualizzato l'errore ``RuntimeError: Cannot determine SOC peripheral base address``, fare riferimento a :ref:`faq_soc`. **Code** .. note:: 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. .. raw:: html .. code-block:: python #!/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 ``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. .. code-block:: python #!/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. .. code-block:: python # 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. .. code-block:: python # Inizializza la fotocamera camera = Picamera2() camera.start() #. Inizializza un sensore di movimento PIR collegato al pin GPIO 17. .. code-block:: python # Inizializza il sensore di movimento sul pin GPIO 17 pir = MotionSensor(17) #. 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. .. code-block:: python 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 attesa`` e controlla il movimento ogni 0,5 secondi. .. code-block:: python 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. .. code-block:: python except KeyboardInterrupt: # Interrompi la fotocamera e spegni il LED se si verifica un'interruzione da tastiera camera.stop_preview() pass