Nota

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 [Qui] 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

../_images/list_2.2.4_pir2.png

Schema Elettrico

../_images/image327.png

Procedura Sperimentale

Passo 1: Monta il circuito.

../_images/image214.png

Passo 2: Vai alla cartella del codice.

cd ~/davinci-kit-for-raspberry-pi/nodejs/

Passo 3: Esegui il codice.

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

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 2.1.1 Pulsante e 1.1.2 LED RGB, pertanto non è necessario approfondire i dettagli.

Immagine del Fenomeno

../_images/image215.jpeg