Sensore infrarosso PIR HC-SR501

Il sensore utilizzato in questi esempi è il sensore infrarosso PIR tipo HC-SR501 si presenta come una scheda dalle seguenti dimensioni 33 x 25mm e di 8 g di peso. Questo modulo è un sensore a infrarossi in grado di fornire un segnale alto a 3V quando rileva un corpo caldo in movimento.

Datasheet

Sensore infrarosso HC-RS501

Il  sensore infrarosso  passivo piroelettrico (PIR) tipo HC-SR501 è basato sul chip BISS0001, integrato U4 (datasheet)  per l’interfaccia, l’alimentazione è regolata al valore di 3,3V tramite apposito regolatore (IC1), ed è presente un diodo (D1) a protezione dell’inversione di polarità.
Sulla scheda del sensore HC-SR501 sono presenti due trimmer, uno regola la sensibilità e l’altro tempi di uscita.
Per quanto riguarda la sensibilità avremo che ruotando in senso orario => Alta sensibilità, mentre in senso antiorario => bassa sensibilità (intervallo compreso tra 3-7 m).
Per i tempi di uscita, in senso orario => lungo, antiorario => corto (intervallo compreso tra 3-300 sec)
Sul connettore d’uscita, abbiamo il polo di alimentazione Vcc (+ 5-20V), quello centrale è il pin d’uscita del segnale, mentre l’ultimo rappresenta il terminale di massa.
L’uscita è alta (3,3 V) o bassa (0 V)

 

Caratteristiche del sensore

  • Tensione di alimentazione: da 4,5V dc a 20V dc
  • Tensione di uscita: 0-3,3V
  • Corrente di uscita: 10 mA
  • Angolo di visione: <140°
  • Distanza di rilevamento: da 3 a 7 mt

Il sensore di movimento PIR HC-SR501 è uno dei più facili da collegarsi ad un Arduino o a qualsiasi altro microcontrollore, tra l’altro può essere utilizzato anche come un rilevatore di movimento autonomo.
Si possono trovare due versioni della scheda. Uno con un jumper a 3 poli ed uno con piazzole di saldatura.

  • Con il ponticello messo nella sua posizione inferiore (con la scheda ancora di fronte, come descritto) non vi è alcun ripristino. No reset
  • Ponticello nella sua posizione superiore (H) è in modalità ripristino automatico. Auto-reset

Quando impostato su No reset sensore di rilevamento si ferma una volta che ha innescato, e l’uscita rimane alta per il periodo di tempo prestabilito.
Se è impostato su auto-reset il segnale del sensore rimarrà alto fino a quando il movimento si arresta. Dopo, se non viene rilevato un movimento l’uscita diminuirà.
Per scegliere una di queste impostazioni, è sufficiente creare una saldatura-ponte tra il pad con l’etichetta e il pad in mezzo. il default è ‘L’

Programmi di esempio

Per testare il sensore HC-SR501 sono presentati alcuni esempi: Rilevazione di oggetto in movimento , Semplice sistema di allarme

Rilevazione di oggetto in movimento

Il primo esempio mostra la semplice attivazione del sensore con accensione di un led. Tramite il monitor seriale viene mostrato il tempo di attivazione del sensore.
Sono necessari i seguenti componenti

Arduino UNO  Sensore PIR HC-SR501  Diodo led

Programma test_sensore_pir.ino

/*
  Programma:test_sensore_pir.ino
  Il programma accende un led quando un corpo caldo
  è in movimento.
  di Adriano Gandolfo https://www.adrirobot.it
*/

//Definizione dei PIN
int pirPin = 4;    //il PIN di Arduino a cui è collegato il sensore
int ledPin = 13;   //il PIN a cui è connesso il LED

// Tempo di calibrazione del sensore
int calibrationTime = 15;

//Il tempo in cui l'uscita sia bassa
long unsigned int lowIn;

// valore di millisecondi, per cui si ritiene che ci sia "quiete"
long unsigned int pause = 5000;

boolean lockLow = true;
boolean takeLowTime;

// Impostazione del sensore
void setup() {
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(pirPin, LOW);

  //Fase di calibrazione
  Serial.print("Calibrazione del sensore ");
  for (int i = 0; i &amp;amp;lt; calibrationTime; i++) { Serial.print("."); delay(1000); } Serial.println(" Fatto"); Serial.println("SENSORE ATTIVO"); delay(50); } void loop() { // Questo IF permette di stabilre se il sensore rileva un oggetto in movimento if (digitalRead(pirPin) == HIGH) { digitalWrite(ledPin, HIGH); //Accendiamo il LED if (lockLow) { lockLow = false; Serial.println("---"); Serial.print("Movimento rilevato a "); Serial.print(millis() / 1000); Serial.println(" sec"); delay(50); } takeLowTime = true; } // Questo IF permette di stabilire se non c'è più nessun movimento if (digitalRead(pirPin) == LOW) { digitalWrite(ledPin, LOW); //Si spegne il LED if (takeLowTime) { lowIn = millis(); takeLowTime = false; } if (!lockLow &amp;amp;amp;&amp;amp;amp; millis() - lowIn &amp;amp;gt; pause) {

      lockLow = true;
      Serial.print("Movimento terminato a ");      //output
      Serial.print((millis() - pause) / 1000);
      Serial.println(" sec");
      delay(50);
    }
  }
}

Semplice sistema di allarme

Il secondo esempio rappresenta un’elementare sistema di allarme. Sono necessari i seguenti componenti

Arduino UNO  Sensore PIR HC-SR501 Diodo led
 KY-019 5V relay module KY-006 Small passive buzzer

Esempio di utilizzo fatto dall’amico Cristiano Rossi

Programma allarme_pir_HC-SR501.ino

/*
  Programma:allarme_pir_HC-SR501.ino
  Il programma attiva un relè, accende un led e fa emettere un suono
  quando un corpo caldo è in movimento, grazie al sensore
*/

//Definizione dei PIN e variabili
int pirPin = 2;
int pinSpeaker = 3;
int pinRele = 4;
int ledPin = 13;
int pirVal = digitalRead(pirPin);

void setup() {
  Serial.begin(9600);
// Definizione pin
  pinMode(pirPin, INPUT);
  pinMode(pinSpeaker, OUTPUT);
  pinMode (pinRele, OUTPUT);
  pinMode(ledPin, OUTPUT);

  digitalWrite(pinRele, HIGH);

  Serial.println("Programma allarme con PIR");
  Serial.println("Pausa stabilizzazione sensore");
  tone(pinSpeaker, 1000, 500); //tone(pin, frequency, duration)
  delay (5000);
  Serial.println("Inizio controllo");
  tone(pinSpeaker, 500, 500);
}

void loop() {
  Serial.println("Lettura sensore PIR");
  digitalWrite(ledPin, 0);
  digitalWrite(pinRele, HIGH);
  delay(2000);
  if (pirVal == HIGH) {
    Serial.println("RILEVATO MOVIMENTO");
    digitalWrite(ledPin, HIGH);
    digitalWrite(pinRele, LOW);
    tone(pinSpeaker, 1000, 1000); //tone(pin, frequency, duration)
    delay(2000);
  }
}

Altra applicazione del modulo per realizzare un semplice sistema di allarme , che utilizza come base il Multi test Shield

Multi test Shield hc-sr501