Comment utiliser le capteur de mouvement PIR HC-SR501 avec Arduino

Dans ce didacticiel, vous apprendrez comment fonctionne le capteur de mouvement HC-SR501 PIR et comment vous pouvez l’utiliser avec Arduino. Vous pouvez trouver des capteurs infrarouges passifs (PIR) tout autour de vous, ils ne sont pas seulement utilisés à des fins de sécurité, mais également dans la plupart des systèmes d’éclairage activés automatiquement.

Dans cet article, j’ai inclus un schéma de câblage et des exemples de codes afin que vous puissiez commencer à expérimenter avec votre capteur. Après chaque exemple, je décompose et explique comment le code fonctionne, vous ne devriez donc avoir aucun problème à le modifier pour répondre à vos besoins.

Je vais d’abord vous montrer comment vous pouvez utiliser le HC-SR501 en tant qu’unité autonome. Ensuite, nous allons le connecter à un Arduino UNO et je vais vous montrer comment l’utiliser comme un simple système d’alarme.

Ce tutoriel se concentre sur le capteur HC-SR501, mais vous pouvez également utiliser le code fourni pour des capteurs similaires tels que le  HC-SR505  ou  AM312 . La principale différence est que ces capteurs moins chers ont une plage de détection plus petite et n’ont pas de potentiomètre pour régler la sensibilité et le délai.


Composants matériels

  1. Détecteur de mouvement PIR HC-SR501
  2. Arduino Uno Rev 3 Arduino Uno Rev3
  3. Breadbord
  4. Fils de cavalier
  5. Résistance Assortiment de résistances
  6. LED rouges
  7. buzzer Buzzer passif
  8. Câble USB type A / B

Comment fonctionne un capteur de mouvement PIR?

Les détecteurs de mouvement PIR se composent de deux parties principales: un  élément de détection pyroélectrique  et une  lentille de Fresnel . L’élément de détection pyroélectrique peut détecter un rayonnement infrarouge. Tous les objets dont la température est supérieure au zéro absolu (0 Kelvin / -273,15 ° C) émettent de l’énergie thermique sous forme de rayonnement infrarouge, y compris le corps humain.

HC-SR501-PIR-Motion-Sensor-fonctionnement-principe

Un capteur pyroélectrique comporte deux fentes rectangulaires constituées d’un matériau qui laisse passer le rayonnement infrarouge. Derrière ceux-ci, il y a deux électrodes de capteur infrarouge distinctes, l’une responsable de la production d’une sortie positive et l’autre d’une sortie négative. La raison en est que nous recherchons un changement des niveaux IR et non des niveaux IR ambiants. Les deux électrodes sont câblées de manière à s’annuler. Si une moitié voit plus ou moins de rayonnement IR que l’autre, la sortie oscillera haut ou bas.

Le circuit intégré de traitement du signal embarqué traite ce signal et fait tourner la broche de sortie du capteur sur HIGH ou LOW en conséquence.

HC-SR501-PIR-Motion-Sensor-Pyroelectric-Element

Le dôme blanc devant l’élément sensible est une lentille de Fresnel. Cette lentille concentre le rayonnement infrarouge sur le capteur.

HC-SR501-PIR-Motion-Sensor-Fresnel-Lens-Working-Principe

Capteur de mouvement PIR HC-SR501

Le capteur de mouvement HC-SR501 PIR est construit autour du circuit intégré de détection de mouvement Micro Power PIR BISS0001. Ce circuit intégré est spécialement développé pour traiter le signal des capteurs de mouvement PIR.

Si vous retirez la lentille de Fresnel, vous verrez l’élément de détection pyroélectrique RE200B. Sur le PCB, vous pouvez également trouver un régulateur de tension intégré. Cela signifie que vous pouvez alimenter la carte avec une large plage de tension continue, généralement 5 V est utilisé.

Les spécifications du HC-SR501 sont données dans le tableau ci-dessous, notez qu’il peut y avoir de petites différences entre les fabricants.

Spécifications HC-SR501

Tension de fonctionnement4,5 à 20 V
Courant de repos50 μA
Niveau de sortieÉLEVÉ 3,3 V / BAS 0 V
GâchetteDéclencheur unique L / Déclencheur répétitif
Temporisation3 à 300 s
Temps de blocage2,5 s (par défaut)
GâchetteDéclencheur unique L / Déclencheur répétitif
Plage de mesure3 – 7 m maximum
2 mm
Angle de mesure< 110° cone angle
PCB dimensions32,5 x 24 mm
Trous de montageEspacement de 2 mm, 28,5 mm
Dimensions de la lentille de Fresnel15 mm x 23 mm de diamètre
Température de fonctionnement-15 – 70 °C
CoûtVérifiez le prix

Pour plus d’informations, vous pouvez consulter les fiches techniques ci-dessous:


Réglage du HC-SR501

Au dos de la carte, vous trouverez deux potentiomètres et un cavalier, que vous pouvez utiliser pour régler plusieurs paramètres:

HC-SR501-Annotation de brochage

Réglage de la sensibilité (plage)

Le HC-SR501 a une distance de détection maximale (portée de détection) de 7 mètres. Vous pouvez régler la distance de détection en tournant le potentiomètre de sensibilité CW ou CCW (voir l’image ci-dessus). La rotation du potentiomètre dans le sens des aiguilles d’une montre augmente la distance de détection jusqu’à un maximum de 7 mètres. Le faire tourner dans le sens antihoraire réduit la distance de détection à un minimum de 3 mètres.

Réglage de la temporisation (Tx)

Ce potentiomètre peut être utilisé pour régler le temps pendant lequel la sortie reste HAUTE après la détection d’un mouvement. Au minimum, le délai est de 3 secondes et au maximum, il est de 300 secondes ou 5 minutes. Tournez le potentiomètre dans le sens des aiguilles d’une montre pour augmenter le délai et dans le sens inverse pour le diminuer.

Cavalier de sélection de déclenchement

Le cavalier (jaune) peut être utilisé pour sélectionner l’un des deux modes de déclenchement. Il peut être réglé sur  L  (déclenchement unique) ou  H  (déclenchement répété):

  • Déclenchement unique  – La sortie passera à HAUT dès qu’un mouvement est détecté. Il restera ÉLEVÉ pendant le temps réglé par le potentiomètre. Tout mouvement pendant cette période n’est pas traité et ne redémarre pas le chronomètre.
  • Déclenchement répété  – Chaque fois qu’un mouvement est détecté, le temporisateur est redémarré.

La différence entre le mode de déclenchement simple et répété est illustrée dans la figure ci-dessous.

Différence-entre-déclencheur-unique-et-répétitif-HC-SR501
Différence entre le mode de déclenchement unique et répétitif. Les flèches indiquent le temps de retard réglé.

Ajout d’une thermistance et / ou d’un LDR au HC-SR501

Comme on peut le voir sur l’image ci-dessous, le HC-SR501 possède des pastilles de soudure pour deux composants supplémentaires. Ces pads sont généralement étiquetés «RL» et «RT».

Coussinets à souder HC-SR501-RL-et-RT
  • RL  – Ici, vous pouvez ajouter une  résistance dépendant de la lumière  (LDR) ou une photorésistance qui a une faible résistance sous une forte lumière ambiante. Cela fait que le détecteur n’est opérationnel que lorsque la zone de détection est suffisamment sombre.
  • RT  – Ce tampon est destiné à une  thermistance . L’ajout de cela rend la sensibilité du capteur moins dépendante de la température ambiante

Malheureusement, aucune information supplémentaire n’est fournie dans les fiches techniques, je ne suis donc pas entièrement sûr des valeurs de composant à utiliser.


Utilisation du capteur de mouvement PIR HC-SR501 comme unité autonome

Pour la plupart des applications, vous pouvez simplement utiliser le HC-SR501 en tant qu’unité autonome. Vous pouvez utiliser le signal de sortie pour déclencher des éléments tels que des relais et des LED.

Le câblage est très simple comme on peut le voir sur l’image ci-dessous. Connectez simplement VCC et GND à une batterie et une LED rouge entre la broche de sortie et la masse. La tension de sortie est de 3,3 V, j’ai donc ajouté une résistance de limitation de courant de 68 Ω en série avec la LED.

HC-SR501-PIR-capteur-de-mouvement-avec-schéma-LED-schéma-câblage
Détecteur de mouvement PIR HC-SR501 avec schéma de câblage LED

Notez qu’après la mise sous tension du capteur, vous devez attendre 30 à 60 secondes pour que le capteur s’initialise. Pendant cette période, la LED peut clignoter plusieurs fois. Après avoir attendu une minute, vous pouvez agiter votre main devant le capteur et vous devriez pouvoir voir la LED s’allumer.

Avec cette configuration, il est facile de tester la fonctionnalité du capteur. C’est également un bon moment pour jouer avec les paramètres de sensibilité et de retard, ainsi que les deux modes de déclenchement différents.


Câblage – Connexion du capteur de mouvement HC-SR501 PIR à Arduino UNO

En connectant le capteur de mouvement à un microcontrôleur comme l’Arduino UNO, vous pouvez l’utiliser pour contrôler toutes sortes de choses: LED, relais, moteurs, buzzers etc.

Dans le schéma de câblage ci-dessous, vous pouvez voir comment le connecter à l’Arduino. Vous pouvez lire le capteur avec l’une des broches d’entrée / sortie à usage général (GPIO) de l’Arduino. Dans cet exemple, je l’ai connecté à la broche numérique 2. Les broches VCC et GND sont respectivement connectées à 5 V et GND.

HC-SR501-PIR-motion-capteur-avec-Arduino-UNO-cablage-schematic-schematic
Les connexions sont également données dans le tableau ci-dessous:

Connexions du capteur de mouvement PIR HC-SR501

Capteur de mouvement PIR HC-SR501Arduino
VCC5 V
EN DEHORSBroche 2
GNDGND

Une fois que vous avez câblé le capteur, l’étape suivante consiste à télécharger un exemple de code.

Capteur de mouvement PIR HC-SR501 avec exemple de code Arduino UNO

Avec l’exemple de code suivant, vous pouvez lire le capteur et contrôler la LED intégrée de l’Arduino (connectée à la broche 13). Ce code peut également être utilisé pour contrôler de simples relais pour allumer ou éteindre une plus grande lumière.

Vous pouvez télécharger l’exemple de code avec l’  IDE Arduino .

Pour que ce code fonctionne correctement, il est préférable de régler le cavalier du mode de déclenchement sur «H» (mode de déclenchement répété). Réglez également le potentiomètre de temporisation sur la valeur la plus basse. Tournez-le dans le sens antihoraire aussi loin que possible.

Le code lira l’état du capteur (HIGH ou LOW) et allumera ou éteindra la LED intégrée en conséquence. Il imprimera également un message sur le moniteur série, auquel vous pouvez accéder sous Outils ou tapez (Ctrl + Maj + M).


// Définir les broches de connexion : 
#define pirPin 2 
#define ledPin 13 

// Créer des variables : 
int val = 0; 
bool motionState = faux ; // Nous commençons sans mouvement détecté. 

void setup() { 
  // Configurez les broches en entrée ou en sortie : 
  pinMode(ledPin, OUTPUT); 
  pinMode(pirPin, INPUT); 

  // Commencer la communication série à un débit en bauds de 9600 : 
  Serial.begin(9600); 
} 

void loop() { 
  // Lit le pirPin et stocke comme val : 
  val = digitalRead(pirPin); 

  // Si un mouvement est détecté (pirPin = HIGH), procédez comme suit :
  if (val == HIGH) { 
    digitalWrite(ledPin, HIGH); // Allumez la LED embarquée. 

    // Changer l'état du mouvement en vrai (mouvement détecté) : 
    if (motionState == false) { 
      Serial.println("Mouvement détecté !"); 
      motionState = vrai ; 
    } 
  } 

  // Si aucun mouvement n'est détecté (pirPin = LOW), procédez comme suit : 
  else { 
    digitalWrite(ledPin, LOW); // Éteignez la LED intégrée. 

    // Change l'état du mouvement en faux (pas de mouvement) : 
    if (motionState == true) { 
      Serial.println("Motion terminé !"); 
      motionState = false; 
    } 
  } 
}

Vous devriez voir la sortie suivante dans le moniteur série :

HC-SR501 Capteur de mouvement PIR Sortie moniteur série
Sortie du capteur PIR sur le moniteur série

Explication du code :

Le code est assez simple et vous n’avez besoin d’aucune bibliothèque Arduino pour utiliser ce capteur.

L’esquisse commence par définir la broche du capteur PIR et la broche LED. Je les ai connectés aux broches Arduino 2 et 13 (LED embarquée).

L’instruction  #define est utilisée pour donner un nom à une valeur constante. Le compilateur remplacera toutes les références à cette constante par la valeur définie lors de la compilation du programme. Ainsi, partout où vous mentionnez  pirPin, le compilateur le remplacera par la valeur 2 lorsque le programme sera compilé.

J’ai également créé deux variables,  val et  motionState, qui sont respectivement un  entier  et  un booléen  (vrai/faux). La variable  val est utilisée pour stocker la sortie du capteur PIR (HIGH ou LOW) et  motionState deviendra vraie lorsqu’un mouvement est détecté et fausse lorsqu’il n’y a pas de mouvement.

// Définir les broches de connexion : 
#define pirPin 2 
#define ledPin 13 

// Créer des variables : 
int val = 0 ; 
bool motionState = faux ; // Nous commençons sans mouvement détecté.

Dans le  setup(), nous définissons les broches comme entrée ou sortie avec la fonction  pinMode(pin,mode). Le pirPin est une entrée et le ledPin est une sortie. Nous commençons également la communication série à un débit en bauds de 9600. Assurez-vous que le moniteur série est également réglé sur 9600.

void setup() { 
  // Configurez les broches en entrée ou en sortie : 
  pinMode(ledPin, OUTPUT); 
  pinMode(pirPin, INPUT); 

  // Commencer la communication série à un débit en bauds de 9600 : 
  Serial.begin(9600); 
}

Dans le  loop(), j’ai d’abord lu le capteur avec la fonction  digitalRead(pin). Cette fonction renvoie HIGH ou LOW.

  // Lit le pirPin et le stocke comme val : 
  val = digitalRead(pirPin);

Lorsque la sortie/valeur du capteur est HIGH, j’allume la LED avec la fonction  digitalWrite(pin,value).

  // Si un mouvement est détecté (pirPin = HIGH), procédez comme suit : 
  if (val == HIGH) { 
    digitalWrite(ledPin, HIGH); // Allumez la LED embarquée. 

    // Changer l'état du mouvement en vrai (mouvement détecté) : 
    if (motionState == false) { 
      Serial.println("Mouvement détecté !"); 
      motionState = vrai ; 
    } 
  }

Ensuite, le motionState est changé en true et le message « Motion détecté ! » est imprimé sur le moniteur série. Notez que je vérifie d’abord le motionState actuel, cela garantit que le message n’est imprimé qu’une seule fois par événement de mouvement.

S’il n’y a plus de mouvement devant le capteur,  val passera à LOW et la LED s’éteindra et le message « Motion terminé ! » est imprimé sur le moniteur série.


Create an alarm system with PIR motion sensor and buzzer

With some simple changes, you can create an alarm system with the HC-SR501 and a piezoelectric buzzer. I connected the buzzer with a 100 Ω resistor between digital pin 5 and GND. You can probably use the buzzer without a resistor (this makes it louder), but it will not sound as nice.

HC-SR501-PIR-capteur-de-mouvement-avec-buzzer-et-schéma-de-câblage-Arduino-UNO
The code below is mostly the same as the previous example. I only added a function to create the beeping alarm sound. You can change the pitch of the buzzer by changing the input parameter of the alarm(duration,frequency) function.
/* Example code to create an alarm system with HC-SR501 PIR motion sensor, buzzer and Arduino. More info: www.www.makerguides.com */
// Define connection pins:
#define buzzerPin 5
#define pirPin 2
#define ledPin 13
// Create variables:
int val = 0;
bool motionState = false; // We start with no motion detected.
void setup() {
  // Configure the pins as input or output:
  pinMode(buzzerPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(pirPin, INPUT);
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}
void loop() {
  // Read out the pirPin and store as val:
  val = digitalRead(pirPin);
  // If motion is detected (pirPin = HIGH), do the following:
  if (val == HIGH) {
    digitalWrite(ledPin, HIGH); // Turn on the on-board LED.
    alarm(500, 1000);  // Call the alarm(duration, frequency) function.
    delay(150);
    // Change the motion state to true (motion detected):
    if (motionState == false) {
      Serial.println("Motion detected!");
      motionState = true;
    }
  }
  // If no motion is detected (pirPin = LOW), do the following:
  else {
    digitalWrite(ledPin, LOW); // Turn off the on-board LED.
    noTone(buzzerPin); // Make sure no tone is played when no motion is detected.
    retard(150); 

    // Change l'état du mouvement en faux (pas de mouvement) : 
    if (motionState == true) { 
      Serial.println("Motion terminé !"); 
      motionState = faux ; 
    } 
  } 
} 

// Fonction pour créer une tonalité avec des paramètres durée et fréquence : 
void alarm(long duration, int freq) { 
  tone(buzzerPin, freq); 
  retard (durée); 
  pas de tonalité (buzzerPin); 
}

Éléments à prendre en compte lors de la conception d’un système de capteur PIR

Tout comme les autres capteurs PIR, le HC-SR501 a besoin d’un certain temps pour s’initialiser et s’adapter aux niveaux infrarouges de la pièce. Cela prend environ 1 minute lors de la première mise sous tension. Essayez d’éliminer tout mouvement devant le capteur pendant cette période.

Le vent et une source de lumière proche du capteur peuvent provoquer des interférences, essayez donc d’ajuster votre configuration pour éviter cela. Notez également que vous devez monter le capteur horizontalement car la plupart des mouvements se produiront dans le plan horizontal (par exemple, la marche).

Outre le temps de retard (Tx), le capteur dispose également d’un « temps de blocage » (Ti). Par défaut, le temps de blocage est de 2,5 secondes et il n’est pas très simple à modifier (voir fiche technique BISS0001). Chaque fois que la sortie passe de HIGH à LOW, la période de blocage démarre. Pendant cette période, le capteur ne détectera aucun mouvement.

Lors de la conception d’un système basé sur le HC-SR501, vous devrez tenir compte de ces délais.


Conclusion

Dans cet article, je vous ai montré comment fonctionne le capteur de mouvement PIR HC-SR501 et comment vous pouvez l’utiliser avec Arduino. J’espère que vous l’avez trouvé utile et informatif. Si vous l’avez fait,  partagez-le avec un ami  qui aime aussi l’électronique et la fabrication d’objets !

J’aimerais savoir quels projets vous envisagez de construire (ou avez déjà construit) avec ce capteur. Si vous avez des questions, des suggestions ou si vous pensez qu’il manque des éléments dans ce didacticiel,  veuillez laisser un commentaire ci-dessous .

2 Comments

  1. Super vos commentaire . étant novice je voudrais a l aide de mon détecteur HC SR501 je voudrais le brancher a mon Mirror magic afin de le mettre en route quand une personne passe devant est un arrêt automatique après quelque minute cela est il faisable merci de votre retour
  2. Article très instructif. C'est complet et très clair, bravo. Personnellement je compte l'utiliser comme détecteur pour mon appareil photo en liaison avec un MIOPS. J'utiliserai comme interface de sortie un optocoupleur Merci encore pour cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Rejoindre la liste d'attente Nous vous informerons lorsque le produit arrivera en stock. Veuillez laisser votre adresse E-mail et la quantité voulue.

Main Menu

بحاجة الى مساعدة ؟