Archivi tag: sensore presenza

Arduino – usare un PIR HC-SR501

Noto spesso nei progetti dei miei studenti il divertimento che nasce nell’utilizzo di un sensore ad infrarossi passivo che viene utilizzato per realizzare dei semplici dispositivi antintrusione, attualmente alcuni allievi li stanno utilizzando in due diversi progetti:

  • all’interno del kit EduRobot Home in cui il PIR HC-SR501 viene utilizzato come sensore di rilevamento per realizzare un antifurto
  • attività di PCTO in cui i ragazzi devono implementare un misuratore di sedentarietà, la rilevazione dell’essere umano davanti la computer avviene mediante un PIR.

Questa tipologia di sensore è molto diffuso, li utilizziamo ogni giorno: antifurto di casa, interruttori automatici di luci e molto altro in generale in tutti quei sistemi in cui è indispensabile attivare un’azione nel caso in cui venga rilevata la presenza di un essere umano o di un animale.

Come funziona il sensore di movimento PIR?

Come sicuramente saprete tutti gli oggetti con una temperatura superiore allo zero assoluto (0 Kelvin / -273,15 ° C) emettono energia termica sotto forma di radiazione infrarossa, inclusi i corpi umani. Più un oggetto è caldo, più radiazioni emette.

Il sensore PIR è appositamente progettato per rilevare tali livelli di radiazione infrarossa, è in grado di percepire oggetti caldi in movimento con uno lunghezza d’onda compreso tra i 700 nm e 1 mm . Nel caso della rilevazione di esseri umani la lunghezza d’onda da rilevare è compresa tra 8-14 micrometri.

Il mercato offre diverse tipologie di PIR in funzione del campo di impiego, i più comuni, quelli a lente di Fresnel hanno un range tra i 10 m e i 12 m con un campo di visivo di 300°. E’ possibile trovare sul mercato PIR con un campo visivo che raggiunge i 360° e distanze dell’oggetto rilevato fino a 30 m.

Il PIR fondamentalmente si compone di due parti principali: un sensore piroelettrico e una lente speciale chiamata lente di Fresnel che focalizza i segnali a infrarossi sul sensore piroelettrico.

Un sensore piroelettrico è dotato di due fessure rettangolari al suo interno fatte di un materiale che permette il passaggio della radiazione infrarossa, ciò che verrà rilevato dal sensore sarà la variazione della quantità di raggi infrarossi causata ad esempio dal passaggio di un essere umano e non la quantità di infrarossi totale dell’ambiente.
Le due fessure sono da considerare come due finestre che verranno colpite dai raggi infrarossi e se attraverso le due fessure viene rilevata la stessa quantità di infrarosso allora il segnale risultante di uscita sarà pari a zero, ovvero corpo non rilevato.
Quando però davanti al sensore passa un corpo caldo, come un essere umano, attraverso una finestra verrà rilevata una certa quantità di infrarosso che causerà una differenza di potenziale positiva tra le due finestra, quando il corpo caldo lascia l’area di rilevamento, avviene il contrario, per cui il sensore genera una variazione differenziale negativa. L’impulso di segnali corrispondente fa sì che il sensore imposti il pin di uscita alto, indicandoci quindi la presenza di una persona.

Il sensore HC-SR501, trattandosi di un sensore molto economico, possiede caratteristiche  limitate rispetto a quelli che potremo utilizzare per scopi civili o industriali, ma il loro principio di funzionamento è il medesimo.

Analizziamo la scheda

Pinout

Caratteristiche tecniche

  • Tensione continua di lavoro compresa tra i 4,5V e i 20V
  • Livelli di tensione di uscita: 3,3V HIGH – 0V LOW
  • Massimo angolo di visione 110°
  • Distanza rilevata compresa tra i 3 m e i 7 m

Sulla scheda sono presenti i due trimmer

  • PIR Range Adjustment (Sensibilità)
    Ruotando in senso orario si avrà una diminuzione della sensibilità con decremento della distanza di rilevamento, a fine corsa si avranno approssimativamente una sensibilità di 3 metri.
    Ruotando in senso antiorario aumentiamo la sensibilità per raggiungere approssimativamente 7 m.
  • Time Delay Adjustment (Tempo di delay)
    determina la quantità di tempo in cui l’output del sensore PIR rimarrà alto dopo il rilevamento del movimento. L’intervallo è compreso tra circa 3 secondi e 5 minuti. Girando in senso orario, a fine corsa si avrà un delay di 5 minuti, ruotando in senso antiorario, a fine corsa si otterrà un delay di circa 3 secondi.

Si ricordi che impostato il tempo di delay, ad esempio a 5 secondi, ciò comporterà che se viene rilevato il passaggio di un essere umano l’uscita del sensore sarà alta per 5 secondi e in questi 5 secondi il sensore è bloccato, cioè non sarà in grado di rilevare altri movimenti causati da altri corpi.

IMPORTANTE
Dopo il completamento del Time Delay  l’uscita sarà a LOW (off)  per circa 3 secondi , ciò vuol dire che in questi 3 secondi non verrà rilevato nulla dal sensore.

Sulla scheda è presente un jumper che ha la seguente funzionalità:

Con questo Jumper è possibile impostare le seguenti modalità:

Single Trigger Mode
Il Time Delay viene avviato immediatamente al rilevamento del movimento e il rilevamento continuo viene bloccato.
Questo vuol dire che se ad esempio viene impostato un Time Delay di 5 secondi, al rilevamento di una persona l’uscita passa ad HIGH, se nei 5 secondi passano davanti al sensore un’altra persone questa non viene rilevata e non viene aggiunto un’ulteriore Time Delay.

Immaginate di essere in modalità Single Trigger Mode con un Time Delay di 5 secondi.

  • Il PIR rileverà il movimento e lo imposterà ad HIGH per 5 secondi.
  • Dopo cinque secondi il PIR imposta la sua uscita bassa per circa 3 secondi.
  • Durante i tre secondi, il PIR non rileverà il movimento.
  • Dopo tre secondi di di LOW, il PIR è abilitato nuovamente al rilevamento di movimenti, al passaggio di una persona verrà impostata nuovamente l’uscita alta per il Time Delay impostato.

Repetable Trigger
Ogni movimento rilevato ripristina il Time Delay, pertanto il Time Delay inizia con l’ultimo movimento rilevato.
Questo vuol dire che se ad esempio viene impostato un Time Delay di 5 secondi, al rilevamento di una persona l’uscita passa ad HIGH se nei 5 secondi viene rilevato il passaggio di un’altra persona il Time Delay riparte nuovamente. Quindi supponendo che:

  • Persona 1 passa davanti al PIR, parte il Time Delay
  • Persona 2 passa davanti al PIR al secondo 3, se non passa nessuna persona il Time Delay cesserà ad 8 secondi ed il sensore potrà leggere nuovamente il passaggio di una persona al secondo 11.

IMPORTANTE

Prima di progettare un sistema in cui sono presenti dei PIR ricordare che questi sensori richiedono un po’ di tempo prima di adattarsi alla quantità di energia infrarossa presente nella stanza in cui vengono inseriti, per l’HC-SR501 sono necessari dai 30 ai 60 secondi da quando il sensore viene alimentato.
Ricordare inoltre che il sensore ha un periodo di reset che può oscillare dai 3 ai 6 secondi dopo aver effettuato la lettura, durante tale periodo non verrà rilevato nessun movimento.

Esempio 01
Lettura dello stato del PIR e relativa accensione del LED 13

Schema di collegamento

Il codice per l’utilizzo del sensore è estremamente semplice, è necessario solamente rilevare se il pin OUT si trova a valore alto o basso. Il funzionamento è dettagliato nei commenti.

/*
 * Prof. Michele Maffucci
 * data: 28.02.2021
 * 
 * Esempio 01
 * Utilizzo del sensore PIR: PIR HC-SR501
 * Lettura dello stato del PIR e relativa accensione 
 * del LED 13
 * 
 */
 
byte pinLed = 13;   // pin a cui è collegato il LED
byte pinInput = 8;  // pin di input a cui è collegato l'OUT del PIR
bool valPIR = 0;    // variabile utilizzata per memorizzre lo stato del PIR
 
void setup() {
  pinMode(pinLed, OUTPUT);    // pin a cui è collegato il LED è un output
  pinMode(pinInput, INPUT);   // pin a cui è collegato il PIR è un input
 
  Serial.begin(9600);
}

void loop() {
  valPIR = digitalRead(pinInput);  // viene letto il valore restituito dal PIR
  digitalWrite(pinLed, valPIR);    // il LED sulla scheda verrà acceso se viene
                                   // rilevata una persona altrimenti il LED
                                   // resterà spento. valPIR assume i valori 0 o 1
 }

Esempio 02
Lettura dello stato del PIR e relativa accensione del LED 13 e stampa dello stato sulla Serial Monitor

/*
 * Prof. Michele Maffucci
 * data: 28.02.2021
 * 
 * Esempio 02
 * Utilizzo del sensore PIR: PIR HC-SR501
 * Lettura dello stato del PIR e relativa accensione 
 * del LED 13 e stampa dello stato sulla Serial Monitor
 */
 
byte pinLed = 13;   // pin a cui è collegato il LED
byte pinInput = 8;  // pin di input a cui è collegato l'OUT del PIR
bool valPIR = 0;    // variabile utilizzata per memorizzre lo stato del PIR
 
void setup() {
  pinMode(pinLed, OUTPUT);    // pin a cui è collegato il LED è un output
  pinMode(pinInput, INPUT);   // pin a cui è collegato il PIR è un input
 
  Serial.begin(9600);
}

void loop() {
  valPIR = digitalRead(pinInput);  // viene letto il valore restituito dal PIR
  Serial.println(valPIR);          // stampa sulla Serial Monitor il valore letto
  delay(150);                      // ritardo per rallentare la frequenza di stampa
                                   // sulla Serial Monitor

  // Viene controllato se il PIR rileva una persona
  // Nota: scrivere "if (valPIR)" è analogo che scrivere
  // "if (valPIR == HIGH)" in quanto valPIR assume i valori 0 o 1
  
  if (valPIR) {
    digitalWrite(pinLed, HIGH);
    Serial.println("Rilevata una persona");
  }
  else
  {
    digitalWrite(pinLed, LOW);
    Serial.println("Non è presente nessuno");
  }
 }

Esercizio 01

Realizzare un semplice sistema di allarme costituito dal sensore PIR, un buzzer e due LED uno rosso ed uno verde.

  • Se il PIR non rileva nessuna persona il LED verde risulta acceso, il LED rosso spento ed il buzzer non emette nessun suono.
  • Se il PIR rileva una persona il LED verde risulta spento, il LED rosso acceso ed il buzzer emette un suono.

Esercizio 02

Realizzare le medesime funzionalità dell’esercizio 01 ed aggiungere un display I2C su cui inviare l’output:

  • Allarme
  • No presenza

Buon Making a tutti 🙂