Programmiamo il sensore PIR HC-SR501 con Arduino UNO

Utilizzato principalmente per i sistemi di allarme, il sensore HC-SR501 è uno dei più sofisticati sensori disponibili per Arduino e Raspberry, giacché sono in gioco tante variabili che hanno effetto sui valori rilevati. Vedremo come questo sensore va regolato e programmato, affinché possa essere utilizzato al meglio.

Specifiche

Il sensore HC-SR501 è un sensore PIR, ossia un Sensore a InfraRossi Passivo (Passive InfraRed), costituito da due unità (slot) realizzate appunto con materiale sensibile agli infrarossi, in grado di “vedere” ad una certa distanza qualsiasi corpo che emani calore e sia in movimento.

Il sensore HC-SR501 è dotato di due potenziometri, il primo, a destra in foto, in grado di regolare la distanza compresa da un minimo di 3 metri fino ad un massimo di 7 metri, l’altro, in foto a sinistra, imposta il tempo nel quale di segnale di OUTPUT rimane in HIGH dopo che è stato rilevato un movimento e questo tempo è compreso in un minimo di 5 secondi ad un massimo di 5 minuti.



Sul PCB del sensore troviamo anche dei jumper con un ponticello: il Trigger Selection Jumper. Spostando il ponticello da L (Low) a H (High) possiamo impostare trigger singoli o multipli. In caso di trigger singolo, dopo il primo rilevamento del movimento l’intervallo di tempo viene inizializzato, mentre nel caso di trigger multiplo l’intervallo di tempo viene resettato solo dopo l’ultimo movimento rilevato.

Ancora, troviamo i 3 pin di connessione con Arduino, dove il centrale è il pin di segnale digitale, mentre il pin in direzione del Trigger Selection Jumper è il Ground, l’altro è il Vcc a cui possiamo fornire tensione compresa tra i 5V e i 12V.

Ricordiamo, infine, che il sensore ha un’area di visuale con un angolo di 110°.

Lista componenti su Amazon:

Lista componenti su Aliexpress:



Collegamento

Come anticipato prima, utilizziamo solo 3 pin, di cui ripotiamo lo scheda di collegamento sotto. Ricordate sempre di regolare la distanza e l’intervallo di tempo dai potenziometri posti nel sensore, armandovi di pazienza ed effettuando più prove per regolare la giusta sensibilità.

HC-SR501

Codice

Il codice non richiede librerie ed è molto semplice da scrivere e modificare. Programmeremo Arduino UNO in modo che attivi il LED integrato al pin digitale 13 quando il sensore HC-SR501 rilevi una fonte di calore in movimento. Potete scaricare lo sketch a questi LINK. Iniziamo dal VOID SETUP dove forniamo una direzione al pin digitali 2 come INPUT e il pin digitale 13 come OUTPUT, avviando poi il monitor seriale.


void setup() {
pinMode (2, INPUT);
pinMode (13, OUTPUT);
Serial.begin(9600);

}

Nel VOI LOOP controlliamo se dal pin digitale 2 arriva un segnale di HIGH (valore numerico è 1), attivando così il LED integrato e stampando il messaggio di “Intruso”, ripetuto per tutto l’intervallo di tempo regolato dal sensore. In caso contrario, il LED rimarrà spento e non verrà stampato nessun messaggio sul monitor seriale.


void loop() {
int pir = digitalRead(2);

if (pir == 1){
digitalWrite(13, HIGH);
Serial.println("Intruso!");
}
else {
digitalWrite(13, LOW);
}

delay (10);

}

Caricato lo sketch, facciamo transitare qualcosa o qualcuno davanti al sensore, ad una distanza minima di 3 metri e vedremo attivarsi il sistema.