Rilevare un movimento con Arduino e un sensore PIR HC-SR501

Scrivere uno sketch o uno snippet cioè una parte di codice d’esempio per un sensore PIR HC-SR501 collegato ad Arduino è veramente semplice, come del resto lo è anche per il collegamento con Arduino, oltre ai due pin di alimentazione il sensore PIR presenta un terzo piedino (ovviamente) dove andare a leggere lo stato del sensore, il codice dello sketch si limita davvero a due righe e lo vedremo a breve.

frontale-HC-SR501
bottom-HC-SR501

Come funziona un sensore PIR? Un sensore PIR acronimo di (Passive Infra-Red) oppure se vogliamo sensore di movimento, rileva gli oggetti o persone davanti al proprio raggio di azione grazie all’emissione dei raggi infrarossi che i corpi irradiano, più un corpo o oggetto è caldo e più questo emette radiazioni infrarosse, come vengono rilevate queste irradiazioni? Tramite un’opportuna lente, detta lente di Fresnel, operanti a lunghezze d’onda al di fuori dello spettro visibile (non visibili ad occhio nudo), infatti parliamo dello spettro dell’infrarosso.

spettro_elettromagnetico

Caratteristiche del sensore PIR HC-SR501

Tensione di lavoro  4,8-20Vdc
Corrente a riposo  50 uA
Temperatura di utilizzo  -15 +70 C°
Dimensioni  32 x 24 x 25H mm
Distanza rilevamento  3-7 m (regolabile)
Angolo di rilevamento  100°
Tempo di ritardo  0,5-20 Sec (regolabile)
Tempo di durata livello logico alto  2,5 Sec (fisso)

connettori-alimentazione-segnale-HC-SR501

trimmer-HC-SR501-pir

I due trimmer posti su uno dei lati del sensore che vediamo in foto, contrassegnati con Sx (sensitivity) e Tx (trigger length), servono rispettivamente per regolare la sensibilità del sensore, l’altro invece serve a regolare il tempo di ritardo del segnale.

collegamento-arduino-pir-buzzer

I collegamenti sono abbastanza semplici, ho collegato l’out del sensore PIR al pin numero 2 di Arduino, poi ho aggiunto due led ed un semplice buzzer.
Adesso passiamo allo sketch, un breve codice di esempio:

const int pir = 2;
const int buzzer = 6;
const int led_green = 7;
const int led_red = 8;

void setup()
{
  pinMode(pir, INPUT);
  pinMode(buzzer, OUTPUT);
  delay(1000);
}

void loop()
{
  if( digitalRead(pir) ) {
    alarm(200);
    digitalWrite(led_green, LOW);
    digitalWrite(led_red, HIGH);
  }
  else {
    digitalWrite(led_red, LOW);
    digitalWrite(led_green, HIGH);
  }
}

void alarm(unsigned char delayms)
{
  analogWrite(buzzer, 20);
  delay(delayms);
  analogWrite(buzzer, 0);
  delay(delayms);
}

Siamo arrivati alla fine del post, se hai bisogno di aiuto o qualche chiarimento in merito commenta qui sotto.
Buon lavoro 😉

Scopri come funzione il sensore HC-SR04, ed il codice per utilizzarlo nei tuoi sketch.