Nota
Ciao, benvenuto nella community di SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Approfondisci il mondo di Raspberry Pi, Arduino e ESP32 insieme ad altri appassionati.
Perché Unirsi?
Supporto Esperti: Risolvi problemi post-vendita e sfide tecniche con l’aiuto della nostra community e del nostro team.
Impara & Condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime Esclusive: Accedi in anteprima agli annunci di nuovi prodotti e alle anticipazioni.
Sconti Speciali: Goditi sconti esclusivi sui nostri prodotti più recenti.
Promozioni Festive e Giveaway: Partecipa ai giveaway e alle promozioni festive.
👉 Pronto a esplorare e creare con noi? Clicca su [qui] e unisciti oggi stesso!
5.5 Rileva il Movimento Umano¶
Il sensore a infrarossi passivo (sensore PIR) è un sensore comune che può misurare la luce infrarossa (IR) emessa dagli oggetti nel suo campo visivo. In poche parole, rileva la radiazione infrarossa emessa dal corpo, permettendo così di rilevare il movimento di persone e altri animali. Più specificamente, comunica alla scheda di controllo principale che qualcuno è entrato nella tua stanza.
Componenti Necessari
In questo progetto, abbiamo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
OGGETTI IN QUESTO KIT |
LINK |
|---|---|---|
ESP32 Starter Kit |
320+ |
Puoi anche acquistarli separatamente dai link qui sotto.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
Pin Disponibili
Pin Disponibili
Ecco un elenco dei pin disponibili sulla scheda ESP32 per questo progetto.
Per Input
IO13, IO14, IO27, IO26, IO25, IO33, I35, I34, I39, I36, IO4, IO18, IO19, IO21, IO22, IO23
Per Output
IO13, IO12, IO14, IO27, IO26, IO25, IO33, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23
Nota
IO32 non può essere utilizzato come pin di input in questo progetto perché è internamente collegato a una resistenza di pull-down da 1K, che imposta il suo valore predefinito a 0.
Pin di Strapping (Input)
I pin di strapping sono un set speciale di pin utilizzati per determinare modalità di avvio specifiche durante l’accensione del dispositivo (cioè, reset di accensione).
Pin di Strapping
IO5, IO0, IO2, IO12, IO15
Generalmente, non è consigliabile utilizzarli come pin di input. Se desideri utilizzare questi pin, considera l’impatto potenziale sul processo di avvio. Per ulteriori dettagli, consulta la sezione Pin di Strapping.
Schema
Quando il modulo PIR rileva un movimento, IO14 andrà in stato alto e il LED si accenderà. Altrimenti, quando non viene rilevato alcun movimento, IO14 sarà in stato basso e il LED si spegnerà.
Nota
Il modulo PIR ha due potenziometri: uno regola la sensibilità, l’altro regola la distanza di rilevamento. Per far funzionare al meglio il modulo PIR, è necessario ruotare entrambi i potenziometri in senso antiorario fino alla fine.
Cablatura
Codice
Nota
Apri il file
5.5_detect_human_movement.pysituato nel percorsoesp32-starter-kit-main\micropython\codes, oppure copia e incolla il codice in Thonny. Successivamente, fai clic su «Esegui lo script corrente» o premi F5 per eseguirlo.Assicurati di selezionare l’interprete «MicroPython (ESP32).COMxx» nell’angolo in basso a destra.
import machine
import time
# Definisci i pin
PIR_PIN = 14 # Sensore PIR
LED_PIN = 26 # LED
# Inizializza il pin del sensore PIR come pin di input
pir_sensor = machine.Pin(PIR_PIN, machine.Pin.IN, machine.Pin.PULL_DOWN)
# Inizializza il pin del LED come pin di output
led = machine.Pin(LED_PIN, machine.Pin.OUT)
# Flag globale per indicare il rilevamento di movimento
motion_detected_flag = False
# Funzione per gestire l'interrupt
def motion_detected(pin):
global motion_detected_flag
print("Motion detected!")
motion_detected_flag = True
# Collega l'interrupt al pin del sensore PIR
pir_sensor.irq(trigger=machine.Pin.IRQ_RISING, handler=motion_detected)
# Ciclo principale
while True:
if motion_detected_flag:
led.value(1) # Accendi il LED
time.sleep(5) # Mantieni il LED acceso per 5 secondi
led.value(0) # Spegni il LED
motion_detected_flag = False
Quando lo script è in esecuzione, il LED si accenderà per 5 secondi e poi si spegnerà quando il modulo PIR rileva il passaggio di qualcuno.
Nota
Il modulo PIR ha due potenziometri: uno regola la sensibilità, l’altro regola la distanza di rilevamento. Per far funzionare al meglio il modulo PIR, è necessario ruotare entrambi i potenziometri in senso antiorario fino alla fine.
Come Funziona?
Questo codice imposta un semplice sistema di rilevamento del movimento utilizzando un sensore PIR e un LED. Quando viene rilevato un movimento, il LED si accenderà per 5 secondi.
Ecco una suddivisione del codice:
Definisci la funzione gestore dell’interrupt che verrà eseguita quando viene rilevato un movimento:
def motion_detected(pin): global motion_detected_flag print("Motion detected!") motion_detected_flag = True
Collega l’interrupt al pin del sensore PIR, con il trigger impostato su «rising» (cioè, quando il pin passa da bassa a alta tensione):
pir_sensor.irq(trigger=machine.Pin.IRQ_RISING, handler=motion_detected)
Questo imposta un interrupt sul pin
pir_sensor, che è collegato al sensore di movimento PIR.Ecco una spiegazione dettagliata dei parametri:
trigger=machine.Pin.IRQ_RISING: Questo parametro imposta la condizione di trigger per l’interrupt. In questo caso, l’interrupt verrà attivato su un fronte di salita. Un fronte di salita è quando la tensione sul pin passa da uno stato basso (0V) a uno stato alto (tipicamente 3.3V o 5V, a seconda dell’hardware). Per un sensore di movimento PIR, quando viene rilevato un movimento, il pin di uscita di solito passa da basso ad alto, rendendo il fronte di salita una condizione di trigger appropriata.handler=motion_detected: Questo parametro specifica la funzione che verrà eseguita quando l’interrupt viene attivato. In questo caso, la funzionemotion_detectedviene fornita come gestore dell’interrupt. Questa funzione verrà chiamata automaticamente quando la condizione dell’interrupt (fronte di salita) viene rilevata sul pinpir_sensor.
Quindi, questa riga di codice configura il sensore PIR per chiamare la funzione
motion_detectedogni volta che il sensore rileva un movimento, a causa del passaggio del pin di uscita da uno stato basso a uno stato alto.Nel ciclo principale, se il
motion_detected_flagè impostato suTrue, il LED verrà acceso per 5 secondi e poi spento. Il flag viene quindi resettato aFalseper attendere il prossimo evento di movimento.while True: if motion_detected_flag: led.value(1) # Accendi il LED time.sleep(5) # Mantieni il LED acceso per 5 secondi led.value(0) # Spegni il LED motion_detected_flag = False