.. 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! .. _2.2.7_py_pi5: 2.2.7 PIR ============ Introduzione ---------------- In questo progetto, realizzeremo un dispositivo utilizzando i sensori piroelettrici a infrarossi per il corpo umano. Quando qualcuno si avvicina al LED, il LED si accenderà automaticamente. Altrimenti, la luce si spegnerà. Questo sensore di movimento a infrarossi è un tipo di sensore che può rilevare l'infrarosso emesso da esseri umani e animali. Componenti Necessari ----------------------- In questo progetto, abbiamo bisogno dei seguenti componenti. .. image:: ../python_pi5/img/2.2.7_pir_list.png È 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_rgb_led` - |link_rgb_led_buy| * - :ref:`cpn_pir` - \- Schema Elettrico ---------------------- .. image:: ../python_pi5/img/2.2.7_pir_schematic.png Procedure Sperimentali ---------------------------- **Passo 1:** Costruisci il circuito. .. image:: ../python_pi5/img/2.2.7_pir_circuit.png **Passo 2:** Vai alla cartella del codice. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Passo 3:** Esegui il file eseguibile. .. raw:: html .. code-block:: sudo python3 2.2.7_PIR_zero.py Dopo aver eseguito il codice, il PIR rileva l'ambiente circostante e fa brillare l'RGB LED di giallo se rileva qualcuno che passa nelle vicinanze. Sul modulo PIR ci sono due potenziometri: uno regola la sensibilità e l'altro la distanza di rilevamento. Per far funzionare al meglio il modulo PIR, è necessario ruotarli entrambi completamente in senso antiorario. .. image:: ../python_pi5/img/2.2.7_PIR_TTE.png :width: 400 :align: center .. warning:: Se viene visualizzato l'errore ``RuntimeError: Cannot determine SOC peripheral base address``, fare riferimento a :ref:`faq_soc`. **Code** .. note:: Puoi **Modificare/Resettare/Copiare/Eseguire/Fermare** il codice qui sotto. Ma prima, devi andare al percorso sorgente del codice 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 gpiozero import RGBLED, MotionSensor from time import sleep # Inizializza RGB LED e sensore di movimento PIR utilizzando la libreria GPIO Zero led = RGBLED(red=18, green=27, blue=22) # RGB LED collegato ai pin GPIO 18 (Rosso), 27 (Verde), 22 (Blu) pir = MotionSensor(17) # Sensore PIR collegato al pin GPIO 17 try: # Monitora continuamente i movimenti e aggiorna il colore dell'LED while True: if pir.motion_detected: # Verifica se il PIR rileva movimenti led.color = (1, 1, 0) # Imposta il colore dell'LED su giallo (Rosso + Verde) else: led.color = (0, 0, 1) # Imposta il colore dell'LED su blu (solo Blu) sleep(0.1) # Breve ritardo per ridurre il carico della CPU except KeyboardInterrupt: # Gestisce KeyboardInterrupt (Ctrl+C) per uscire dal ciclo in modo ordinato pass **Spiegazione del Codice** #. Vengono importate le classi ``RGBLED`` per il controllo di un LED RGB e ``MotionSensor`` per la rilevazione dei movimenti dalla libreria GPIO Zero. Viene importata anche la funzione ``sleep`` per creare dei ritardi. .. code-block:: python #!/usr/bin/env python3 from gpiozero import RGBLED, MotionSensor from time import sleep #. Inizializza un LED RGB con componenti rosso, verde e blu collegati rispettivamente ai pin GPIO 18, 27 e 22. Inizializza anche un sensore PIR sul pin GPIO 17. .. code-block:: python # Inizializza RGB LED e sensore di movimento PIR utilizzando la libreria GPIO Zero led = RGBLED(red=18, green=27, blue=22) # RGB LED collegato ai pin GPIO 18 (Rosso), 27 (Verde), 22 (Blu) pir = MotionSensor(17) # Sensore PIR collegato al pin GPIO 17 #. Il programma entra in un ciclo infinito, controllando continuamente se ci sono movimenti tramite il sensore PIR. Se viene rilevato un movimento, l'LED si accende di giallo (mix di rosso e verde). Se non viene rilevato alcun movimento, l'LED diventa blu. Un breve ritardo di 0,1 secondi riduce il carico sulla CPU. .. code-block:: python try: # Monitora continuamente i movimenti e aggiorna il colore dell'LED while True: if pir.motion_detected: # Verifica se il PIR rileva movimenti led.color = (1, 1, 0) # Imposta il colore dell'LED su giallo (Rosso + Verde) else: led.color = (0, 0, 1) # Imposta il colore dell'LED su blu (solo Blu) sleep(0.1) # Breve ritardo per ridurre il carico della CPU except KeyboardInterrupt: # Gestisce KeyboardInterrupt (Ctrl+C) per uscire dal ciclo in modo ordinato pass