Nota

Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci l’esplorazione del Raspberry Pi, Arduino ed ESP32 con altri appassionati.

Perché unirti a noi?

  • Supporto esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra comunità e del nostro team.

  • Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime esclusive: Accedi in anteprima agli annunci di nuovi prodotti e alle anteprime esclusive.

  • Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni e omaggi festivi: Partecipa a omaggi e promozioni speciali durante le festività.

👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!

2.2.7 PIR

Introduzione

In questo progetto, realizzeremo un dispositivo utilizzando i sensori piroelettrici a infrarossi per il rilevamento del corpo umano. Quando qualcuno si avvicina al LED, questo si accenderà automaticamente. In caso contrario, 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 avremo bisogno dei seguenti componenti.

../_images/list_2.2.4_pir2.png

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

LED RGB

ACQUISTA

Modulo Sensore di Movimento PIR

-

Schema elettrico

../_images/image327.png

Procedura sperimentale

Passo 1: Costruisci il circuito.

../_images/image214.png

Passo 2: Vai nella cartella del codice.

cd ~/raphael-kit/python/

Passo 3: Esegui il file eseguibile.

sudo python3 2.2.7_PIR.py

Dopo l’esecuzione del codice, il PIR rileva l’ambiente circostante e fa illuminare il LED RGB di giallo se rileva qualcuno nelle vicinanze.

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, devi ruotarli entrambi in senso antiorario fino alla fine.

../_images/PIR_TTE.png

Codice

Nota

Puoi Modificare/Resettare/Copiare/Eseguire/Fermare il codice qui sotto. Ma prima di farlo, devi andare nel percorso del codice sorgente, come raphael-kit/python. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.

import RPi.GPIO as GPIO
import time

rgbPins = {'Red':18, 'Green':27, 'Blue':22}
pirPin = 17    # il pir è collegato al pin 17

def setup():
    global p_R, p_G, p_B
    GPIO.setmode(GPIO.BCM)      # Imposta le modalità GPIO su BCM Numbering
    GPIO.setup(pirPin, GPIO.IN)    # Imposta pirPin come input
    # Imposta tutti i LedPin in modalità output e livello iniziale alto (3,3 V)
    for i in rgbPins:
        GPIO.setup(rgbPins[i], GPIO.OUT, initial=GPIO.HIGH)

    # Imposta tutti i led come canali pwm e frequenza a 2KHz
    p_R = GPIO.PWM(rgbPins['Red'], 2000)
    p_G = GPIO.PWM(rgbPins['Green'], 2000)
    p_B = GPIO.PWM(rgbPins['Blue'], 2000)

    # Imposta tutti i valori iniziali a 0
    p_R.start(0)
    p_G.start(0)
    p_B.start(0)

# Definisci una funzione MAP per mappare i valori, ad esempio da 0~255 a 0~100
def MAP(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

# Definisci una funzione per impostare i colori
def setColor(color):
# configura la luminosità dei tre LED con il valore del colore inserito.
    # Suddividi i colori dalla variabile 'color'
    R_val = (color & 0xFF0000) >> 16
    G_val = (color & 0x00FF00) >> 8
    B_val = (color & 0x0000FF) >> 0
    # Mappa il valore del colore da 0~255 a 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)

    # Assegna il valore del ciclo di lavoro mappato al corrispondente canale PWM per cambiare la luminosità.
    p_R.ChangeDutyCycle(R_val)
    p_G.ChangeDutyCycle(G_val)
    p_B.ChangeDutyCycle(B_val)
    #print ("messaggio_colore: R_val = %s, G_val = %s, B_val = %s"%(R_val, G_val, B_val))

def loop():
    while True:
        pir_val = GPIO.input(pirPin)
        if pir_val==GPIO.HIGH:
            setColor(0xFFFF00)
        else :
            setColor(0x0000FF)

def destroy():
    p_R.stop()
    p_G.stop()
    p_B.stop()
    GPIO.cleanup()                     # Rilascia le risorse

if __name__ == '__main__':     # Il programma inizia qui
    setup()
    try:
        loop()
    except KeyboardInterrupt:  # Quando si preme 'Ctrl+C', viene eseguito il programma figlio destroy().
        destroy()

Spiegazione del Codice

rgbPins = {'Red':18, 'Green':27, 'Blue':22}

def setup():
    global p_R, p_G, p_B
    GPIO.setmode(GPIO.BCM)
    # ……
    for i in rgbPins:
        GPIO.setup(rgbPins[i], GPIO.OUT, initial=GPIO.HIGH)
    p_R = GPIO.PWM(rgbPins['Red'], 2000)
    p_G = GPIO.PWM(rgbPins['Green'], 2000)
    p_B = GPIO.PWM(rgbPins['Blue'], 2000)
    p_R.start(0)
    p_G.start(0)
    p_B.start(0)

def MAP(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

def setColor(color):
...

Questi codici vengono utilizzati per impostare il colore del LED RGB, per ulteriori dettagli consulta 1.1.2 LED RGB.

def loop():
    while True:
        pir_val = GPIO.input(pirPin)
        if pir_val==GPIO.HIGH:
            setColor(0xFFFF00)
        else :
            setColor(0x0000FF)

Quando il PIR rileva lo spettro infrarosso umano, il LED RGB emette luce gialla; altrimenti, emette luce blu.

Immagine del fenomeno

../_images/image215.jpeg