ESP32 - Sensor de Movimiento

Este tutorial explica cómo usar ESP32 con el sensor de movimiento HC-SR501. En detalle, aprenderemos:

Hardware Requerido

1×Módulo de Desarrollo ESP32 ESP-WROOM-32
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 ESP32
1×(Recomendado) Breakout Expansion Board for ESP32
1×(Recomendado) Divisor de Alimentación para ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
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 las personas (o de los 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...)

Pinout 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 de salida: conecta este pin al pin de entrada del ESP32. Esta salida genera 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 la 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 en 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 el rayo infrarrojo pero NO se mueve (por ejemplo, una persona permanece inmóvil sin moverse), no es detectado por el sensor.
    • Si un objeto se está moviendo pero NO emite el rayo infrarrojo (por ejemplo, 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 personas, el sensor solo detecta el movimiento. Y entonces la presencia de personas se infiere a partir de la detección del movimiento:

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

    Hay un problema con esta regla en la práctica, los humanos están en el alcance del sensor pero NO se están moviendo. El movimiento NO se detecta. El ESP32 (o MCU) deduce que el humano NO está presente.

    Sin embargo, el sensor se utiliza ampliamente para detectar al ser humano en muchas aplicaciones porque este problema no es grave y el precio del sensor es barato.

    ESP32 y HC-SR501 Sensor de Movimiento

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

    Al conectar el pin del ESP32 al pin de salida del sensor HC-SR501, podemos usar el código del ESP32 para leer el valor del pin de salida y luego inferir el movimiento.

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

  • Cómo conectar ESP32 y sensor de movimiento usando placa de pruebas (alimentada mediante un cable USB)
Diagrama de cableado del sensor de movimiento ESP32

This image is created using Fritzing. Click to enlarge image

Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.

  • Cómo conectar ESP32 y sensor de movimiento usando placa de pruebas (alimentado a través del pin Vin)
Diagrama de cableado del sensor de movimiento ESP32

This image is created using Fritzing. Click to enlarge image

Cómo conectar ESP32 y sensor de movimiento
Cómo cablear el ESP32 y un sensor de movimiento

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 ESP32

Cómo programar el 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 usando la función digitalRead().
pinStateCurrent = digitalRead(PIN_TO_SENSOR);
  • Detectar el inicio del movimiento (cambio de estado del pin de BAJO a ALTO)
pinStatePrevious = pinStateCurrent; // store old state pinStateCurrent = digitalRead(PIN_TO_SENSOR); // read new state if (pinStatePrevious == LOW && pinStateCurrent == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); }
  • Detección de la detención del movimiento (cambio de estado del pin de ALTO a BAJO)
pinStatePrevious = pinStateCurrent; // store old state pinStateCurrent = digitalRead(PIN_TO_SENSOR); // read new state if (pinStatePrevious == HIGH && pinStateCurrent == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!"); }

Código ESP32

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

Pasos R\u00e1pidos

  • Si es la primera vez que usas ESP32, consulta cómo configurar el entorno para ESP32 en Arduino IDE.
  • Copia el código anterior y pégalo en el IDE de Arduino.
  • Compila y carga el código en la placa ESP32 haciendo clic en el botón Subir en el IDE de Arduino
  • Abre el Monitor Serial en el IDE de Arduino
Cómo abrir el monitor serial en el IDE de Arduino
  • Mueve tu mano frente al rango del sensor
  • Mira 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

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