Arduino UNO R4 - Sensor de Movimiento

Este tutorial te enseña cómo usar el sensor de movimiento HC-SR501 y el Arduino UNO R4 para detectar a una persona. En detalle, aprenderemos:

sensor de movimiento para Arduino UNO R4

Acerca del sensor de movimiento HC-SR501

Sensor de movimiento HC-SR501

El sensor PIR HC-SR501 detecta movimiento humano o animal. Se utiliza comúnmente en diversas aplicaciones, como encender y apagar las luces, abrir y cerrar puertas, operar escaleras mecánicas y detectar intrusos.

Cuando vayas a lugares donde las puertas se abren y cierran solas, donde las luces se encienden y apagan automáticamente, o donde las escaleras mecánicas se ponen en marcha solas, ¿te has preguntado alguna vez cómo sucede esto? Si es así, esta guía no solo explicará cómo funciona, sino que también te mostrará cómo crearlo tú mismo. ¡Comencemos!

Disposición de pines

El sensor de movimiento HC-SR501 viene con tres pines:

  • Pin GND: conecta a GND (0V)
  • Pin VCC: conecta a VCC (5V)
  • Pin OUTPUT: envía un nivel bajo cuando no hay movimiento, un nivel alto cuando hay movimiento. Conecta este pin al pin de entrada del Arduino UNN R4.

El HC-SR501 incluye un puente y dos potenciómetros, que ayudan a ajustar la configuración del sensor. Comienza con la configuración por defecto. Puedes encontrar más información en la sección Usos avanzados.

Pinout del sensor de movimiento HC-SR501

Cómo funciona

El sensor HC-SR501 detecta movimiento al notar cambios en la luz infrarroja procedente del objeto que se mueve. Para que el sensor HC-SR501 detecte un objeto, debe cumplir dos condiciones:

  • Está temblando o moviéndose
  • Está emitiendo energía infrarroja.

Por lo tanto:

  • Si un objeto se mueve sin emitir rayos infrarrojos (como un robot o un coche de juguete), el sensor no lo detectará.
  • Si un objeto emite rayos infrarrojos pero no se mueve (como una persona que permanece inmóvil), el sensor no lo detectará.

Los humanos y los animales emiten infrarrojos de forma natural. Por ello, el sensor puede detectar cuándo se mueven.

El estado del pin de salida:

  • Si no hay ninguna persona ni animal moviéndose dentro del alcance del sensor, el pin de salida del sensor está en nivel bajo.
  • Si una persona o un animal entra en el alcance del sensor, el pin de salida pasa de nivel bajo a nivel alto, indicando detección de movimiento.
  • Si una persona o un animal sale del alcance del sensor, el pin de salida pasa de nivel alto a nivel bajo, indicando el fin del movimiento.

El video muestra la idea básica de cómo funciona el sensor de movimiento. En situaciones reales, la forma en que funciona puede variar ligeramente según su configuración, tal como se explica en la sección de Usos Avanzados.

Arduino UNO R4 - Sensor de Movimiento HC-SR501

Cuando configuras un pin del Arduino UNO R4 como entrada digital, puede detectar si el elemento conectado está en un estado bajo o alto.

Conecta el pin del Arduino UNO R4 al pin de salida del sensor HC-SR501. Luego, utiliza el código del Arduino UNO R4 para leer el valor del pin de salida y detectar movimiento.

Diagrama de Cableado

Diagrama de cableado del sensor de movimiento para Arduino UNO R4

This image is created using Fritzing. Click to enlarge image

Ver La mejor forma de alimentar Arduino Uno R4 y otros componentes.

Configuración inicial

Time Delay AdjusterScrew it in anti-clockwise direction fully.
Detection Range AdjusterScrew it in clockwise direction fully.
Repeat Trigger SelectorPut jumper as shown on the image.
configuración inicial del sensor de movimiento de Arduino

Cómo programar para un sensor de movimiento

  • Configura un pin del Arduino UNO R4 en modo de entrada digital usando la función pinMode().
pinMode(SENSOR_PIN, INPUT);
  • Utilice la función digitalRead() para comprobar el estado del pin de salida del sensor.
motion_state = digitalRead(SENSOR_PIN);
  • Detectar cuándo comienza el movimiento (el pin cambia de estado de LOW a HIGH).
prev_motion_state = motion_state; // Store the previous state of the pin motion_state = digitalRead(SENSOR_PIN); // Read the current state of the pin if (prev_motion_state == LOW && motion_state == HIGH) { // Check for transition from LOW to HIGH Serial.println("Motion detected!"); }
  • Detectar cuándo se detiene el movimiento (el estado del pin cambia de alto a bajo).
prev_motion_state = motion_state; // Preserve the previous state of the pin motion_state = digitalRead(SENSOR_PIN); // Update the current state from sensor input if (prev_motion_state == HIGH && motion_state == LOW) { // Detect transition from HIGH to LOW Serial.println("Motion stopped!"); // Output message when motion stops }

Código de Arduino UNO R4

/* * Este código de Arduino UNO R4 fue desarrollado por es.newbiely.com * Este código de Arduino UNO R4 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-motion-sensor */ #define SENSOR_PIN 2 // The Arduino UNO R4 connected to the output pin of the motion sensor int motion_state = LOW; // Initialize current pin state to LOW int prev_motion_state = LOW; // Initialize previous pin state to LOW void setup() { Serial.begin(9600); // Start serial communication at 9600 baud rate pinMode(SENSOR_PIN, INPUT); // Configure pin 2 as an input for the sensor } void loop() { prev_motion_state = motion_state; // Assign the current pin state to the previous pin state for comparison motion_state = digitalRead(SENSOR_PIN); // Read the current state from the sensor output // Check for transition from LOW to HIGH which indicates motion detected if (prev_motion_state == LOW && motion_state == HIGH) { Serial.println("Motion detected!"); // Print message when motion is detected // Optional: Additional actions when motion is detected } // Check for transition from HIGH to LOW which indicates motion has stopped else if (prev_motion_state == HIGH && motion_state == LOW) { Serial.println("Motion stopped!"); // Print message when motion has stopped // Optional: Additional actions when motion stops } }

Pasos R\u00e1pidos

Siga estas instrucciones paso a paso:

  • Si es la primera vez que usas Arduino Uno R4 WiFi/Minima, consulta el tutorial sobre configurar el entorno para Arduino Uno R4 WiFi/Minima en el IDE de Arduino.
  • Conecta los componentes según el diagrama proporcionado.
  • Conecta la placa Arduino Uno R4 a tu computadora mediante un cable USB.
  • Inicia la IDE de Arduino en tu computadora.
  • Selecciona la placa adecuada Arduino Uno R4 (p. ej., Arduino Uno R4 WiFi) y el puerto COM.
  • Copia el código anterior y ábrelo usando el IDE de Arduino
  • Presiona el Subir botón en la IDE de Arduino para cargar el código a Arduino UNO R4
  • Abre el Monitor Serial
  • Mueve tu mano frente al sensor
  • Verifica la salida en el Monitor Serial
COM6
Send
Motion detected! Motion stopped!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

Usos avanzados

Esta sección se dedica al conocimiento profundo. NO se preocupe si no lo entiende. Omita esta sección si lo abruma y vuelva otro día. Continúe leyendo con las siguientes secciones.

Podemos ajustar la configuración del sensor utilizando un puente y dos potenciómetros, como se describe arriba.

Ajuste del rango de detección

Este potenciómetro ajusta la distancia de detección (aproximadamente entre 3 y 7 metros).

  • Cuando esté completamente girado en sentido horario, el alcance de detección es de aproximadamente 3 metros.
  • Cuando esté completamente girado en sentido antihorario, el alcance de detección es de aproximadamente 7 metros.
Rango de detección del sensor de movimiento

Podemos cambiar la configuración del potenciómetro para obtener el rango que queremos, entre 3 y 7 metros.

Ajustador de retardo de tiempo

Este potenciómetro ajusta el retardo.

  • Si lo giras todo en sentido horario, el retraso será de aproximadamente 5 minutos.
  • Si lo giras todo en sentido antihorario, el retraso será de aproximadamente 3 segundos.

A continuación, explicaremos qué significa el retraso temporal y cómo se relaciona con Repeat Trigger.

Ajustar el retardo de tiempo del sensor de movimiento

Selector de disparadores de repetición

Este puente le permite seleccionar un modo de disparo: disparo único o disparo repetible.

Selección de disparador del sensor de movimiento

Nos referiremos a la configuración de retardo (ajustada por el ajustador de retardo) como time_delay. Imagina que sigues moviéndote dentro del área de detección del sensor durante un período considerable, al que llamaremos motion_time (mucho más largo que time_delay).

  • En modo de disparo único, el pin de salida alterna entre BAJO y ALTO varias veces. Permanece ALTO durante un período igual a "time_delay" y BAJO durante un tiempo fijo de 3 segundos.
modo de activación único del sensor de movimiento
  • El pin de salida se mantiene en ALTO durante la duración del tiempo de movimiento más el tiempo de retardo.
modo de disparo repetible del sensor de movimiento

Pruebas

Probemos los modos de disparo. Gira el ajustador de retardo completamente hacia la izquierda para establecer el tiempo de retardo en 3 segundos.

  • Modo de disparo único:
    • Coloca el puente para seleccionar el modo de disparo único.
    • Mueve la mano frente al sensor de forma continua durante 10 segundos.
    • Quita la mano del alcance del sensor.
    • Espera 3 segundos; luego verifica el monitor serial para la salida tal como se muestra.
    COM6
    Send
    Motion detected! Motion stopped! Motion detected! Motion stopped! Motion detected! Motion stopped!
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
    • Modo de disparo repetible:
      • Coloque el puente para activar el modo de disparo repetible.
      • Mantenga la mano frente al sensor de forma continua durante unos 10 segundos.
      • Quite la mano del alcance del sensor.
      • Después de esperar 3 segundos, verifique el monitor serie para ver la salida.
      COM6
      Send
      Motion detected! Motion stopped!
      Autoscroll Show timestamp
      Clear output
      9600 baud  
      Newline  

      En el modo de disparo único, el sensor se activa dos o tres veces. En el modo de disparo repetible, el sensor se activa solo una vez.

      ※ Nota:

      Durante el periodo LOW, que dura 3 segundos, el sensor no puede detectar ningún movimiento. Esto significa que el sensor está inactivo durante este tiempo, pero por lo general no suele causar ningún problema.

      Se recomienda usar el modo de disparo repetible.

      En aplicaciones prácticas:

      • Los dispositivos o máquinas suelen encenderse cuando se detecta a una persona cercana.
      • Los dispositivos o máquinas no se apagan tan pronto como la persona se va. Se apagan después de un cierto retardo.

Referencias de funciones

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!