lunes, 13 de octubre de 2014

Detectando intrusos

Hace unos días que me ha llegado la última remesa de juguetes para cacharrear con Arduino. Entre ellos hay un sensor de movimiento que ya hace tiempo que me apetecía probar. Es un sensor PIR que son las siglas de Passive Infrared, o lo que es lo mismo un detector de infrarrojos. El dispositivo detecta las variaciones de luz infrarroja y altera el voltaje del pin de salida cuando se produce. El resultado es que podemos detectar la presencia humana, o de cualquier ser vivo, ya que la radiación infrarroja no es más que calor. Al pasar por delante del sensor alteramos la radiación infrarroja detectada y salta la alarma. Vamos a empezar con un montaje básico para irlo complicando en sucesivas entradas hasta construir un sistema de alarma que nos envíe un aviso al móvil cuando detecte movimiento. Para el montaje de hoy vamos a usar un led, un piezo y el sensor PIR. El esquema es el siguiente:



Y aquí el esquema montado en la placa de prototipo



El funcionamiento del circuito es muy simple, cuando detecte movimiento encenderá el LED y el piezo emitirá un sonido. Aquí tenemos una imagen del PIR visto por la parte de abajo:


Como podemos ver, la información sobre la función de cada pin brilla por su ausencia. En este caso en concreto, el pin de la izquierda es GND, el del centro es el de datos y el de la derecha es VCC. Tenemos además los jumpers de la parte inferior izquierda que sirven para determinar cómo responderá el pin de datos si el evento de detección de movimiento se repite. Se puede configurar de modo que el pin de datos esté siempre en alto cuando detecte movimiento constantemente, o para que al detectar movimiento devuelva un pulso a HIGH y después vuelva a LOW, de forma que al detectar movimiento repetidamente devuelva una secuencia de unos y ceros. El de la foto está configurado del segundo modo. Para que esté siempre en alto solo hay que cambiar el jumper para que abarque los dos pines de arriba. Y por último, los dos tornillos anaranjados de la parte inferior sirven para modificar la distancia a la que detectará la variación de infrarrojos, es decir, lo cerca que tienes que estar para que te detecte, y el tiempo de la variación.
Y a continuación el sketch:

const byte sensorPin=2;
const byte ledPin=4;
const byte piezoPin=8;

const char contrast=57;

void setup(){
  Serial.begin(115200);
  pinMode(sensorPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(piezoPin, OUTPUT);
  Serial.println("Inicializacion OK");
}

void loop(){
    if(digitalRead(sensorPin)){
      digitalWrite(ledPin,HIGH);
      tone(piezoPin,3000,10);
    }
    else{
      digitalWrite(ledPin,LOW);
    }
    delay(250);
     


El código es muy sencillo. Simplemente consulta el estado del sensor cada 250 milisegundos y enciende el led y hace sonar el piezo si se detecta movimiento. En caso contrario se apaga el led.