ESP8266 - Capteur de mouvement

Vous êtes-vous déjà demandé, « Comment cela peut-il faire cela ? » lorsque vous tombez sur des lieux avec des portes qui s'ouvrent et se ferment automatiquement, des ampoules qui s'allument et s'éteignent, ou des escaliers mécaniques qui se mettent en marche sans aucune intervention humaine ? Si oui, ce tutoriel répondra non seulement à votre question, mais vous montrera également comment le réaliser en utilisant ESP8266 et un capteur de mouvement. Commençons !

Ce tutoriel vous explique comment utiliser l'ESP8266 avec un capteur de mouvement. En détail, nous allons apprendre :

Préparation du matériel

1×ESP8266 NodeMCU
1×Micro USB Cable
1×HC-SR501 Motion Sensor
1×Jumper Wires
1×(Optional) 5V Power Adapter for ESP8266
1×(Optional) ESP8266 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 PIR HC-SR501 est un module capable de détecter les mouvements des personnes (ou des animaux). Il est souvent utilisé dans de nombreuses applications pour détecter la présence humaine, comme allumer/éteindre automatiquement une ampoule, ouvrir/fermer une porte, activer/désactiver un escalateur ou détecter un intrus.

Le schéma des broches du capteur de mouvement

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

  • Broche GND : Celle-ci doit être reliée à GND (0V)
  • Broche VCC : Celle-ci doit être reliée à VCC (5V)
  • Broche de SORTIE : C'est une broche de sortie. Elle sera à l'état BAS quand aucun mouvement n'est détecté et à l'état HAUT lorsqu'un mouvement est détecté. Cette broche doit être connectée à une broche d'entrée de l'ESP8266.

Le HC-SR501 possède un cavalier et deux potentiomètres qui servent à ajuster les paramètres du capteur.

Brochage du capteur de mouvement HC-SR501

Comment ça marche

Le capteur HC-SR501 peut détecter un mouvement en se basant sur les changements du rayonnement infrarouge émis par un objet en mouvement. Pour que le capteur HC-SR501 puisse identifier l'objet, deux critères doivent être remplis :

  • L'objet doit être en mouvement ou en vibration
  • L'objet doit émettre des radiations infrarouges

En conséquence :

  • Si un objet est en mouvement mais n'émet pas de rayons infrarouges (par exemple, un robot ou un jouet véhicule), il ne sera pas détecté par le capteur.
  • Si un objet émet des rayons infrarouges mais ne bouge pas (par exemple, une personne immobile), il ne sera pas détecté par le capteur.

Les humains et les animaux sont des sources de rayonnement infrarouge. Ainsi, le capteur peut détecter leurs mouvements.

L'état de la broche de SORTIE du capteur :

  • Lorsqu'aucun humain (ou animal) n'est présent dans la portée détectée, elle est BASSE.
  • Lorsqu'un humain (ou un animal) entre dans la portée détectée, la broche passe de BAS à HAUT, indiquant qu'un mouvement a été détecté.
  • Lorsque l'humain (ou l'animal) quitte la portée détectée, la broche repasse de HAUT à BAS, montrant que le mouvement s'est arrêté.

La vidéo ci-dessus montre comment fonctionne en théorie le capteur de mouvement. En réalité, le fonctionnement du capteur de mouvement varie légèrement selon les paramètres du capteur (qui sont décrits dans la section Usages Avancés).

Détecter la présence humaine

Le capteur ne détecte pas directement la présence humaine. Il détecte uniquement les mouvements. Nous utilisons l'ESP8266 pour déduire la présence humaine ou non en fonction des mouvements détectés par le capteur, selon cette règle :

  • Si un mouvement est détecté, cela implique la présence d'humains
  • Si aucun mouvement n'est détecté, cela implique l'absence d'humains

Cette règle n'est pas parfaite et ne fonctionne pas dans un scénario où des personnes sont à portée du capteur, mais immobiles, le mouvement n'est pas détecté et l'ESP8266 conclut que la personne n'est pas présente. Cependant, cela reste acceptable car habituellement les humains effectuent de petits mouvements.

Par exemple, dans votre salle de réunion, le capteur de mouvement est utilisé pour allumer et éteindre la lumière. Lorsque des personnes entrent dans la salle, elle s'illumine automatiquement. Cependant, si tout le monde reste immobile pendant la réunion, le capteur ne détectera aucun mouvement, indiquant que personne n'est présent, et la lumière s'éteindra. Pour rallumer la lumière, quelqu'un doit bouger.

Cependant, ce problème n'est PAS sérieux et le capteur est peu coûteux. Par conséquent, il est largement utilisé pour détecter les humains dans de nombreuses applications.

ESP8266 - Capteur de mouvement HC-SR501

Connectez une broche d'entrée numérique d'un Arduino à la broche OUTPUT du capteur HC-SR501. En utilisant le code ESP8266, vérifiez la valeur de la broche OUTPUT pour détecter un mouvement.

Diagramme de câblage

Schéma de câblage du capteur de mouvement ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Voir plus dans l'agencement des broches de l'ESP8266 et comment alimenter l'ESP8266 et d'autres composants.

Configuration initiale

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

Comment programmer un capteur de mouvement

  • Configurez une entrée numérique sur une broche Arduino en utilisant la fonction pinMode().
pinMode(MOTION_SENSOR_PIN, INPUT);
  • Lisez l'état de la broche de SORTIE du capteur avec la fonction digitalRead().
motion_state = digitalRead(MOTION_SENSOR_PIN);
  • Identifiez quand la broche passe de BAS à HAUT, indiquant le début du mouvement.
prev_motion_state = motion_state; // stocker l'ancien état motion_state = digitalRead(MOTION_SENSOR_PIN); // lire le nouvel état if (prev_motion_state == LOW && motion_state == HIGH) { // changement d'état de la broche : LOW -> HIGH Serial.println("Motion detected!"); }
  • Identifiez lorsque la broche passe d'un état HAUT à un état BAS, indiquant que le mouvement s'est arrêté.
prev_motion_state = motion_state; // stocker l'ancien état motion_state = digitalRead(MOTION_SENSOR_PIN); // lire le nouvel état if (prev_motion_state == HIGH && motion_state == LOW) { // changement d'état du pin : HIGH -> LOW Serial.println("Motion stopped!"); }

Code ESP8266

/* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU 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/esp8266/esp8266-motion-sensor */ #define MOTION_SENSOR_PIN D7 // Le pin ESP8266 D7 connecté au pin OUTPUT du capteur de mouvement int motion_state = LOW; // état actuel du pin int prev_motion_state = LOW; // état précédent du pin void setup() { Serial.begin(9600); // Initialiser le Serial pour communiquer avec le moniteur série. pinMode(MOTION_SENSOR_PIN, INPUT); // configurer le pin Arduino en mode entrée pour lire la valeur du pin OUTPUT du capteur } void loop() { prev_motion_state = motion_state; // stocker l'ancien état motion_state = digitalRead(MOTION_SENSOR_PIN); // lire le nouvel état if (prev_motion_state == LOW && motion_state == HIGH) { // changement d'état du pin : LOW -> HIGH Serial.println("Motion detected!"); // TODO: activer une alarme, une lumière ou activer un dispositif ... ici } else if (prev_motion_state == HIGH && motion_state == LOW) { // changement d'état du pin : HIGH -> LOW Serial.println("Motion stopped!"); // TODO: désactiver l'alarme, la lumière ou désactiver un dispositif ... ici } }

Étapes rapides

Pour commencer avec l'ESP8266 sur l'Arduino IDE, suivez ces étapes :

  • Consultez le tutoriel comment configurer l'environnement pour ESP8266 sur Arduino IDE si c'est la première fois que vous utilisez ESP8266.
  • Connectez les composants comme indiqué sur le schéma.
  • Connectez la carte ESP8266 à votre ordinateur à l'aide d'un câble USB.
  • Ouvrez Arduino IDE sur votre ordinateur.
  • Choisissez la carte ESP8266 correcte, telle que (par exemple NodeMCU 1.0 (Module ESP-12E)), et son port COM respectif.
  • Copiez le code et ouvrez-le avec Arduino IDE.
  • Cliquez sur le bouton Upload dans Arduino IDE pour envoyer le code à l'ESP8266.
  • Ouvrez le moniteur série.
  • Déplacez votre main devant la portée du capteur.
  • Consultez la sortie sur le moniteur série.
COM6
Send
Motion detected! Motion stopped!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Vidéo

Usages avancés

Cette section est consacrée à des connaissances approfondies. NE vous inquiétez pas si vous ne comprenez pas. Ignorez cette section si elle vous surcharge, et revenez un autre jour. Continuez à lire les sections suivantes.

Comme mentionné précédemment, nous pouvons modifier la configuration du capteur en utilisant un cavalier et deux potentiomètres.

Ajusteur de portée de détection

Ce potentiomètre est utilisé pour modifier la portée de détection (environ 3 à 7 mètres) :

  • Si vous le tournez complètement à droite, il ne peut détecter que les objets à moins de 3 mètres.
  • Si vous le tournez complètement à gauche, il peut détecter des objets jusqu'à 7 mètres.
Plage de détection du capteur de mouvement

Ajusteur de délai

Ce potentiomètre est utilisé pour modifier le délai.

  • Lorsqu'il est tourné complètement dans le sens des aiguilles d'une montre, le délai est d'environ 5 minutes.
  • Lorsqu'il est tourné complètement dans le sens inverse des aiguilles d'une montre, le délai est d'environ 3 secondes.

La section suivante éclaire le concept de délai temporel en conjonction avec le déclencheur répétitif.

réglage du délai de temporisation du capteur de mouvement

Sélecteur de déclenchement répétitif

Un cavalier existe qui est utilisé pour choisir les modes de déclenchement : soit un déclenchement unique, soit un déclenchement répétable.

sélection de déclenchement de capteur de mouvement

Faisons référence au réglage du délai temporel (qui est ajusté via le Time Delay Adjuster) comme time_delay. Si vous continuez à vous déplacer dans la portée du capteur pendant une longue période (appelée motion_time) (plusieurs fois plus longue que time_delay) :

  • Mode de déclenchement unique : L'état de la broche OUTPUT basculera plusieurs fois entre BAS et HAUT. La durée en HAUT sera égale à time_delay, tandis que la durée en BAS sera fixée à 3 secondes.
capteur de mouvement à déclenchement unique
  • Mode de déclenchement répétable : L'état de la broche OUTPUT restera ÉLEVÉ pendant la durée de (motion_time plus time_delay).
mode de déclenchement répétitif du capteur de mouvement

Test

  • Mode de déclenchement unique :
    • Placez le cavalier pour sélectionner le mode de déclenchement unique
    • Déplacez votre main devant le capteur pendant environ 10 secondes
    • Retirez votre main de la portée du capteur
    • Attendez 3 secondes et vous observerez la sortie dans le moniteur série comme suit :
    COM6
    Send
    Motion detected! Motion stopped! Motion detected! Motion stopped! Motion detected! Motion stopped!
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Mode de déclenchement répétable :

    • Placez le cavalier pour sélectionner le mode de déclenchement répétable
    • Agitez votre main devant le capteur pendant environ 10 secondes
    • Éloignez votre main de la portée du capteur
    • Attendez 3 secondes, vous observerez la sortie sur le moniteur série comme suit :
    COM6
    Send
    Motion detected! Motion stopped!
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Nous pouvons observer qu'en mode de déclenchement unique, le capteur se déclenche deux ou trois fois. Alors qu'en mode de déclenchement répétitif, il ne se déclenche qu'une seule fois.

    ※ NOTE THAT:

    Durant le temps BAS (3 secondes), qui est fixe et non réglable, le capteur est incapable de détecter tout mouvement. Cela ne pose pas de problème en pratique.

    Il est conseillé d'utiliser le mode de déclenchement répétitif.

    Dans de nombreuses applications concrètes, nous activons des machines/dispositifs lorsqu'une personne est présente, et nous ne les désactivons pas ou ne les éteignons pas immédiatement lorsque la personne n'est plus présente. Au lieu de cela, nous attendons un délai avant de les désactiver ou de les éteindre.

    Comment utiliser le délai

    Si aucun humain n'est détecté, le système d'automatisation attendra pendant une période de temps avant d'initier une action.

    Le délai de temporisation peut être ajusté sur le capteur de mouvement et le code ESP8266 :

    • Sur le capteur de mouvement : le minimum est de 3 secondes et le maximum de 5 minutes, ce qui est réglé via l'ajusteur de délai.
    • Sur le code ESP8266 : n'importe quelle valeur peut être définie, ce qui se fait par programmation.

    Si nous ne spécifions pas de délai d'expiration dans le code ESP8266, la valeur du délai d'expiration sera la même que le délai configuré dans le capteur.

    Si nous spécifions un délai d'attente dans le code ESP8266, le délai total sera la combinaison du délai défini dans le capteur et du délai spécifié dans le code ESP8266.

    Définir un délai d'attente dans le code ESP8266

    /* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU 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/esp8266/esp8266-motion-sensor */ #define MOTION_SENSOR_PIN D7 // Le pin D7 de l'ESP8266 connecté au pin OUTPUT du capteur de mouvement int motion_state = LOW; // état actuel du pin int prev_motion_state = LOW; // état précédent du pin const unsigned long DELAY_TIME_MS = 30000; // 30000 millisecondes ~ 30 secondes bool delay_enabled = false; unsigned long delay_start_ms; void setup() { Serial.begin(9600); // Initialise le Serial pour communiquer avec le moniteur série. pinMode(MOTION_SENSOR_PIN, INPUT); // configure le pin Arduino en mode entrée pour lire la valeur depuis le pin OUTPUT du capteur } void loop() { prev_motion_state = motion_state; // stocke l'état motion_state = digitalRead(MOTION_SENSOR_PIN); // lit le nouvel état if (prev_motion_state == LOW && motion_state == HIGH) { // changement d'état du pin : LOW -> HIGH Serial.println("Motion detected!"); Serial.println("Turning on / activating"); delay_enabled = false; // désactive le délai // TODO: activer alarme, lumière ou activer un dispositif ... ici } else if (prev_motion_state == HIGH && motion_state == LOW) { // changement d'état du pin : HIGH -> LOW Serial.println("Motion stopped!"); delay_enabled = true; // active le délai delay_start_ms = millis(); // définit l'heure de départ } if (delay_enabled == true && (millis() - delay_start_ms) >= DELAY_TIME_MS) { Serial.println("Turning off / deactivating"); delay_enabled = false; // désactive le délai // TODO: désactiver alarme, lumière ou désactiver un dispositif ... ici } }

    Si le mode de déclenchement répétable est activé, le délai sera fixé à 30 secondes plus time_delay, qui peut être ajusté dans les paramètres du capteur à l'aide du réglage du délai.

Mettez-vous au défi

Utilisez le capteur de mouvement pour réaliser l'un des projets suivants :

  • Activez les lumières lorsque vous entrez dans votre chambre et désactivez-les 30 secondes après votre départ. Conseil : Jetez un œil à ESP8266 - Relais.
  • Déclenchez une alarme lorsque quelqu'un s'approche de vos objets de valeur. Conseil : Consultez ESP8266 - Buzzer Piézo.

Références de fonction

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