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.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Raphael |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
- |
Schema elettrico
Procedura sperimentale
Passo 1: Costruisci il circuito.
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.
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