Sensor HC-SR501 con Arduino.

ALARMA MEDIANTE UN SENSOR PIR.

INTRODUCCIÓN.

Todo emite cierta radiación de bajo nivel, y cuanto más caliente es algo, mayor radiación es emitida. La presencia de personas, animales u objetos desprenden calor, son la base de cualquier sistema de detección de intrusos, escaleras comunitarias o aseos públicos para encender la luz en cuanto detecta el movimiento.

Los sensores infrarrojos pasivos son ideales para proyectos de detección de dichos movimientos. El sensor HC-SR501, sólo funciona cuando alguien se mueve en la franja que puede barrer su detector. Puede detectar movimiento de 3 hasta 7 metros de distancia. Este sensor de movimiento PIR tiene 3 pines, VCC, OUTPUT y GND, 2 potenciómetros para ajustar la sensibilidad y la demora. El retardo se puede configurar entre 5 y 300 segundos mientras que el potenciómetro de sensibilidad ajusta el rango de detección de aproximadamente 3 metros a 7 metros.


Fig. 1  Sensor HC-SR501

Como se ha dicho tiene dos trimers el sensor PIR, estos trimers ajustan el tiempo de retardo y la sensibilidad, de forma individual. También hay un puente de selección de modo de disparo.

  • H (re-activación): la salida permanece alta cuando el sensor se dispara repetidamente y baja cuando está inactivo.
  • L (Normal): la salida cambia de alta a baja cuando se activa. El movimiento continuo da como resultado un pulso alto-bajo repetido.

El sensor en un detector de movimiento está en realidad dividido en dos mitades. La razón de esto es que para detectar el movimiento estamos buscando (modificar) no los niveles promedio de IR. Las dos mitades están conectadas de tal manera que se anulan entre sí. Si una mitad ve más o menos radiación IR que la otra, la salida oscilará a alto o bajo.

Los elementos de ajuste son los siguientes:

1- Selector de modo: nos permite cambiar entre el modo de funcionamiento continuo o el modo de repetición. En modo continuo, si el sensor detecta movimiento de manera continuada mantendrá una señal continua. En el modo de repetición, el sensor se activará al detectar movimiento y volverá luego a su estado normal, si vuelve a detectar movimiento se volverá a activar y completará otro ciclo, pero no funcionará de manera continua aunque detecte movimiento repetidas veces. El primer modo es ideal para usarlo como detector de movimiento que permita iluminar una zona, ya que se activará mientras detecte presencia.

Si tomamos como primer contacto el que se encuentra en la esquina del sensor, puenteando los contactos 2 y 3 se activa el modo continuo, y por el contrario haciéndolo con los contactos 1 y 1 se activa el modo de repetición. Siempre deberá activarse un modo u otro.

2- Ajuste de sensibilidad: aumenta o disminuye la sensibilidad del sensor, con ello podemos ajustar la distancia a la que se activará y/o la cantidad de movimiento necesario para activar el sensor (por ejemplo, para distinguir una persona de una mascota). Teniendo el sensor como en la imagen, el mínimo se encontrará en el lado izquierdo y el máximo en el derecho. Los potenciómetros se pueden ajustar con la ayuda de un destornillador.

3- Ajuste del temporizador: aumenta o disminuye el tiempo que se activará el sensor una vez detecte presencia, el rango va aproximadamente desde unos 3 segundos hasta unos 5 minutos. Si el sensor se encuentra en modo continuo, el tiempo de activación será como mínimo el ajustado, no existiendo máximo si el sensor detecta continuamente presencia mientras se encuentra activado.

Usted tiene a su alcance una gran variedad de artículos que hablan sobre los sensores de infrarrojos pasivos (PIR), en su mayoría utilizando un Arduino, un sensor PIR, un LED, un buzzer y un relé, con el que conectar (con este último) una alarma. Y se preguntará que necesidad tiene de leer este artículo, está bien, tendrá que perder un poco de su tiempo si lo quiere saber.

La idea del proyecto es crear una alarma lo más simple y pequeña posible, de modo que usted pueda ponerla en servicio en cualquier lugar sin llamar la atención, (lo que contribuirá a su camuflaje) para pasar desapercibida por cualquiera ajeno al lugar. Vayamos por partes.

Para detectar el movimiento se va ha utilizar un sensor de movimiento PIR y un programa para Arduino capaz de leer la señal del sensor y encender la luz durante unos segundos, en la versión más corta. La versión larga, consiste en algo más que lo descrito, ya que con las posibilidades que nos ofrecen los conocidos micros ESPXXXX en sus distintos modelos realizaremos un detector más avanzado, de modo que sigamos por este sendero.

Este sensor tiene dos modos de trabajo, disparo único y disparo repetido, veremos los dos tipos, como ya debe saber tiene un radio de acción que se puede ajustar mediante un trimer.

Un circuito muy sencillo capaz de servir en muchos casos, puede verse en la figura 2, el cual se sirve de un par de transistores NPN y un relé además de los componentes necesarios para su normal funcionamiento. Pero nosotros queremos algo más sofisticado ciertamente.

Fig. 2  Esquema.

Por lo tanto, para detectar el movimiento utilizando un sensor de movimiento PIR y un programa para Arduino capaz de leer la señal del sensor y a su vez encender la luz durante un tiempo, en la versión más corta. La versión larga, consiste en algo más que lo descrito, ya que aprovecharemos las posibilidades que nos ofrecen los conocidos micros ESP8266 en sus distintos modelos como veremos en otro momento, de modo que, sigamos.

Estos son los componentes que vamos a utilizar en este artículo y siguientes.


Fig. 3 Componentes.

Para entrar en materia, la idea es desarrollar la alarma mediante Arduino y si alguien quiere puede utilizar un pequeño micro como puede ser un ATtiny85, aunque también se puede utilizar un ESP8266-01 que será más interesante, es muy económico, y se puede conectar vía WI-FI, pero eso ya se verá.

CIRCUITO INICIAL.

Vamos a presentar el circuito inicial del que sacaremos conclusiones dependiendo de los resultados obtenidos y las experiencias adquiridas.

Fig. 4 Circuito.

El esquema como se aprecia es muy sencillo, en el que se ve el sensor PIR, un Arduino y un relé de salida para activar algún objeto como una luz o sirena y un diodo LED, los pines utilizados no son relevantes. Pondremos varios bocetos por el momento uno que no sea nada complicado, eso lo veremos a continuación.

PRIMER BOCETO.

Debo decir que este sensor PIR, según los datos del fabricante, requiere un tiempo para estabilizar su normal funcionamiento, por dicho motivo el boceto para activar el sensor PIR hace una pausa en su ‘arranque’ inicio.

El siguiente es un boceto sencillo y al mismo tiempo eficaz. Detecta y avisa de cualquier movimiento en su campo de acción.

Sensor de movimiento PIR.

Este boceto funciona bien, aunque es muy simple y rudimentario sin duda que a alguien le puede ser de interés, pues cumple con la parte de detectar cualquier movimiento y activa el relé de alerta. No obstante, queremos un sistema que sea más completo, capaz de calibrarse, además de detectar cualquier movimiento en su radio de acción.

SEGUNDO BOCETO.

En este segundo boceto hemos tenido en cuenta los tiempos de calibración según recomienda el fabricante y le hemos dispuesto un LED de aviso de funcionamiento y que se ejecute nuevamente después de que una nueva secuencia de movimiento se haya detectado.

Sensor de movimiento.

El resultado de este boceto, se muestra en este corto vídeo en el que se aprecia cuando se activa el LED del pin 13.


Fig. 5 Vídeo.

 Como se aprecia en el vídeo anterior, un movimiento delante del sensor, produce una activación de la salida y si la salida está activa, el tiempo de activación se alarga la salida activa por un nuevo periodo de tiempo, no se considera una nueva detección. Se considera nueva detección después de una transición a BAJO, es decir, mientras los pulsos de detección se produzcan en el estado alto de Tx, se alarga el estado alto, sólo después de una transición a bajo Ti, entonces se activa un nuevo Tx, ver la imagen de tiempos.

Fig. 6 Tiempos y señales.

Demos un paso más, hasta aquí como ejemplo parece correcto y ya es hora de pensar en realizar un boceto que nos alerte de cualquier movimiento, por ejemplo en nuestra casa y que lo haga mediante una alarma “silenciosa”, es decir, una señal personalizada, como un e-mail que puede alertarnos y así, si lo consideramos avisemos a la policía.

Para realizar un sistema con estas características, aprovechamos las posibilidades que nos ofrece el Internet de las cosas, simplemente  necesitamos un nodeMCU ESP-12, es cierto que podríamos usar un ESP8266-01, sin embargo, éste sólo dispone de 2 pines GPIO y en miras a una eventual ampliación de funciones, es el motivo por el que me he decidido por el nodeMCU.

En otro artículo tratare la versión con un NodeMCU y el envío de una e-mail.

Nota. Al utilizar un NodeMCU que trabaja a 3’3V, la conexión del PIR directamente al NodeMCU no es aconsejable, aunque puede funcionar. Los pines de entrada tienen protección contra sobretensión, no obstante, recuerde que también debería limitar la corriente (al menos debe añadir una resistencia de 100 ó 200Ω en serie con la salida PIR. Sin esta resistencia, su circuito funcionará al principio, pero se podría “freir”. Un circuito electrónico varía mucho y a veces un chip puede trabajar y otro no.

Por lo tanto, trabajará mejor dentro de la gama de parámetros nominales y no cerca del máximo. De modo que lo mejor es utilizar un adaptador de tensión.

Actualizado en 2020. Esto es todo, por este simple tutorial. Si tiene alguna pregunta hágala trataré de responder en breve.

49 comentarios sobre «Sensor HC-SR501 con Arduino.»

    1. Hola Dagoberto.
      Puedes conectar (ligar), varios sensores SR501, fíjate que sólo requiere un puerto o pin digital, de modo que al Arduino tal cual, puedes conectar tantos como puertos digitales dispone, naturalmente alguno tendrás que usar para otros eventos (pulsadores, salidas, etc.) por eso queda reducido el número de sensores. Claro que si necesitaras una cantidad mayor puedes aprovechar el I2C-bus que por cada circuito PCF8574 dispones de 8 puertos añadidos.
      Espero haber dado respuesta a tu consulta.
      Saludos.

  1. Buenas tardes, tenes idea si en vez de conectar un sensor pir, puedo hacer llegar al arduino 5v de una alarma y funcionaria de la misma manera?
    Osea la alarma es de 12v coloco un regulador para bajarlo a 5v, y luego cuando el arduino detecte 5v (seria la salida de la sirena de la alarma) que haga algo. Esos 5v que me entrega la alarma cuando suena la sirena, serian lo mismo que me entrega el sensor PIR cuando detecta movimiento?.
    Gracias y disculpa la ignorancia, estoy aprendiendo.

    1. Hola Lucas.
      En absoluto. No puedes hacer lo que indicas, por muchas razones.
      1) La tensión de salida de 12V que indicas, si no tienes otra opción (yo creo que sí), no te sirve poner un regulador (que entiendes por regulador?), lo que propones es una barbaridad, en el mejor de los casos tendrías una tensión regulada de 5V y dime para que quieres esa tensión siempre a 5V?
      2) A las entradas del Arduino no puedes meterle una tensión de 5V sin más. La corriente que admite es muy baja y esa es una forma de destruir un dispositivo.
      Consulta tus notas de estudio y repasa la teoría. No cabe duda que estás aprendiendo, sigue lo que te marcan los libros, ya tendrás tiempo de investigar otros caminos, no seas impaciente.

      Saludos.

  2. Buenas noches. Felicitaciones por el articulo,es muy interesante y explicativo. Yo quisiera saber como puedo incrementar su rango de accion a mas metros de los ya especificados. De antemano muchas gracias

  3. Hola David Pérez.

    Como se describe en el artículo, se trata de un detector pasivo, es decir, no emite nada, tan solo detecta infrarrojos, sinembargo, se anteponen una lente de fresnel que mejoran su angulo de detección.

    Respecto a mejorar o aumentar la distancia, creo que con este tipo de detector no es posible por su constitución, estos detectores o sensores estan pensados para la industria.

    En definitiva, piensa que este sensor en concreto puede funcionar directamente con una alimentación desde los 5V a los 20V que activa con la presencia de un movimiento dentro de su rango de acción, un relé sin necesidad de un micro. Aplicar un Arduino o micro similar, hace podamos manejar los tiempos y el control de la emisión (esta emisión), se refiere a la ventana de la señal recibida y el supuesto último movimiento, antes de considerar un nuevo movimiento.

    No se si me he explicado bien. Tal vez puedas mejorar unos pocos centimetros el rango.

    Saludos

  4. Quiero realizar un salón automatizado, que funcione con un sensor pri y con un sensor de temperatura, tengo ya el código, la idea es que cuando sienta movimiento se encienda y dure encendido mientras haya movimiento, una vez no haya movimiento se apague, pero el problema lo tengo con que siempre me detecta movimiento, así no haya nada en frente y los leds no se apagan, el de temperatura me funciona muy bien

    1. Hola Juan.
      Disculpa el retraso en la respuesta.
      Para que realice la función de estar activo mientras haya movimiento, prueba a reducir al mínimo el tiempo de espera a la detección, de esa forma, mientras haya movimiento se estará reactivando y cuando no lo haya se detendrá. No lo he probado, pero la lógica me dice que puede funcionar. Es cuestión de probarlo.

      Saludos

    1. Hola Victor.
      Puedes encontrar algún código en la red que te de la distancia de un objeto hasta el sensor, pero considero que este tipo de sensor al ser pasivo, no te dará mucha exactitud. Piensa que detecta movimiento y no emite nungún haz de luz o señal de ningún tipo, sólo recibe la señal del objeto que se desplaza.
      No obstante hay códigos en la red que te pueden ayudar al cálculo por comparación.

      Saludos.

  5. Hola, quisiera que en lugar de encender una alarma, encediera un ventilador en una habitación cuando detecta la presencia de personas ¿ sería identico el conexionado y código, cierto?

  6. Hola Señor buenos días. Marcelo desde Argentina. Excelente Tutorial. Es placentero leer y escuchar a Personas que realmente «Saben» y son «Didacticas» y «Precisas» para explicar. Muchas gracias, me ha sido de utilidad. Dios lo bendiga. Saludos

  7. Buenos dias.

    Estoy tratando de desarrollar un proyecto que implica que si un sensor detecta la presencia de movimiento, una luz UV se apague. El funcionamiento en este caso no seria de activacion sino de proteccion.
    Una vez detectado el ultimo movimiento, pasado un lapso de tiempo, la luz UV deberia activarse durante 30 segundos. Si en ese lapso de tiempo detectara movimiento, esa secuencia debe interrumpirse inmediatamente para reiniciar el ciclo una vez detectado el ultimo movimiento.
    Crees que este sensor pueda cubrir esas expectativas?

    Saludos.

      1. Hola Vicente, excelente día y muy buena la información que publicas para los que vamos comenzando, me encuentro realizndo un proyecto de Domótica en el que integré un sensor PIR, el único detalle es que el sensor funcionaba bien dentro de un sketch de arduino (solo) y al momento en que lo integre a la programacion final del proyecto ya no hace su funcion, empieza a detectar y luego ya no calla y asi se queda por siempre. el codigo que usaste en tu proyecto no me funciona, tendrás idea de lo que se puede hacer. de antmano Gracias.
        Saludos Cordiales…

        1. Hola Alan Granados Moreno
          Por lo que me dices más parece que se trata de la integración en tu programa. Para salir de dudas deberías de comprobar por partes cada subrutina y asegurarte que ninguna entra en un bucle, lo que explica el problema que describes.
          No veo otra posibilidad con los datos que me presentas.

          Saludos.

  8. Hola Vicente, muchas gracias por su información, en estos días he estado realizando una practica con el sensor de movimiento, y he notado que no detecta el movimiento muy cerca al sensor, entonces la pregunta es, qué rango de detección tienen este tipo de sensores, porque usted hace relación que detecta entre 3 a 7 metros, pero en el video realiza un acercamiento con el dedo y deduce que lo detecta, y por otra parte me parece muy importante lo que recomienda de la resistencia en serie con el PIR, porque creo que a mi se me dañaron los sensores, realizando pruebas y no se qué influencia tenga que ver el relé, con los saltos mecánicos constantes al prender y apagar el foco.

    1. Hola Fernando Bautista.
      Creo que tu problema es debido a una regulación inadecuada, procura configurar el detector con cuidado y sin obstáculos que se muevan mientras ajustas los potenciómetros, es algo delicado encontrar el punto de ajuste.
      En cuanto a que no detecte obstáculos a corta distancia es raro en sí. Revisa soldaduras y cableado y por supuesto procura ajustar con cuidado los potenciómetros.

      Saludos.

  9. Hola Vicente , gracias por la atención. Intento conectar un PIR que esta a unos 9 metros del Arduino, el problema es que me envía a la entrada de Arduino falsos movimientos, es decir envía un alto o 3.8volts sin que exista movimiento en el PIR. Si el PIR lo instalo a 15cm de Arduino funciona bien, estoy utilizando un cable tipo telefónico de 4 hilos, 2 para hacer llegar 12 VCC al PIR, uno para la señal del PIR, el que queda libre lo conecte a GND, probé con cable UTP, probé con una resistencia de 10k entre con GND y el cable que trae la señal del PIR y el problema continua, el PIR se dispara o al menos recibo
    un alto aleatoriamente en la entrada de Arduino, probé como entrada los pines analógicos y los digitales. Cual puede ser el problema? el cableado? la distancia? muchas gracias

    1. Hola Sergio.
      Por lo que me indicas, el problema es debido a la distancia sin lugar a dudas, los cables paralelos no son adecuados.
      Prueba a utilizar cable apantallado como el de un micrófono, de manera que la malla no deje que las interferencias le afecten.

      Espero que soluciones el problema.

      Saludos y cuídate.

  10. Hola en seguido esta página y realmente es muy instructiva e interesante, quisiera encontrar una biblioteca para el uso de un sensor que sea capaz de encender una luz LED al pasar cerca de ella y posteriormente que pase se apaga. Saludos

    1. Hola Roberto Triana.
      Lo que tu necesitas es una fotocélula y un operacional o un amplificador a transistores que reaccionen en el momento que se obstruya la luz que le llega a la fotocélula.
      En la red encontrarás una gran cantidad de ejemplos, desde los más sencillos a los más sofisticados.

      Saludos y cuídate.

    1. Hola Fernanda Sierra.
      Este error no lo he visto nunca, sin embargo, parece un problema del código.
      Revisa en el código los signos raros que aparecen y asegúrate de que están
      bien. No veo otra explicación. Prueba con otro código de la red para asegurarte
      que es lo que ocurre.

      Saludos y cuídate.

  11. Buenas, adno tratando de subir el codigo a un ESP32 y me da el error
    * ‘long unsigned int pause’ redeclared as different kind of symbol *
    sobre la linea
    * long unsigned int pause = 5000; *

    He estado buscando al respecto y no consigo mucho, tendra idea? Gracias.

    1. Hola Miguel.
      Disculpa pero ese error parece indicar que has re-declarado una variable sin signo del tipo int
      Deberías revisar las variables y si tienen longitud con signo o no.
      Me parece que has declarado long unsigned int pause = 5000; y puede que ahí esté el problema.
      No lo he probado por falta de tiempo, disculpa.

      Saludos y cuídate.

  12. Hola, disculpe utilicé el primer código que puso. Pero lo que pasa es que quisiera que encendiera y apagara cuando detecte movimiento y en mi caso dura mas tiempo encendido, será que es porque esta muy sensible el sensor o es que debo modificar en algo el código?
    Muchas gracias por aportar con su conocimiento 🙂

  13. Hola Geraldine.
    Supongo que cuando dices que dura demasiado, recuerda lo que se dice al principio «El retardo se puede configurar entre 5 y 300 segundos mientras que el potenciómetro de sensibilidad ajusta el rango de detección de aproximadamente 3 metros a 7 metros.»
    Normalmente, si no estás ejercitado, hacer un ajuste de los parámetros de tiempo y distancia, puede llevarte un buen periodo de tiempo, al principio debes ajustar el tiempo, digamos que a groso modo, luego lo vas ajustando más fino, trata de ajustar la distancia también y vuelve a ajustar el tiempo. De esta forma puedes llegar a lograr tu objetivo. El motivo principal es debido a los ajustes internos (quiero decir, los inherentes a la placa que lleva adjunta), Fijate en el puente al que se hace referencia en el artículo figura 1.
    Espero haberte ayudado.

    Saludos y cuidate.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.