Arduino Nano - Capteur de mouvement

Vous êtes-vous déjà demandé : « Comment cela peut-il faire cela ? » lorsque vous rencontrez des endroits avec des portes automatiques, des lumières et des escaliers mécaniques ? Si oui, ce tutoriel répondra non seulement à votre question, mais vous montrera également comment y parvenir en utilisant Arduino Nano et un capteur de mouvement. Commençons !

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

Préparation du matériel

1×Arduino Nano
1×USB A to Mini-B USB cable
1×HC-SR501 Motion Sensor
1×Jumper Wires
1×(Optional) 9V Power Adapter for Arduino Nano
1×(Recommended) Screw Terminal Adapter for Arduino Nano

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 capable de détecter le mouvement des humains (ou des animaux). Il est couramment utilisé dans diverses applications, telles que l'allumage ou l'extinction automatique d'une ampoule, l'ouverture et la fermeture d'une porte, l'activation ou la désactivation d'un escalier mécanique et la détection d'un intrus.

Le brochage du capteur de mouvement

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

  • Broche GND : Elle doit être connectée à GND (0V)
  • Broche VCC : Elle doit être connectée à VCC (5V)
  • Broche de SORTIE : C'est une broche de sortie qui sera à l'état BAS lorsque aucun mouvement n'est détecté, et à l'état HAUT lorsqu'un mouvement est détecté. Cette broche doit être connectée à la broche d'entrée de l'Arduino.

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

Brochage du capteur de mouvement HC-SR501

Comment ça fonctionne

Le capteur HC-SR501 est capable de détecter un mouvement basé sur les changements du rayonnement infrarouge provenant d'un objet en mouvement. Pour que le capteur HC-SR501 détecte l'objet, deux critères doivent être remplis :

  • L'objet doit être en mouvement ou en train de trembler
  • L'objet doit émettre des radiations infrarouges

Par conséquent :

  • Si un objet est en mouvement mais n'émet pas de rayons infrarouges (par exemple, un robot ou un jouet de véhicule), il ne sera pas détecté par le capteur.
  • Si un objet émet des rayons infrarouges mais ne se déplace 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. Par conséquent, le capteur peut détecter leurs mouvements.

État de la broche de SORTIE :

  • Lorsqu'aucun humain (ou animal) n'est présent dans la portée détectée du capteur, la broche de SORTIE du capteur est à l'état BAS.
  • Si un humain (ou un animal) entre dans la portée détectée du capteur, la broche de SORTIE passera de BAS à HAUT, indiquant qu'un mouvement a été détecté.
  • Lorsque l'humain (ou l'animal) quitte la portée détectée du capteur, la broche de SORTIE basculera de HAUT à BAS, signifiant que le mouvement est terminé.

La vidéo ci-dessus montre le fonctionnement de base d'un détecteur de mouvement. En réalité, le fonctionnement du détecteur de mouvement peut varier selon la configuration (qui est décrite dans la section Utilisations Avancées).

Détecter la présence humaine

Le capteur lui-même ne reconnaît pas la présence humaine. Il détecte uniquement le mouvement. Nous utilisons un Arduino Nano pour déduire la présence humaine en fonction du mouvement détecté par le capteur, selon cette règle :

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

Cette règle fonctionne de manière imparfaite dans une situation pratique : lorsque des personnes se trouvent à portée du capteur mais ne bougent pas, le mouvement ne sera pas détecté. En conséquence, l'Arduino Nano conclura qu'aucun humain n'est présent.

Par exemple, le capteur de mouvement dans votre salle de réunion est configuré pour activer les lumières lorsque des personnes sont présentes. Lorsque la réunion est en cours et que personne ne bouge, le mouvement n'est pas détecté et donc la présence humaine n'est pas reconnue, ce qui entraîne l'extinction des lumières. Pour les rallumer, il faut que quelqu'un bouge.

Cependant, ce problème n'est PAS grave et le capteur est bon marché. Par conséquent, il est largement utilisé pour détecter les humains dans de nombreuses applications.

Arduino Nano - Capteur de mouvement HC-SR501

Connectez la broche d'entrée numérique d'un Arduino à la broche de SORTIE du capteur HC-SR501. En utilisant le code Arduino Nano, nous pouvons vérifier la valeur de la broche de SORTIE pour détecter un mouvement.

Diagramme de câblage

Schéma de câblage du capteur de mouvement Arduino Nano

This image is created using Fritzing. Click to enlarge image

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 broche d'un Arduino en entrée numérique en utilisant la fonction pinMode().
pinMode(MOTION_SENSOR_PIN, INPUT);
  • Vérifiez l'état de la broche de SORTIE du capteur avec la fonction digitalRead().
motion_state = digitalRead(MOTION_SENSOR_PIN);
  • Identifiez le moment où le mouvement commence (l'état de la broche passe de BAS à HAUT).
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!"); }
  • Identifier quand l'état de la broche passe de HAUT à 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 Arduino Nano

/* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano 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/arduino-nano/arduino-nano-motion-sensor */ #define MOTION_SENSOR_PIN 2 // The Arduino Nano pin connected to the OUTPUT pin of motion 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(MOTION_SENSOR_PIN, INPUT); // set arduino 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(MOTION_SENSOR_PIN); // 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 } }

Étapes rapides

  • Copiez le code ci-dessus et ouvrez-le dans l'IDE Arduino.
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour compiler et télécharger le code sur l'Arduino Nano.
  • Ouvrez le moniteur série.
  • Déplacez votre main à portée du capteur.
  • Vérifiez la sortie dans le moniteur série.
COM6
Send
Motion detected! Motion stopped!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Vidéo

Utilisations avancées

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 peut modifier la distance à laquelle quelque chose peut être détecté (environ 3 à 7 mètres).

  • Le tourner complètement à droite permet de détecter des objets jusqu'à 3 mètres de distance.
  • Le tourner complètement à gauche permet de détecter des objets jusqu'à 7 mètres de distance.
Plage de détection du capteur de mouvement

Nous pouvons utiliser le potentiomètre pour régler une plage de valeurs entre 3m et 7m.

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 fournit une explication du concept de délai temporel en conjonction avec le déclencheur de répétition.

capteur de mouvement régler le délai de temporisation

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

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

sélection du déclencheur du capteur de mouvement

Faisons référence au réglage du délai temporel, qui est configuré via le Réglage de Délai Temporel, comme time_delay. Si vous vous déplacez dans la portée du capteur pendant une longue période (connue sous le nom de motion_time) qui est plusieurs fois plus longue que time_delay :

  • En mode 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 est fixée à 3 secondes.
mode de déclenchement unique du capteur de mouvement
  • Mode de déclenchement répétable : L'état de la broche OUTPUT restera ÉLEVÉ pendant une période de (temps de mouvement + délai temporel).
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
    • Agitez votre main devant le capteur pendant environ 10 secondes.
    • Éloignez votre main de la zone du capteur
    • Attendez 3 secondes, vous devriez observer la sortie sur 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 choisir 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, le résultat sera visible dans le moniteur série comme ceci :
    COM6
    Send
    Motion detected! Motion stopped!
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Nous pouvons observer que lorsque le capteur est en mode de déclenchement unique, il s'activera deux ou trois fois. Alors que, en mode de déclenchement répétable, le capteur ne se déclenchera qu'une seule fois.

    ※ NOTE THAT:

    Pendant le temps BAS (3 secondes, une valeur fixe et non ajustable), le capteur est incapable de détecter tout mouvement. Cela ne pose aucun problème en pratique.

    Il est suggéré d'utiliser le mode de déclenchement répétable.

    Dans de nombreux scénarios du monde réel :

    • Nous activons ou mettons en marche des dispositifs/machines dès qu'une personne est présente
    • Nous n'éteignons ni désactivons pas les dispositifs/machines immédiatement après qu'une personne n'est plus présente. Nous éteignons ou désactivons les dispositifs/machines après qu'un certain temps se soit écoulé.

    Comment utiliser le délai d'attente

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

    Le capteur de mouvement dispose d'un ajusteur de délai qui permet de régler le temps de retard à un minimum de 3 secondes et un maximum de 5 minutes. De plus, le code Arduino Nano peut être utilisé pour définir n'importe quelle valeur pour le délai.

    Si nous ne spécifions pas de délai d'expiration dans le code de l'Arduino Nano, le délai d'expiration sera équivalent au délai configuré dans le capteur.

    Si un délai d'expiration est établi dans le code de l'Arduino Nano, il sera l'agrégat du délai dans la configuration du capteur et du délai dans le code de l'Arduino Nano.

    Définir un délai temporel dans le code Arduino Nano

    /* * Ce code Arduino Nano a été développé par newbiely.fr * Ce code Arduino Nano 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/arduino-nano/arduino-nano-motion-sensor */ #define MOTION_SENSOR_PIN 2 // The Arduino Nano pin connected to the OUTPUT pin of motion sensor int motion_state = LOW; // current state of pin int prev_motion_state = LOW; // previous state of pin const unsigned long DELAY_TIME_MS = 30000; // 30000 miliseconds ~ 30 seconds bool delay_enabled = false; unsigned long delay_start_ms; void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(MOTION_SENSOR_PIN, INPUT); // set arduino pin to input mode to read value from OUTPUT pin of sensor } void loop() { prev_motion_state = motion_state; // store state motion_state = digitalRead(MOTION_SENSOR_PIN); // read new state if (prev_motion_state == LOW && motion_state == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); Serial.println("Turning on / activating"); delay_enabled = false; // disable delay // 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!"); delay_enabled = true; // enable delay delay_start_ms = millis(); // set start time } if (delay_enabled == true && (millis() - delay_start_ms) >= DELAY_TIME_MS) { Serial.println("Turning off / deactivating"); delay_enabled = false; // disable delay // TODO: turn off alarm, light or deactivate a device ... here } }

    Si le mode de déclenchement répétable est activé, alors le délai dans le code sera de 30 secondes plus time_delay, qui est réglé sur les paramètres du capteur via le réglage du délai.

Défiez-vous

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

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!