Arduino - Capteur de mouvement
Lorsque vous approchez de certains endroits où les portes s'ouvrent/se ferment automatiquement, où les ampoules s'allument/s'éteignent automatiquement ou où l'escalator est activé automatiquement, vous êtes-vous déjà posé la question : « Comment cela peut-il se faire ? » ? Si oui, ce tutoriel répond non seulement à cette question, mais vous explique également comment y parvenir. Commençons !
Dans ce tutoriel, nous allons apprendre :
- Fonctionnement du capteur de mouvement HC-SR501
- Comment connecter le capteur de mouvement HC-SR501 à un Arduino
- Comment programmer un Arduino pour lire l'état à partir du capteur de mouvement HC-SR501
- Comment utiliser un Arduino et un capteur de mouvement HC-SR501 pour détecter l'entrée humaine et agir en conséquence.
Préparation du matériel
Or you can buy the following sensor kits:
1 | × | DIYables Sensor Kit (30 sensors/displays) | |
1 | × | DIYables Sensor Kit (18 sensors/displays) |
À propos du capteur de mouvement HC-SR501
Le capteur HC-SR501 PIR est un capteur pouvant 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 d'une ampoule, ouverture/fermeture de porte, activation/désactivation d'escalator, détection d'un intrus...)
Schéma des broches
Le capteur de mouvement HC-SR501 possède 3 broches :
- Broche GND : doit être connectée au GND (0V)
- Broche VCC : doit être connectée au VCC (5V)
- Broche OUTPUT : est une broche de sortie : BASSE lorsque aucun mouvement n'est détecté, HAUTE lorsque un mouvement est détecté. Cette broche doit être connectée à la broche d'entrée de l'Arduino.
Le HC-SR501 dispose également d'un cavalier et de deux potentiomètres, qui servent à ajuster les paramètres du capteur. Commencez par conserver le réglage par défaut. Les détails sont décrits dans la section Utilisations Avancées.
Comment ça marche
Le capteur HC-SR501 détecte le mouvement en se basant sur le changement du rayonnement infrarouge provenant de l'objet en mouvement. Pour être détecté par le capteur HC-SR501, l'objet doit remplir deux conditions :
- Bouge ou secoue
- émet de l'infrarouge.
Alors :
- Si un objet est en mouvement mais n'émet pas de rayon infrarouge (par exemple, un robot ou un jouet véhicule), il n'est pas détecté par le capteur.
- Si un objet émet un rayon infrarouge mais ne se déplace pas (par exemple, une personne reste immobile sans bouger), il n'est pas détecté par le capteur.
Les humains et les animaux émettent naturellement des infrarouges. Ainsi, le capteur peut détecter les mouvements des humains et des animaux.
État de la broche de SORTIE :
- Lorsqu'il n'y a aucun humain (ou animal) en mouvement dans la portée détectée du capteur, la broche de SORTIE du capteur est BASSE.
- Lorsqu'un humain (ou un animal) entre dans la portée détectée du capteur, la broche de SORTIE du capteur passe de BASSE à HAUTE (⇒ détection de mouvement).
- Lorsqu'un humain (ou un animal) s'éloigne de la portée détectée du capteur, la broche de SORTIE du capteur passe de HAUTE à BASSE (⇒ fin du mouvement).
La vidéo ci-dessus illustre le principe de fonctionnement du capteur de mouvement. En pratique, le fonctionnement du capteur de mouvement diffère légèrement selon le réglage du capteur (décrit dans la section Usages Avancés).
Détecter la présence humaine
Le capteur lui-même ne détecte PAS la présence humaine, il détecte uniquement le mouvement. Nous utilisons Arduino (ou un MCU) pour déduire la présence humaine en nous basant sur la détection de mouvement du capteur, selon la règle suivante :
- 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
Cette règle est incorrecte dans un cas pratique : les humains sont présents dans la portée du capteur mais ne bougent PAS. Le mouvement n'est PAS détecté. L'Arduino (ou MCU) déduit que l'humain n'est PAS présent.
Par exemple, votre salle de réunion utilise un capteur de mouvement pour allumer/éteindre automatiquement la lumière, celle-ci s'allume automatiquement lorsque des personnes entrent dans la pièce. Pendant la réunion, si tout le monde reste immobile sans bouger, aucun mouvement n'est détecté ⇒ aucune présence humaine n'est détectée ⇒ la lumière s'éteint automatiquement. Pour allumer la lumière, il faut que quelqu'un bouge.
Cependant, ce problème n'est PAS grave et le capteur est bon marché. Par conséquent, le capteur est largement utilisé pour détecter les humains dans de nombreuses applications.
Arduino - Capteur de mouvement HC-SR501
Lorsqu'une broche d'Arduino 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'Arduino à la broche de SORTIE du capteur HC-SR501, nous pouvons utiliser le code Arduino pour vérifier la valeur de la broche de SORTIE afin de détecter le mouvement.
Diagramme de câblage
This image is created using Fritzing. Click to enlarge image
Configuration initiale
Time Delay Adjuster | Screw it in anti-clockwise direction fully. |
Detection Range Adjuster | Screw it in clockwise direction fully. |
Repeat Trigger Selector | Put jumper as shown on the image. |
Comment programmer pour un capteur de mouvement
- Configurez une broche d'Arduino en mode entrée numérique en utilisant la fonction pinMode()
- Lire l'état de la broche de SORTIE du capteur en utilisant la fonction digitalRead().
- Détecter le début du mouvement (changement d'état de la broche de LOW à HIGH)
- Détecter l'arrêt de mouvement (changement d'état du pin de HAUT à BAS)
Code Arduino
Étapes rapides
- Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
- Cliquez sur le bouton Upload de l'IDE Arduino pour téléverser le code vers Arduino
- Ouvrez le moniteur série
- Déplacez votre main devant la portée du capteur
- Observez la sortie dans le moniteur série
Vidéo
Utilisations Avancées
Comme mentionné ci-dessus, nous pouvons ajuster les réglages du capteur via un cavalier et deux potentiomètres.
Ajusteur de portée de détection
Ce potentiomètre est utilisé pour ajuster la portée de détection (environ 3 mètres à 7 mètres).
- S'il est vissé entièrement dans le sens des aiguilles d'une montre, la portée de détection est d'environ 3 mètres.
- S'il est vissé entièrement dans le sens inverse des aiguilles d'une montre, la portée de détection est d'environ 7 mètres.
Nous pouvons ajuster le potentiomètre pour atteindre la plage souhaitée (une valeur comprise entre 3m et 7m)
Ajusteur de délai времени
Ce potentiomètre est utilisé pour régler le délai.
- S'il est vissé complètement dans le sens des aiguilles d'une montre, le délai est d'environ 5 minutes.
- S'il est vissé complètement dans le sens contraire des aiguilles d'une montre, le délai est d'environ 3 secondes.
La signification du retard temporel est expliquée en combinaison avec le Déclencheur Répété dans la partie suivante.
Sélecteur de déclenchement répété
Il y a un cavalier, qui est utilisé pour sélectionner les modes de déclenchement : déclenchement unique ou déclenchement répétable.
Nommons le réglage du retardateur (réglé via le Ajusteur de Délai) time_delay. Supposons que vous continuiez à vous déplacer dans la portée du capteur pendant longtemps (appelé motion_time) (plusieurs fois plus long que time_delay)
- Mode à déclenchement unique : l'état de la broche OUTPUT bascule plusieurs fois entre BAS et HAUT. La durée en HAUT est égale à time_delay. La durée en BAS est fixée à 3 secondes.
- Mode de déclenchement répétable : l'état de la broche OUTPUT reste HAUT pendant (temps_de_mouvement + délai_temporel).
Test
Pour voir comment fonctionnent les modes de déclenchement, faisons un test. Réglez le retardateur complètement dans le sens antihoraire pour obtenir un délai de 3 secondes.
- Mode de déclenchement unique :
- Placez le cavalier pour sélectionner le mode de déclenchement unique.
- Continuez à bouger votre main devant le capteur pendant environ 10 secondes.
- Retirez votre main de la portée du capteur.
- Attendez 3 secondes, vous verrez la sortie sur le moniteur série comme suit :
- Mode de déclenchement répétable :
- Placez le cavalier pour sélectionner le mode de déclenchement répétable
- Continuez à bouger votre main devant le capteur pendant environ 10 secondes.
- Éloignez votre main de la portée du capteur
- Attendez 3 secondes, vous verrez la sortie sur le moniteur série comme suit :
- Nous activons ou mettons en marche des appareils/machines dès la présence humaine
- Nous n'éteignons ni ne désactivons pas immédiatement les appareils/machines dès que l'humain n'est plus présent. Nous éteignons ou désactivons les appareils/machines après un délai.
- Sur le capteur de mouvement : min est de 3 secondes et max de 5 minutes, réglé via l'ajusteur de délai.
- Sur le code Arduino : n'importe quelle valeur, réalisée par programmation.
Comme nous pouvons le voir, en mode déclenchement unique, le capteur se déclenche deux ou trois fois. En mode déclenchement répétitif, le capteur ne se déclenche qu'une seule fois.
※ NOTE THAT:
Dans les deux cas, pendant le temps BAS (3 secondes) (la valeur fixe et non ajustable), le capteur n'est PAS capable de détecter aucun mouvement. En d'autres termes, le capteur est bloqué durant cette période. En pratique, cela ne pose aucun problème.
Il est recommandé d'utiliser le mode de déclenchement répétitif.
Dans de nombreuses applications réelles :
Comment utiliser le délai
Lorsque la présence humaine n'est pas détectée, le système d'automatisation prendra des mesures après un délai.
Le délai peut être réglé sur le capteur de mouvement et le code Arduino :
Si nous ne définissons PAS de délai d'expiration dans le code Arduino, le délai d'expiration est égal au délai d'attente dans les paramètres du capteur.
Si nous définissons un délai d'attente dans le code Arduino, le délai d'attente est la somme du retard de temps dans le paramétrage du capteur et du retard de temps dans le code Arduino.
Définir un délai dans le code Arduino
Supposons que le mode de déclenchement répétable soit réglé. Le délai dans ce code est fixé à 30 secondes. Cela signifie que le temps de retard est égal à 30 secondes plus time_delay, qui est réglé sur le paramètre du capteur (via le réglage du retard de temps).
Mettez-vous au défi
Utilisez le capteur de mouvement pour réaliser l'un des projets suivants :
- Allumez automatiquement la lumière lorsque vous entrez dans votre chambre et éteignez la lumière 30 secondes après votre départ. Conseil : Consultez Arduino - Relais.
- Déclenchez automatiquement une alarme lorsque quelqu'un s'approche de vos objets de valeur. Conseil : Consultez Arduino - Buzzer Piézoélectrique.