The Most/Recent Articles

Top Menu

This Week's/Trending Posts

SUBMIT VIDEO

Visitas

Historial

About

Hand-Picked/Curated Posts

Labels

Translate

Instagram

Copyright © Flashnews Theme. Designed by OddThemes

Hand-Picked/Weekly News

Most Popular/Fun & Sports

Headline News

Trending Videos

Popular Posts

Popular Posts

Ir al contenido principal

SENSOR PIR + ARDUINO: Alarma de Movimiento


Hola lector@s, hoy les traigo un tutorial de alarma de movimiento echo con Arduino y un Sensor Pir, en una programación disponible a todo publico en la web de arduino, la cual traducí y compartí para todos ustedes. 

Necesitaremos:

  • Arduino Uno
  • Sensor Pir
  • Cables



Luego deberán tener cableado como se muestra en la imagen:


Posteriormente subimos el siguiente código a nuestro arduino (recuerden que el código, los diagramas y datasheet están en el archivo para descargar) y nos ponemos a jugar: 




/* 
 * //////////////////////////////////////////////////
 * //Dar sentido a la salida del sensor PIR de Parallax
 * //////////////////////////////////////////////////
 *
 * Switches a un LED de acuerdo con el estado del pin de salida sensor.
 * Determina el comienzo y el final de las secuencias de movimiento continuo.
 *
 * @ Autor: Kristian Gohlke / krigoo (_) gmail (_) com / http://krx.at
 * @ Fecha: 3. De septiembre de 2006
 *
 * @ Traducido y compartido por GUILLENXT / www.guillenxt.com
 *
 * kr1 (cleft) 2006 
 * Publicado bajo Creative Commons "Reconocimiento-No comercial-Compartir bajo la misma de 2,0" de licencia
 *
 *
 * El sensor PIR de Parallax es un fácil de utilizar como módulo digital de sensor de movimiento por infrarrojos.
 *
 * El eje de salida del sensor va a ALTO si el movimiento está presente.
 * Sin embargo, incluso si hay movimiento va a LOW de vez en cuando, 
 * Lo que podría dar la impresión de no hay movimiento. 
 * Este programa se ocupa de este problema haciendo caso omiso de LOW-fases más corto que un momento dado,
 * Suponiendo que el movimiento continuo está presente durante estas fases.
 *  
 */
/////////////////////////////
//VARS
//El tiempo que nos da el sensor a calibrar (10-60 segundos de acuerdo con la hoja de datos)
int calibrationTime = 10;        

//El tiempo cuando el sensor emite un impulso de baja
long unsigned int lowIn;         

//La cantidad de milisegundos el sensor tiene que ser bajo
//Antes de que asuma todo el movimiento se ha detenido
long unsigned int pause = 5000;  

boolean lockLow = true;
boolean takeLowTime;  

int pirPin = 7;    //pin digital conectado a la salida del sensor PIR
int ledPin = 8;


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

  //Dar el sensor de un cierto tiempo para calibrar
  Serial.print(" calibrando sensor ");
    for(int i = 0; i < calibrationTime; i++){
      Serial.print(".");
      delay(1000);
      }
    Serial.println(" hecho");
    Serial.println("SENSOR ACTIVADO");
    delay(50);
  }

////////////////////////////
//LOOP
void loop(){

     if(digitalRead(pirPin) == HIGH){
       digitalWrite(ledPin, HIGH);   //LED visualiza el estado de la salida del sensor
       if(lockLow){  
         //Se asegura de que esperar a que la transición a la baja antes de cualquier salida se hace otra:
         lockLow = false;            
         Serial.println("---");
         Serial.print("movimiento encontrado a los ");
         Serial.print(millis()/1000);
         Serial.println(" segundos "); 
         delay(50);
         }         
         takeLowTime = true;
       }

     if(digitalRead(pirPin) == LOW){       
       digitalWrite(ledPin, LOW);  //LED visualiza el estado de la salida del sensor

       if(takeLowTime){
        lowIn = millis();          // guardar el momento de la transición de alta a baja
        takeLowTime = false;       //  asegurarse de que esto sólo se hace al comienzo de una fase de baja
       }
       //Si el sensor es baja para más de la pausa dada, 
       //Asumimos que el movimiento no más que va a pasar
       
       if(!lockLow && millis() - lowIn > pause){  
           //Se asegura de este bloque de código sólo se ejecuta de nuevo después de 
           //Una secuencia de movimiento se ha detectado nuevo
           lockLow = true;                        
           Serial.print("movimiento detenido a los ");      
           Serial.print((millis() - pause)/1000);
           Serial.println(" segundos ");
           delay(50);
           }
       }
    }

Les dejo un vídeo de como me quedo a mi ;


Espero que les guste y sirva

Comentarios

  1. Respuestas
    1. Hola Heriberto, si no es guillenxt es guillenextechnology, plis confirma cual es para los demás usuarios interesados.
      Salu2

      Eliminar
  2. el pass es guillenxt, muy interesante el tuto, saludos

    ResponderEliminar
  3. Que es lo que hace supuestamente ese sensor?

    ResponderEliminar
  4. Hola Sr.Pezzo, le dejo un enlace que le respondra su pregunta: http://es.slideshare.net/benjapreller/sensor-de-movimiento-pir

    ResponderEliminar
  5. una pregunta, para que son cada uno de los reguladores que tiene por un costado? que es lo que calibran?

    ResponderEliminar
  6. hola Luis, dentro del archivo para descargar hay un PDF que es el datasheet de mi sensor PIR, ahí podrás ver como calibrarlo y resolver mas dudas.

    Saludos

    ResponderEliminar
  7. ya no esta disponible el archivo, por favor súbelo de nuevo, se ve muy interesante.

    ResponderEliminar
  8. LINCK RESTAURADO, DISCULPEN POR LA DEMORA

    SALU2 DE GUILLENXT

    ResponderEliminar
  9. de cuanto es la resistencia que tiene tu arduino

    ResponderEliminar
  10. Hola Jose De Jesus Pablo Rivera, a que resitencia te refieres? a la del led (220ohms) talvez...
    Salu2

    ResponderEliminar
  11. Exelente, sin embargo quise ver el tiempo de millis() y observo que hay un periodo donde se vuelven negativos...Porqué pasa eso?
    No observo nada que implique ese cambio

    ResponderEliminar

Publicar un comentario