.. 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