ESP32 - Capteur de mouvement

Ce tutoriel vous explique comment utiliser l'ESP32 avec le capteur de mouvement HC-SR501. En détail, nous allons apprendre :

Préparation du matériel

1×ESP-WROOM-32 Dev Module
1×USB Cable Type-C
1×HC-SR501 Motion Sensor
1×Breadboard
1×Jumper Wires
1×(Optional) DC Power Jack
1×(Recommended) ESP32 Screw Terminal Adapter

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du capteur de mouvement HC-SR501

Capteur de mouvement HC-SR501

Le capteur HC-SR501 PIR est un capteur capable de détecter le mouvement des humains (ou des animaux). Il est largement utilisé pour détecter la présence humaine dans de nombreuses applications (allumage/extinction automatique de l'ampoule, activation/désactivation de l'escalier mécanique, détection d'un intrus, ouverture/fermeture de la porte...)

Brochage du capteur de mouvement HC-SR501

Le capteur de mouvement HC-SR501 possède 3 broches :

  • Broche VCC : connectez cette broche à VCC (5V)
  • Broche GND : connectez cette broche à GND (0V)
  • Broche de SORTIE : connectez cette broche à la broche d'entrée de l'ESP32. Cette broche émet le signal correspondant à la détection de mouvement :
    • BAS si aucun mouvement n'est détecté
    • HAUT si un mouvement est détecté.

    Il y a aussi deux potentiomètres et un cavalier sur le capteur de mouvement HC-SR501. Ces potentiomètres et ce cavalier sont utilisés pour ajuster les réglages du capteur. L'instruction détaillée est décrite dans les Usages Avancés.

    Détails des broches du capteur de mouvement HC-SR501

    Fonctionnement du capteur de mouvement HC-SR501

    Le principe de fonctionnement du capteur HC-SR501 repose sur le changement du rayonnement infrarouge sur l'objet en mouvement. Pour être détecté par le capteur HC-SR501, l'objet doit répondre à deux exigences :

    • L'objet émet de l'infrarouge.
    • L'objet est en mouvement ou tremble.

    Alors :

    • Si un objet émet un rayon infrarouge mais ne bouge pas (par exemple, une personne reste immobile sans bouger), il n'est pas détecté par le capteur.
    • Si un objet bouge mais n'émet pas de rayon infrarouge (par exemple, un robot ou un véhicule), il n'est pas détecté par le capteur.

    Les animaux et les humains émettent naturellement des rayons infrarouges. Par conséquent, ils peuvent être détectés par le capteur HC-SR501 s'ils sont en mouvement.

    La vidéo ci-dessus montre le principe de fonctionnement du capteur de mouvement. En pratique, le capteur de mouvement peut fonctionner différemment selon le réglage du capteur (décrit dans la section Usages Avancés).

    Détection de la présence humaine

    Le capteur lui-même NE détecte PAS directement la présence humaine, le capteur détecte simplement le mouvement. Et ensuite, la présence humaine est déduite sur la détection de mouvement :

    • Si un mouvement est détecté, les humains sont présents
    • Si aucun mouvement n'est détecté, les humains ne sont pas présents

    Il y a un problème avec cette règle en pratique, les humains sont présents dans la portée des capteurs mais ne bougent PAS. Le mouvement n'est PAS détecté. L'ESP32 (ou MCU) déduit que l'humain n'est PAS présent.

    Cependant, le capteur est largement utilisé pour détecter les personnes dans de nombreuses applications car ce problème n'est PAS grave et le prix du capteur est bon marché.

    ESP32 et capteur de mouvement HC-SR501

    Lorsqu'une broche d'ESP32 est configurée en entrée numérique, elle peut lire l'état (BAS ou HAUT) de tout ce à quoi elle est connectée.

    En connectant la broche de l'ESP32 à la broche de SORTIE du capteur HC-SR501, nous pouvons utiliser le code de l'ESP32 pour lire la valeur de la broche de SORTIE, puis déduire le mouvement.

Schéma de câblage entre le capteur de mouvement HC-SR501 et l'ESP32

Le schéma de câblage avec alimentation par un câble USB

Schéma de câblage du capteur de mouvement ESP32

This image is created using Fritzing. Click to enlarge image

Si vous ne savez pas comment alimenter l'ESP32 et d'autres composants, vous pouvez trouver des conseils dans le tutoriel suivant : Comment alimenter l'ESP32.

Le schéma de câblage avec alimentation provenant d'un adaptateur 5v.

Schéma de câblage du capteur de mouvement ESP32 avec adaptateur secteur

This image is created using Fritzing. Click to enlarge image

Configuration initiale

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.
Réglage initial du capteur de mouvement ESP32

Comment programmer un capteur de mouvement

  • Configurez une broche d'ESP32 en mode entrée numérique en utilisant la fonction pinMode().
pinMode(PIN_TO_SENSOR, INPUT);
  • Lisez l'état de la broche de SORTIE du capteur en utilisant la fonction digitalRead().
pinStateCurrent = digitalRead(PIN_TO_SENSOR);
  • Détecter le début de mouvement (changement d'état de la broche de BAS à HAUT)
pinStatePrevious = pinStateCurrent; // stocker l'état ancien pinStateCurrent = digitalRead(PIN_TO_SENSOR); // lire le nouvel état if (pinStatePrevious == LOW && pinStateCurrent == HIGH) { // changement d'état du pin : LOW -> HIGH Serial.println("Motion detected!"); }
  • Détecter l'arrêt du mouvement (changement d'état de la broche de HAUT à BAS)
pinStatePrevious = pinStateCurrent; // stocker l'ancien état pinStateCurrent = digitalRead(PIN_TO_SENSOR); // lire nouvel état if (pinStatePrevious == HIGH && pinStateCurrent == LOW) { // changement d'état du pin : HIGH -> LOW Serial.println("Motion stopped!"); }

Code ESP32

/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-motion-sensor */ const int PIN_TO_SENSOR = 19; // GPIO19 connecté au pin OUTPUT du capteur int pinStateCurrent = LOW; // état actuel du pin int pinStatePrevious = LOW; // état précédent du pin void setup() { Serial.begin(9600); // initialisation du port série pinMode(PIN_TO_SENSOR, INPUT); // configurer le pin ESP32 en mode entrée pour lire la valeur du pin OUTPUT du capteur } void loop() { pinStatePrevious = pinStateCurrent; // mémoriser l'ancien état pinStateCurrent = digitalRead(PIN_TO_SENSOR); // lire le nouvel état if (pinStatePrevious == LOW && pinStateCurrent == HIGH) { // changement d'état du pin : LOW -> HIGH Serial.println("Motion detected!"); // TODO: activer une alarme, lumière ou activer un dispositif ... ici } else if (pinStatePrevious == HIGH && pinStateCurrent == LOW) { // changement d'état du pin : HIGH -> LOW Serial.println("Motion stopped!"); // TODO: désactiver une alarme, lumière ou désactiver un dispositif ... ici } }

Étapes rapides

  • Si c'est la première fois que vous utilisez ESP32, consultez comment configurer l'environnement pour ESP32 sur Arduino IDE.
  • Copiez le code ci-dessus et collez-le dans Arduino IDE.
  • Compilez et téléchargez le code sur la carte ESP32 en cliquant sur le bouton Upload dans Arduino IDE
  • Ouvrez le moniteur série sur Arduino IDE
Comment ouvrir le moniteur série sur Arduino IDE
  • Déplacez votre main devant la portée du capteur
  • Consultez le résultat sur le moniteur série
COM6
Send
Motion detected! Motion stopped!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Vidéo

Références linguistiques

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!