bclose

Sensores PIR HC-SR501

Detectores de movimiento por infrarrojos
Sensor PIR

Sensores PIR HC-SR501

En muchas ocasiones nos encontramos con la necesidad de detectar el movimiento en un área controlada. Puede ser porque nos interese montar una alrma de intrusión sencilla, o porque queremos encender una luz al cruzar un pasillo sin necesidad de montar un interruptor.

Para esto, los sensores PIR o piroelectricos son muy cómodos y baratos de utilizar y por eso hacia tiempo que tenia ganas de dedicarles una sesión.

Y como todo llega aquí la tenemos:

  Sensor PIR 

Son sensores de los mas agradecidos para cantidad de cosas y es uno de los mas usados para encender la luz del baño cuando entras y que se apaga sola al salir, en zonas de acceso público. Así que a mi no me echéis la culpa si aparecen mil proyectos haciendo esto precisamente.

Un saludo y hasta pronto.

logoprometec

 

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(6) Comments

  • Avatar for Charly
    • Admin

    Muchas gracias por las ampliaciones y aclaraciones David,

  • Avatar for Charly
    • David

    Hola de nuevo admin. Como te prometi, tras tener varios PIR mas y hacer los test pertinentes, tengo conclusiones que me gustaria compartir con vosotros. Primero, me gustaria repasar y ampliar ligeramente la informacion que has aportado sobre este sensor, ya que la considero necesaria para comprender el funcionamiento.
    En primer lugar, como ya has comentado, se trata de un sensor infrarrojo pasivo, el cual tiene un sistema de funcionamiento autonomo, no necesitando necesariamente un microcontrolador aparte que nos permita sacarle todo el partido.
    Tiene tres pines de corriente, uno de Vcc, otro de GND y otro de OUTPUT.
    Otros tres pines de configuracion a traves de un jumper, H y L.
    Dos potenciometros de 1Mohm cada uno, uno para ajustar la sensibilidad y otro para ajustar el tiempo. Si lo giramos en sentido horario ganamos sensibilidad y tiempo.

    La configuracion H del sensor es la llamada «retriggering», o para nosotros «redisparo». Basicamente lo que hace esto es que, cuando detecta movimiento, la señal por el OUTPUT se dispara a 3,3V durante el tiempo que el potenciometro tiempo le indica por su ajuste. Si por ejemplo configuramos el potenciometro tiempo para que «autodispare» durante 5 segundos, si detecta un movimiento (solo uno), pondra el OUTPUT en 3,3V durante 5 segundos y luego lo apagara. ¿Pero que ocurre si durante los 5 segundos que mantiene la señal OUTPUT activa sigue detectando movimiento? Pues que vuelve a poner el contador de tiempo a 0 y sigue manteniendo el OUTPUT a 3,3V mientras detecte movimiento. Cuando deja de detectar, espera 5 segundos con la señal 3,3V encendida y la apaga.
    Podeis ver el esquema del funcionamiento en esta imagen: https://learn.adafruit.com/system/assets/assets/000/000/539/original/proximity_non-retriggerable.gif?1447976040

    El modo L es el llamado «no-retriggering», es decir, no autodispara. ¿Como funciona? Si detecta movimiento, hace una especie de Blink a aproximadamente 0,5 – 1Hz durante el tiempo que tengamos calibrado el potenciometro tiempo. ¿Que ocurre si detecta constantemente movimiento? Pues lo mismo, hace Blink a 0,5 – 1 Hz durante el tiempo que haya movimiento y lo sigue haciendo hasta que pasa el tiempo determinado por el potenciometro.
    El esquema del funcionamiento lo teneis aqui: https://learn.adafruit.com/system/assets/assets/000/000/539/medium640/proximity_non-retriggerable.gif?1447976040

    Si os habeis fijado en las imagenes, entran en escena dos nuevos conceptos: Tx y Ti.
    Tx hace referencia al potenciometro timepo del que hemos hablados, y es el responsable de mantener la señal activa durante un tiempo tras detectar movimiento.
    El tiempo viene determinado por la siguiente formula:
    Tx = 24576 x (Resistencia R10 + valor potenciometro tiempo) x Condensador C6
    Sustituyendo los valores teoricos por los reales en nuestro sensor:
    Tx = 24576 x (10K + Resistencia del potenciometro tiemo) x 0.01uF

    Si ponemos el potenciometro al minimo, Tx = 2,5 segundos
    Si ponemos el potenciometro al meximo, Tx = 250 segundos

    ¿Podemos bajar de 2,5 segundos de respuesta entonces? La respuesta es si, pero necesitamos un soldador y sustituir la resistencia R10 o el condensador C6por otro, cuyo valor nos permita ajustar el tiempo al que nosotros deseemos.
    Hasta ahora nos hemos empapado de Tx, pero entonces, ¿Ti que es? Ti es el tiempo en el que el sensor, despues de que haya apagado la senal de OUTPUT, ignora si existe o no movimiento. Podriamos llamarlo tiempo de latencia o tiempo de estabilizacion.
    Este tiempo no podemos controlarlo porque el sensor no trae un potenciometro de ajuste, viene determinado de fabrica a 2,5 segundos y viene determinado por un conjunto de resistencias y condensadores, al igual que Tx.
    El tiempo es definido por esta formula:
    Ti = 24 x Resistencia R9 x Condensador C7
    En mi sensor los valores son:
    Ti = 24 x 470K x 0,2uF
    Ti = 2,25 segundos.

    ¿Que quiere decir esto?
    Pues que una vez que el sensor pone el OUTPUT en LOW tras pasar el tiempo Tx, ignora cualquier senal que venga del exterior durante Ti segundos, es decir, durante 2,25 segundos en mi caso.

    Una cosa me gustaria destacar, y es que en tu video indicas que la respuesta no es instantanea. Eso no es del todo cierto, ¡el sensor es completamente instantaneo! Lo que ocurre es que cuando lo enciendes, tiene un periodo de estabilizacion que dura aproximadamente un minuto, a veces un poco mas, tiempo en el que el sensor no responde como deberia, puede responder lento (delay de 3 – 5 segundos desde que existe movimiento) o directamente no responder.
    Pero una vez que esta estabilizado, tienes que tener en cuenta que tras apagarse el led (en el caso del video), necesitas esperar un tiempo para que el led vuelva a encenderse, y esto viene determinado por el Ti, de manera que, aunque el sensor tenga informacion de movimiento, si Ti esta vigente, no habra señal de salida hasta que Ti pase, y en su caso, si la señal Tx sigue activa, encendera el led aunque no haya movimiento en ese momento (delay).
    Para explicarme mejor pongo un ejemplo:
    El sensor esta estabilizado y sin detectar nada, configurado en modo H y con el potenciometro tiempo ajustado para que Tx sera 4 segundos. Ti por defecto esta en 2,5. Hay una resistencia de 220ohm a la salida del OUTPUT y la pata positiva de un led en serie con la resistencia. La pata negativa del led conectada a tierra.
    1. Pasamos por delante
    2. El sensor te detecta e instantaneamente pone el OUTPUT en 3,3V, la corriente pasa la resistencia y enciende el led.
    3. El sensor deja de detectarnos y mantiene encendido el led durante 4 segundos (Tx).
    4. Pasado los 4 segundos, la señal se apaga y el sensor entra en modo de estabilizacion o delay (Ti = 2,5 segundos).
    4a. Si pasado los 2,5 segundos vuelve a detectarnos, enciende el led de nuevo instantaneamente y volvemos al punto 4.
    4b. Si durante la vigencia del Ti nos detecta (por ejemplo ha pasado 0,5 segundos del Ti), la señal OUTPUT deberia activarse, pero no se activa hasta que Ti pase (faltan aun 2 segundos), activandose posteriormente con un retardo (de 2 segundos) y durante un tiempo = Tx – Ti, o sustituyendo 4 – 2 = 2 segundos.
    Tal vez es por esto por lo que, en el video, se aprecia un ligero retardo en encender el led desde que hay movimiento, y te lleva a la conclusion errorea de que el sensor no es instantaneo.

    Un saludo, y espero haber contribuido con algo 🙂
    David

  • Avatar for Charly
    • Admin

    Hola David, lamento decirte que no he hecho ninguna prueba con estos sensores y no pude reocmendarte nada en cuanto al cambio del trimmer. Pero sin conocer tu proyecto s eme ocurre que si tienes un mega, puedes usar la salida del sensor PIR para generar una interrupcion en el Mega ycon ella decidir el tiempo de respuesta. No importa cuanto tiempo este activa la señal, la interrupcion la puedes disparar por flanco y lanzar una funcion callback una unica vez por disparo

  • Avatar for Charly
    • David

    Hola, admin, gracias por responder. Efectivamente tiene dos trimmers, uno para la sensibilidad de detección en metros, y otro para el tiempo de respuesta de la señal output del sensor tras detectar algo. A pesar de poner el trimmer al minimo, el tiempo que envía señal por el output es excesivo para mi (en torno a 3 segundos en un sensor, pero sobre los 7 en el otro que dispongo). Al parecer es una respuesta propia de ese sensor, es decir, su funcionamiento es ese precisamente, enviar señal aunque ya no detecte nada, siendo ese trimmer el que te permita configurar cómo de «cansina», si se me permite la palabra, es su respuesta. El caso es que leí por algún foro anglosajón que sustituyendo el trimmer de 1Mohm que tiene por otro de menor valor, véase 100K o 47K, se obtenían tiempos mucho menores de respuesta, pero no estoy seguro de ello, ya que no lo aseguran de manera tajante y hay poca información al respecto… Preguntaba por si vosotros lo conocíais, ya que preciso hacer muy exacto este sensor, al menos en tiempo de respuesta, porque de eso depende mi proyecto.
    Cuando me lleguen algunos repuestos intentare cambiar el trimmer y prometo, que me pasare por aqui para comentar resultados. Si no lo logro, supongo que optaré por usar este sensor como Wakeup desde un Powerdown mode y que durante 5 segundos observe un ultrasonido para ver si hay movimiento cerca del objeto, y si no lo hay que se eche otra «siesta» el Arduino Mega.
    Sin mas agradecerte tu respuesta y tu inconmensurable esfuerzo por mantener este blog, tu lenguaje afable y apto para todos los públicos (incluidos los manazas como yo) y la grandisima cantidad de información que aportas, de verdad, todo un detalle por tu parte.
    Un saludo amigo.

  • Avatar for Charly
    • Admin

    David, no conozco nada sobre ese asunto por lo que no puedo opianr, pero creo recordar que uno de los trimmers era precisamente para modificar el tiempo que la señal se mantenia alta despues de que detectase algo. De hecho creo recordar que podias configurarlo para que la señal desapareciese ald esaparecer la deteccion, aunque estoy hablando de memoria

  • Avatar for Charly
    • David

    Hola de nuevo. Tengo una duda, y aunque he leído algún comentario en una página, me gustaría saber si vosotros lo conocéis o veis alguna logico en lo que digo.
    En un proyecto uso dos sensores PIR, pero el problema que me plantean estos sensores es que aunque detecten movimiento y el cuerpo salga de su campo de visión, ellos continúan enviando señales al arduino durante unos segundos (uno de ellos aproximadamente durante 7 segundos). En sí no es un problema, pero me gustaría hacerlo más preciso. He leido por ahí que si se sustituye el trimmer del delay por uno de 100Kohm (el que tiene creo que es de aproximadamente 1Mohm), se puede reducir el tiempo de envio de pulsos a aproximadamente 0,5 segundos. Esto es justo lo que quier!
    Sabéis algo al respecto?
    Un saludo y muchas gracias.

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login
Tienda y Tutoriales Arduino