.. note::
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Unisciti a noi per esplorare a fondo Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.
**Perché unirsi a noi?**
- **Supporto esperto**: Risolvi problematiche post-vendita e sfide tecniche con l'aiuto della nostra community e del nostro team.
- **Impara e condividi**: Scambia suggerimenti e tutorial per migliorare le tue competenze.
- **Anteprime esclusive**: Accedi in anticipo agli annunci di nuovi prodotti e contenuti in anteprima.
- **Sconti speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
- **Promozioni festive e omaggi**: Partecipa a omaggi e promozioni per le festività.
👉 Pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso!
2.2.4 PIR
==========
Introduzione
---------------
In questo progetto, realizzeremo un dispositivo utilizzando sensori
piroelettrici a infrarossi per rilevare la presenza di persone.
Quando qualcuno si avvicina, il LED si accenderà automaticamente. In
caso contrario, la luce si spegnerà. Questo sensore di movimento a
infrarossi può rilevare la radiazione infrarossa emessa da persone e animali.
Componenti
-----------
.. image:: ../img/list_2.2.4_pir2.png
Schema Elettrico
----------------
.. image:: ../img/image327.png
Procedura Sperimentale
-----------------------
**Passo 1:** Monta il circuito.
.. image:: ../img/image214.png
**Passo 2:** Vai alla cartella del codice.
.. raw:: html
.. code-block::
cd ~/davinci-kit-for-raspberry-pi/nodejs/
**Passo 3:** Esegui il codice.
.. raw:: html
.. code-block::
sudo node pir.js
Dopo aver eseguito il codice, il PIR rileva l'ambiente circostante e attiva
il LED RGB in giallo se rileva il passaggio di qualcuno. Sul modulo PIR ci
sono due potenziometri: uno per regolare la sensibilità e l'altro per impostare
la distanza di rilevamento. Per ottenere le migliori prestazioni del modulo PIR,
è necessario regolare questi due potenziometri.
**Codice**
.. code-block:: js
const Gpio = require('pigpio').Gpio;
const pirPin = new Gpio(17, {
mode: Gpio.INPUT,
pullUpDown: Gpio.PUD_DOWN,
edge: Gpio.EITHER_EDGE
}) // the pir connect to pin17
const redPin = new Gpio(18, { mode: Gpio.OUTPUT, })
const greenPin = new Gpio(27, { mode: Gpio.OUTPUT, })
const bluePin = new Gpio(22, { mode: Gpio.OUTPUT, })
//'Red':18, 'Green':27, 'Blue':22
var p_R, p_G, p_B
// Set all led as pwm channel and frequece to 2KHz
p_R = redPin.pwmFrequency(2000)
p_G = greenPin.pwmFrequency(2000)
p_B = bluePin.pwmFrequency(2000)
// Set all begin with value 0
p_R.pwmWrite(0)
p_G.pwmWrite(0)
p_B.pwmWrite(0)
// Define a MAP function for mapping values. Like from 0~255 to 0~100
function MAP(x, in_min, in_max, out_min, out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
}
// Define a function to set up colors
function setColor(color) {
// configures the three LEDs' luminance with the inputted color value .
// Devide colors from 'color' veriable
R_val = (color & 0xFF0000) >> 16
G_val = (color & 0x00FF00) >> 8
B_val = (color & 0x0000FF) >> 0
// Map color value from 0~255 to 0~100
R_val = MAP(R_val, 0, 255, 0, 100)
G_val = MAP(G_val, 0, 255, 0, 100)
B_val = MAP(B_val, 0, 255, 0, 100)
//Assign the mapped duty cycle value to the corresponding PWM channel to change the luminance.
p_R.pwmWrite(R_val)
p_G.pwmWrite(G_val)
p_B.pwmWrite(B_val)
//print ("color_msg: R_val = %s, G_val = %s, B_val = %s"%(R_val, G_val, B_val))
}
pirPin.on('interrupt', (level) => {
if (level) {
setColor(0xFFFF00)
}else{
setColor(0x0000FF)
}
});
process.on('SIGINT', function () {
p_R.pwmWrite(0)
p_G.pwmWrite(0)
p_B.pwmWrite(0)
process.exit();
})
**Spiegazione del Codice**
Il codice di questo esempio è una combinazione di :ref:`2.1.1_button_nodejs` e :ref:`1.1.2_rgb_nodejs`, pertanto non è necessario approfondire i dettagli.
Immagine del Fenomeno
------------------------
.. image:: ../img/image215.jpeg