Arduino Nano ESP32 - Sensor de movimiento

Este tutorial proporciona instrucciones sobre cómo usar Arduino Nano ESP32 con el sensor de movimiento HC-SR501. En detalle, aprenderemos:

Hardware Requerido

1×Arduino Nano ESP32
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×Sensor de Movimiento HC-SR501
1×Protoboard
1×Cables Puente
1×(Opcional) Conector de Alimentación DC
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para Arduino Nano
1×(Recomendado) Placa de Expansión Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentación para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca del sensor de movimiento HC-SR501

Sensor de movimiento HC-SR501

El sensor PIR HC-SR501 es un sensor que puede detectar el movimiento de personas (o de animales). Se utiliza ampliamente para detectar la presencia de personas en muchas aplicaciones (encender/apagar automáticamente la bombilla, activar/desactivar la escalera mecánica, detectar a un intruso, abrir/cerrar la puerta...)

Disposición de pines del sensor de movimiento HC-SR501

El sensor de movimiento HC-SR501 tiene 3 pines:

  • Pin VCC: conecta este pin a VCC (5V)
  • Pin GND: conecta este pin a GND (0V)
  • Pin OUTPUT: conecta este pin a la entrada del ESP32. Este pin emite la señal correspondiente a la detección de movimiento:
    • BAJO si no se detecta movimiento
    • ALTO si se detecta movimiento.

    También hay dos potenciómetros y un jumper en el sensor de movimiento HC-SR501. Estos potenciómetros y el jumper se utilizan para ajustar la configuración del sensor. Las instrucciones detalladas se describen en los Usos avanzados.

    Pinout del sensor de movimiento HC-SR501

    Cómo funciona el sensor de movimiento HC-SR501

    El principio de funcionamiento del sensor HC-SR501 se basa en el cambio de la radiación infrarroja sobre el objeto en movimiento. Para ser detectado por el sensor HC-SR501, el objeto debe cumplir dos requisitos:

    • El objeto está emitiendo radiación infrarroja.
    • El objeto se está moviendo o temblando.

    Así:

    • Si un objeto está emitiendo la radiación infrarroja pero NO se está moviendo (p. ej., una persona que permanece inmóvil), NO es detectado por el sensor.
    • Si un objeto se está moviendo pero NO emite la radiación infrarroja (p. ej., un robot o un vehículo), NO es detectado por el sensor.

    Los animales y los humanos emiten radiación infrarroja de forma natural. Por lo tanto, los animales y los humanos pueden ser detectados por el sensor HC-SR501 si se están moviendo.

    El video anterior muestra el principio de funcionamiento del sensor de movimiento. En la práctica, el sensor de movimiento puede funcionar de manera diferente según la configuración del sensor (descrita en la sección Usos Avanzados).

    Detección de la presencia humana

    El propio sensor NO detecta directamente la presencia de humanos; el sensor solo detecta el movimiento. Y luego la presencia de humanos se infiere a partir de la detección del movimiento:

    • Si se detecta el movimiento, los humanos están presentes
    • Si no se detecta el movimiento, los humanos no están presentes

    Hay un problema con esta regla en la práctica: los humanos están dentro del alcance del sensor pero no se están moviendo. El movimiento no se detecta. El Arduino Nano ESP32 (o MCU) deduce que no hay un humano presente.

    Sin embargo, los sensores se utilizan ampliamente para detectar a las personas en muchas aplicaciones porque este problema no es grave y el precio de los sensores es barato.

    Arduino Nano ESP32 y Sensor de Movimiento HC-SR501

    Cuando un pin del ESP32 se configura como entrada digital, puede leer el estado (bajo o alto) de cualquier cosa a la que esté conectado.

    Conectando el pin del ESP32 al pin de salida del sensor HC-SR501, podemos usar el código Arduino Nano ESP32 para leer el valor del pin de salida y, así, inferir el movimiento.

Diagrama de cableado entre el sensor de movimiento HC-SR501 y Arduino Nano ESP32

  • El diagrama de cableado al alimentar la placa Arduino Nano ESP32 a través del puerto USB.
Diagrama de cableado del sensor de movimiento para Arduino Nano ESP32

This image is created using Fritzing. Click to enlarge image

  • El diagrama de cableado cuando se alimenta la placa Arduino Nano ESP32 a través del pin Vin.
Esquema de cableado del sensor de movimiento para Arduino Nano ESP32 con fuente de alimentación externa

This image is created using Fritzing. Click to enlarge image

Configuración inicial

Detection Range Adjuster Fully screw it in the clockwise direction.
Time Delay Adjuster Fully screw it in the anti-clockwise direction.
Repeat Trigger Selector Put jumper like the below image.
Configuración inicial del sensor de movimiento para Arduino Nano ESP32

Cómo programar un sensor de movimiento

  • Configura el pin de un ESP32 en modo de entrada digital utilizando la función pinMode()
pinMode(PIN_TO_SENSOR, INPUT);
  • Lee el estado del pin de salida del sensor utilizando la función digitalRead().
motion_state = digitalRead(PIN_TO_SENSOR);
  • Detectar el inicio del movimiento (cambio de estado del pin de bajo a alto)
prev_motion_state = motion_state; // store old state motion_state = digitalRead(PIN_TO_SENSOR); // read new state if (prev_motion_state == LOW && motion_state == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); }
  • Detectar la detención del movimiento (cambio de estado del pin de ALTO a BAJO)
prev_motion_state = motion_state; // store old state motion_state = digitalRead(PIN_TO_SENSOR); // read new state if (prev_motion_state == HIGH && motion_state == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!"); }

Código de Arduino Nano ESP32

/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-motion-sensor */ #define PIN_TO_SENSOR D2 // The Arduino Nano ESP32 pin connected to OUTPUT pin of sensor int motion_state = LOW; // current state of pin int prev_motion_state = LOW; // previous state of pin void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(PIN_TO_SENSOR, INPUT); // set Arduino Nano ESP32 pin to input mode to read value from OUTPUT pin of sensor } void loop() { prev_motion_state = motion_state; // store old state motion_state = digitalRead(PIN_TO_SENSOR); // read new state if (prev_motion_state == LOW && motion_state == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); // TODO: turn on alarm, light or activate a device ... here } else if (prev_motion_state == HIGH && motion_state == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!"); // TODO: turn off alarm, light or deactivate a device ... here } }

Pasos R\u00e1pidos

Cómo abrir el monitor serie en el IDE de Arduino
  • Mueve tu mano delante del rango del sensor
  • Ver 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.

Referencias de idioma

Tutoriales Relacionados

※ 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!