.. note::
Ciao, benvenuto nella community di SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
**Perché unirti a noi?**
- **Supporto Esperto**: Risolvi problemi post-vendita e 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 ai nuovi annunci di prodotti e anteprime.
- **Sconti Speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
- **Promozioni Festive e Giveaway**: Partecipa a concorsi e promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti subito!
.. _2.2.7_c:
2.2.7 PIR
===============
Introduzione
---------------
In questo progetto, realizzeremo un dispositivo utilizzando i sensori
a infrarossi piroelettrici per il corpo umano. Quando qualcuno si avvicina
al LED, quest'ultimo si accenderà automaticamente. Se non c'è nessuno nelle
vicinanze, la luce si spegnerà. Questo sensore di movimento a infrarossi è
un tipo di sensore in grado di rilevare gli infrarossi emessi da esseri umani
e animali.
Componenti Necessari
------------------------------
In questo progetto, abbiamo bisogno dei seguenti componenti.
.. image:: ../img/list_2.2.4_pir2.png
È sicuramente conveniente acquistare un kit completo, ecco il link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nome
- COMPONENTI IN QUESTO KIT
- LINK
* - Raphael Kit
- 337
- |link_Raphael_kit|
Puoi anche acquistarli separatamente dai link seguenti.
.. 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:: ../img/image327.png
Procedure Sperimentali
--------------------------
**Passo 1:** Costruisci il circuito.
.. image:: ../img/image214.png
**Passo 2:** Vai alla cartella del codice.
.. raw:: html
.. code-block::
cd ~/raphael-kit/c/2.2.7/
**Passo 3:** Compila il codice.
.. raw:: html
.. code-block::
gcc 2.2.7_PIR.c -lwiringPi
**Passo 4:** Esegui il file eseguibile.
.. raw:: html
.. code-block::
sudo ./a.out
Dopo l'esecuzione del codice, il PIR rileva l'ambiente circostante e fa accendere l'RGB LED di colore giallo se rileva una persona in movimento.
Sul modulo PIR ci sono 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 in senso antiorario fino in fondo.
.. image:: ../img/PIR_TTE.png
:width: 400
:align: center
.. note::
Se non funziona dopo l'esecuzione o appare un errore come: ``wiringPi.h No such file or directory``, fai riferimento a :ref:`install_wiringpi`.
**Codice**
.. code-block:: c
#include
#include
#include
#define uchar unsigned char
#define pirPin 0 // il pir collegato a GPIO0
#define redPin 1
#define greenPin 2
#define bluePin 3
void ledInit(void){
softPwmCreate(redPin, 0, 100);
softPwmCreate(greenPin,0, 100);
softPwmCreate(bluePin, 0, 100);
}
void ledColorSet(uchar r_val, uchar g_val, uchar b_val){
softPwmWrite(redPin, r_val);
softPwmWrite(greenPin, g_val);
softPwmWrite(bluePin, b_val);
}
int main(void)
{
int pir_val;
if(wiringPiSetup() == -1){ //quando l'inizializzazione wiring fallisce, stampa messaggio a schermo
printf("setup wiringPi failed !");
return 1;
}
ledInit();
pinMode(pirPin, INPUT);
while(1){
pir_val = digitalRead(pirPin);
if(pir_val== 1){ // se il pir legge livello ALTO
ledColorSet(0xff,0xff,0x00);
}
else {
ledColorSet(0x00,0x00,0xff);
}
}
return 0;
}
**Spiegazione del Codice**
.. code-block:: c
void ledInit(void);
void ledColorSet(uchar r_val, uchar g_val, uchar b_val);
Questi codici vengono utilizzati per impostare il colore dell'RGB LED,
per maggiori dettagli fai riferimento a :ref:`1.1.2_c`.
.. code-block:: c
int main(void)
{
int pir_val;
//……
pinMode(pirPin, INPUT);
while(1){
pir_val = digitalRead(pirPin);
if(pir_val== 1){ //se il pir legge livello ALTO
ledColorSet(0xff,0xff,0x00);
}
else {
ledColorSet(0x00,0x00,0xff);
}
}
return 0;
}
Quando il PIR rileva lo spettro infrarosso umano, l'RGB LED emette luce gialla; in caso contrario, emette luce blu.
Immagine del Fenomeno
----------------------------
.. image:: ../img/image215.jpeg