Utilisation d’un détecteur infrarouge HC-SR501
Les détecteurs infrarouges sont assez communs dans notre environnement. On les retrouve dans les alarmes d’intrusion de domicile/bureau ou la commande automatique d’éclairage. Leur fonctionnement est basé sur la mesure du rayonnement infrarouge de leur environnement et la détection d’une modification de ce rayonnement.
Dans cet article, nous nous intéressons au module HC-SR501 très utilisé avec Arduino:
Le HC-SR501 est construit à partir des principaux suivants: | |
|
|
|
|
|
Montage utilisé
Dans ce montage, l’Arduino Uno est utilisé comme source de tension et pour mesurer les caractéristiques de temps du détecteur.
Remarque: Le détecteur ne fournit pas un courant suffisant pour allumer une LED 5mm, c’est pourquoi nous l’avons relié à une sortie de la carte Arduino dans ce montage. Une autre possibilité serait d’utiliser un transistor.
Matériel utilisé
Les produits suivants ont été utilisés pour rédiger cet article:
Programme utilisé
Il est à noter que ce programme nécessite l’installation préalable de la bibliothèque Arduino “elapsedMillis” de “Paul Stoffregen”. Si vous avez besoin d’aide pour installer une bibliothèque sous Arduino, je vous invite à vous reporter au chapitre « Installation d’une bibliothèque pour l’écran OLED » de l’article « Température et humidité avec Arduino ».
Voici le code source complet du programme de tests:
/* Déclaration des bibliothèques utilisées */ #include <elapsedMillis.h> /* Définition du brochage */ #define PORT_DETECTEUR 3 #define PORT_LED 8 /* Déclaration des variables globales */ bool etat_precedent_detecteur_g; static elapsedMillis chronometre_g; // Fonction de démarrage, s'exécute une seule fois: void setup() { // Ouverture du port USB pour l'envoi des traces au PC Serial.begin(115200); Serial.print("-----------------\n\n"); // Configuration des broches utilisées pour le détecteur et la LED pinMode(PORT_DETECTEUR, INPUT); pinMode(PORT_LED, OUTPUT); // Initialisation des variables globales etat_precedent_detecteur_g = false; } // Fonction principale du programme, s'exécute en boucle: void loop() { bool etat_detecteur_l; etat_detecteur_l = digitalRead(PORT_DETECTEUR); // La LED est un miroir de l'état de la sortie du détecteur digitalWrite(PORT_LED, etat_detecteur_l); if(etat_detecteur_l!=etat_precedent_detecteur_g) { if(etat_detecteur_l) { // Détecteur à l'état haut Serial.print("\nDélai entre 2 détections = "); Serial.print(chronometre_g/1000.0); Serial.println("s"); chronometre_g = 0; Serial.print("Détection en cours -"); } else { // Détecteur à l'état bas Serial.print(" fin de détection. Durée = "); Serial.print(chronometre_g/1000.0); Serial.println("s"); chronometre_g = 0; } etat_precedent_detecteur_g = etat_detecteur_l; } }
Déclenchement d’un détecteur infrarouge
Les conditions de déclenchement d’un détecteur infrarouge
Pour que le détecteur se déclenche, 3 conditions doivent être réunies :
|
Le cône de détection du HC-SR501
La zone de détection du capteur infrarouge HC-SR501 a une forme de cône dont l’angle est de 110° (valeur non-modifiable). |
La période d’inhibition
La période d’inhibition est la durée pendant laquelle le détecteur, une fois revenu à l’état « repos », sera incapable de détecter une nouvelle présence.
Voici le résultat obtenu avec le montage et le programme décrits précédemment:
- Test de la durée d’inhibition d’un détecteur HC-SR501 standard
- Test de la durée d’inhibition d’un détecteur HC-SR501 désinhibé
En utilisant le programme précédent pour mesurer la durée d’inhibition d’un HC-SR501 standard on obtient une valeur de l’ordre de 5 secondes :
La sensibilité du HC-SR501
Ce que l’on nomme « sensibilité » sur ce détecteur est la distance de détection du capteur. |
|
La temporisation
La temporisation est la durée pendant laquelle le détecteur HC-SR501 va laisser sa sortie à l’état haut une fois sa détection terminée. Cette temporisation est surtout utile dans le cas d’une utilisation pour de l’éclairage (sans recours à un microcontrôleur). |
L’exécution du programme donne une valeur paramétrable minimale de 1,2 seconde.
Et une valeur paramétrable maximale de 7 minutes et 38 secondes.
Démarrage du détecteur
A sa mise sous-tension le HC-SR501 déclenche systématiquement un signal de présence. Il est important de l’avoir en tête pour nos projets et de filtrer ce faux positif lié au démarrage du détecteur si nécessaire.
Les modes de fonctionnement du HC-SR501
Le détecteur HC-SR501 propose 2 modes de fonctionnement:
- le mode de déclenchement répété,
- le mode de déclenchement unique.
Le basculement entre ces 2 modes de déclenchement s’effectue en modifiant la position du petit cavalier jaune présent sur la carte.
Le mode de déclenchement répété
Une position haute (High) du cavalier de déclenchement positionne le détecteur en mode « déclenchement répété ». Dans ce mode, la sortie du détecteur reste à l’état haut (3,3V) tout le temps de la détection d’un mouvement d’une source de chaleur par le HC-SR501. Elle reste même à l’état haut un peu plus longtemps, durant le temps de temporisation.
Le mode de déclenchement unique
Une position basse (Low) du cavalier de déclenchement positionne le détecteur en mode « déclenchement unique ». Dans ce mode, la sortie du détecteur alterne entre état haut (3,3V) et état bas (0V) durant la détection d’un mouvement d’une source de chaleur par le HC-SR501. Cette succession d’états respecte les durées de temporisation (état haut) et d’inhibition (état bas).
Pour compléter cette analyse, je vous invite à consulter les fiches produits du HC-SR501 standard et du HC-SR501 désinhibé.