Si no lo sabía, todos los objetos con una temperatura superior a cero absoluto (0 Kelvin / -273.15 ° C) emiten energía térmica en forma de radiación infrarroja, incluidos los cuerpos humanos. Cuanto más caliente es un objeto, más radiación emite.

El sensor PIR está especialmente diseñado para detectar dichos niveles de radiación infrarroja. Básicamente consta de dos partes principales: un sensor piroeléctrico y una lente especial llamada lente Fresnel que enfoca las señales infrarrojas en el sensor piroeléctrico.

 

Un sensor piroeléctrico en realidad tiene dos ranuras rectangulares hechas de un material que permite que pase la radiación infrarroja. Detrás de estos, hay dos electrodos sensores infrarrojos separados, uno responsable de producir una salida positiva y el otro negativo. La razón de esto es que estamos buscando un cambio en los niveles de IR y no en los niveles de IR ambientales. Los dos electrodos están conectados para que se cancelen mutuamente. Si una mitad ve más o menos radiación IR que la otra, la salida oscilará alto o bajo.

 

Cuando el sensor está inactivo , es decir, no hay movimiento alrededor del sensor; ambas ranuras detectan la misma cantidad de radiación infrarroja, lo que resulta en una señal de salida cero.

Pero cuando pasa un cuerpo cálido como un humano o un animal ; primero intercepta la mitad del sensor PIR, lo que provoca un cambio diferencial positivo entre las dos mitades. Cuando el cuerpo caliente abandona el área de detección, ocurre lo contrario, por lo que el sensor genera un cambio diferencial negativo. El pulso de señales correspondiente da como resultado que el sensor establezca su pin de salida alto.

DETECCIÓN

int ledPin = 13;                // choose the pin for the LED
int inputPin = 8;               // choose the input pin (for PIR sensor)
int pirState = LOW;             // we start, assuming no motion detected
int val = 0;                    // variable for reading the pin status
 
void setup() {
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input
 
  Serial.begin(9600);
}
 
void loop(){
  val = digitalRead(inputPin);  // read input value
  
  if (val == HIGH)        // check if the input is HIGH
  {            
    digitalWrite(ledPin, HIGH);  // turn LED ON
        
    if (pirState == LOW) 
        {
      Serial.println("Motion detected!");   // print on output change
      pirState = HIGH;
    }
  } 
  else 
  {
    digitalWrite(ledPin, LOW); // turn LED OFF
        
    if (pirState == HIGH)
        {
      Serial.println("Motion ended!");      // print on output change
      pirState = LOW;
    }
  }
}