Capteur de mouvement PIR (HC-SR501) : détection de mouvement avec Arduino, ESP32 et Pico
Comment fonctionne un capteur de mouvement PIR ? Câblage du HC-SR501, réglage de la sensibilité et de la durée, modes H/L, code Arduino, ESP32 et Pico, lumière à détection de mouvement et éviter les fausses détections.
Un capteur PIR (Passive InfraRed, infrarouge passif) est un capteur bon marché et très économe qui détecte quand une personne ou un animal bouge dans son champ de vision. Les éclairages d'escalier qui s'allument tout seuls, les alarmes et les sonnettes automatiques fonctionnent le plus souvent avec un PIR. Le mot « passif » signifie que le capteur n'émet rien lui-même : il se contente d'écouter le rayonnement infrarouge émis par les corps chauds autour de lui. Le modèle le plus utilisé dans les projets Arduino est le HC-SR501.

Comment fonctionne un capteur PIR ?
Tout corps plus chaud que le zéro absolu émet un rayonnement infrarouge, et le corps humain rayonne surtout vers 9 à 10 micromètres de longueur d'onde. Au cœur du capteur se trouve un élément pyroélectrique sensible à ce rayonnement, divisé en deux moitiés. Quand rien ne bouge, les deux moitiés reçoivent le même rayonnement, leurs signaux s'annulent et la sortie reste calme. Quand quelqu'un traverse le champ de vision, une moitié puis l'autre reçoit davantage de rayonnement ; le circuit du module détecte cette différence et la broche OUT passe à HIGH.
Le dôme blanc est une lentille de Fresnel. Il découpe le champ de vision en dizaines de petites zones et concentre le rayonnement de chacune sur l'élément. Quand une personne passe d'une zone à l'autre, le signal change : c'est pourquoi un capteur PIR détecte très bien le mouvement, mais pas quelqu'un qui reste parfaitement immobile.
Caractéristiques techniques du HC-SR501
| Caractéristique | Valeur |
|---|---|
| Tension d'alimentation | 4,5–20 V (5 V recommandés) |
| Courant de veille | Environ 50 µA |
| Sortie | Numérique : 3,3 V en cas de mouvement, 0 V sinon |
| Portée de détection | 3–7 m (réglable) |
| Angle de détection | Environ 110° |
| Durée de sortie | Environ 3 secondes à 5 minutes (réglable) |
| Temps de blocage | Environ 2,5 secondes après l'extinction de la sortie |
| Temps de chauffe | 30 à 60 secondes à la mise sous tension |
Les réglages du module
- Potentiomètre Sx (sensibilité) : règle la portée. En le tournant dans le sens horaire, elle passe d'environ 3 à 7 mètres.
- Potentiomètre Tx (durée) : règle combien de temps la sortie reste à HIGH après une détection. Dans le sens horaire, la durée s'allonge.
- Cavalier H (redéclenchable) : tant que le mouvement continue, la temporisation repart à zéro ; idéal pour l'éclairage.
- Cavalier L (non redéclenchable) : à la fin de la durée, la sortie repasse à LOW même si le mouvement continue ; il faut alors un nouveau déclenchement.
- Temps de blocage : pendant environ 2,5 secondes après le passage de la sortie à LOW, aucun nouveau mouvement n'est détecté ; ce temps n'est pas réglable.
Brochage et câblage du HC-SR501
| Broche | Rôle | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|---|
| VCC | Alimentation | 5V | VIN (5V) | VBUS (5V) |
| OUT | Sortie numérique (3,3 V) | D2 | GPIO 27 | GP16 |
| GND | Masse | GND | GND | GND |
Détecter un mouvement avec Arduino
Le code ci-dessous attend que le capteur ait chauffé, puis écrit un message dans le moniteur série au début et à la fin de chaque mouvement, en allumant et en éteignant la LED intégrée de l'Arduino. Surveiller uniquement les changements d'état, plutôt que d'afficher la sortie en boucle, c'est aussi la méthode que tu utiliseras dans de vrais projets.
1const int PIR_PIN = 2;
2const int LED_PIN = 13; // dahili LED / built-in LED
3
4bool motion = false;
5
6void setup() {
7 pinMode(PIR_PIN, INPUT);
8 pinMode(LED_PIN, OUTPUT);
9 Serial.begin(9600);
10 Serial.println("Sensör ısınıyor / warming up...");
11 delay(30000); // ilk 30 sn kararsız / unstable for ~30 s
12 Serial.println("Hazır / ready");
13}
14
15void loop() {
16 bool now = digitalRead(PIR_PIN);
17 if (now && !motion) {
18 Serial.println("Hareket algılandı / motion detected");
19 digitalWrite(LED_PIN, HIGH);
20 motion = true;
21 } else if (!now && motion) {
22 Serial.println("Hareket bitti / motion ended");
23 digitalWrite(LED_PIN, LOW);
24 motion = false;
25 }
26}Lumière à détection de mouvement : gérer la durée avec millis()
Garder la durée d'allumage dans le code plutôt que sur le potentiomètre Tx est beaucoup plus souple. Le code ci-dessous mémorise l'heure à chaque mouvement détecté et éteint la lumière 20 secondes après le dernier mouvement : tant que quelqu'un bouge dans la pièce, elle reste allumée. Sur LIGHT_PIN, tu peux brancher une LED ou un module relais pour une lampe secteur ; avec un relais actif à l'état bas, inverse HIGH et LOW à la dernière ligne. Le câblage du relais est expliqué dans Qu'est-ce qu'un module relais ?
1const int PIR_PIN = 2;
2const int LIGHT_PIN = 7; // LED ya da röle / LED or relay
3const unsigned long ON_TIME = 20000; // son hareketten sonra 20 sn / 20 s after last motion
4
5unsigned long lastMotion = 0;
6
7void setup() {
8 pinMode(PIR_PIN, INPUT);
9 pinMode(LIGHT_PIN, OUTPUT);
10}
11
12void loop() {
13 if (digitalRead(PIR_PIN) == HIGH) {
14 lastMotion = millis(); // her harekette süreyi yenile / refresh on every motion
15 }
16 bool on = (lastMotion != 0) && (millis() - lastMotion < ON_TIME);
17 digitalWrite(LIGHT_PIN, on ? HIGH : LOW);
18}PIR avec l'ESP32 et le Raspberry Pi Pico
La sortie du HC-SR501 est déjà en 3,3 V : elle peut donc aller directement sur l'ESP32 et le Pico, sans pont diviseur. Alimente toutefois le module en 5 V, car son régulateur est instable sous 4,5 V. Le même code Arduino fonctionne sur l'ESP32 ; dans les projets sur batterie, mettre l'ESP32 en sommeil profond et le réveiller avec la sortie du PIR (ext0 wakeup) prolonge l'autonomie de plusieurs semaines. Sur le Pico en MicroPython, tu peux utiliser une interruption pour ne manquer aucun mouvement :
1from machine import Pin
2import time
3
4pir = Pin(16, Pin.IN) # GP16
5led = Pin(25, Pin.OUT) # dahili LED; Pico W'de Pin("LED") / onboard LED; Pin("LED") on Pico W
6
7def on_motion(pin):
8 led.value(pin.value()) # hareket varken yanar / on while there is motion
9 print("Hareket / motion" if pin.value() else "Bitti / ended")
10
11pir.irq(trigger=Pin.IRQ_RISING | Pin.IRQ_FALLING, handler=on_motion)
12
13while True:
14 time.sleep(1)Éviter les fausses détections
- Ne le dirige pas vers une source de chaleur : radiateurs, bouches de climatisation, fenêtres ensoleillées et lampes chaudes le déclenchent par des variations brusques de température.
- Éloigne-le des objets qui bougent : rideaux, plantes ou branches agités par le vent et chauffés par le soleil ressemblent à un mouvement.
- Nettoie l'alimentation : relais et modules Wi-Fi créent des parasites ; ajoute un condensateur de 100 µF entre VCC et GND du capteur.
- Éloigne-le un peu de l'ESP32 : collé à l'antenne Wi-Fi, le HC-SR501 peut se déclencher tout seul de temps en temps ; quelques centimètres et un fil court suffisent généralement.
- Avec des animaux : baisse la sensibilité et fixe le capteur en hauteur, légèrement incliné vers le bas.
- Pas derrière une vitre : le verre ordinaire bloque l'infrarouge ; un capteur derrière une fenêtre ne voit pas les mouvements dehors.
PIR, radar hyperfréquence ou ultrasons ?
| Caractéristique | PIR (HC-SR501) | Radar hyperfréquence (RCWL-0516) | Ultrasons (HC-SR04) |
|---|---|---|---|
| Ce qu'il détecte | Corps chauds en mouvement | Tout type de mouvement | La distance d'un objet devant lui |
| À travers une cloison fine ou un boîtier | Non | Oui | Non |
| Personne parfaitement immobile | Non | Non | Mesurée comme une distance |
| Consommation | Très faible (~50 µA) | Faible (~3 mA) | Moyenne (~15 mA) |
| Usage typique | Éclairage, alarme | Capteurs cachés, ouvre-portes | Détection d'obstacles, mesure de niveau |
Si tu veux savoir si quelqu'un bouge, et non si quelqu'un est dans la pièce, le PIR est la solution la plus économique. Pour mesurer à quelle distance se trouve un objet, consulte Capteur de distance HC-SR04.
Idées de projets avec un capteur PIR
- Éclairage automatique de couloir : allume une lampe via un relais à la détection d'un mouvement et éteins-la après 30 secondes sans mouvement.
- Alarme antivol : fais sonner un buzzer si un mouvement est détecté en mode nuit ; pour le son, vois Qu'est-ce qu'un buzzer ?
- Veilleuse intelligente : associe le PIR à un capteur de lumière LDR pour une lampe qui ne s'allume que dans le noir et en cas de mouvement.
- Notification sur le téléphone : envoie un message Telegram depuis un ESP32 quand un mouvement est détecté.
- Écran économe : allume le rétroéclairage d'un LCD quand quelqu'un approche et éteins-le quand il s'en va.
- Compteur de passages : compte chaque passage devant une porte et affiche-le sur un écran.
Erreurs fréquentes et solutions
- La sortie reste à HIGH en permanence : la durée Tx est trop longue ou il y a un mouvement constant en mode H ; baisse le potentiomètre et vérifie que le capteur ne vise pas une source de chaleur.
- Il ne se déclenche jamais : VCC n'est peut-être pas à 5 V, le capteur chauffe encore ou le fil OUT est sur une autre broche que celle du code.
- Il se déclenche tout seul toutes les quelques secondes : l'alimentation est parasitée ; ajoute un condensateur et éloigne-le des relais et modules Wi-Fi.
- Il ne redétecte pas juste après la fin du mouvement : le temps de blocage d'environ 2,5 secondes est normal, le capteur n'est pas en panne.
- Mal orienté : un PIR détecte le mieux quand le mouvement traverse son champ de vision latéralement ; il remarque plus tard quelqu'un qui marche droit vers lui.
Le capteur PIR est l'un des meilleurs points de départ pour ton premier projet domotique : trois fils et tu vois tout de suite le résultat. Dans l'application BlueGrays, tu trouveras des projets de lumière à détecteur de mouvement, de sonnette et d'alarme, pas à pas avec schémas et code.
Questions fréquentes
À quelle distance un capteur PIR détecte-t-il ?
Le HC-SR501 détecte entre 3 et 7 mètres sur un angle d'environ 110 degrés. La portée se règle avec le potentiomètre Sx (sensibilité) du module ; dans le sens horaire, elle augmente.
Un capteur PIR détecte-t-il une personne immobile ?
Non. Un PIR ne détecte que les variations du rayonnement infrarouge, c'est-à-dire le mouvement. Il ne remarquera pas quelqu'un assis parfaitement immobile. Pour savoir si quelqu'un est présent dans une pièce, on utilise des radars de présence mmWave comme le LD2410.
Un capteur PIR fonctionne-t-il à travers une vitre ?
Non. Le verre ordinaire ne laisse pas passer l'infrarouge émis par le corps humain : un capteur derrière une vitre ne voit pas les mouvements dehors. Pour l'extérieur, installe le capteur dehors, à l'abri de la pluie.
Le HC-SR501 fonctionne-t-il en 3,3 V ?
Son régulateur est instable sous 4,5 V, il faut donc l'alimenter en 5 V. La sortie est déjà en 3,3 V et peut aller directement sur un ESP32 ou un Pico. Pour un système entièrement en 3,3 V, utilise le petit module PIR AM312, qui fonctionne de 2,7 à 12 V.
Pourquoi mon capteur PIR se déclenche-t-il tout seul ?
Les causes les plus fréquentes sont le temps de chauffe, les sources de chaleur dans son champ (radiateur, soleil, climatisation) et les parasites sur l'alimentation. Ignore les 60 premières secondes, détourne le capteur des sources de chaleur, ajoute un condensateur entre VCC et GND et éloigne-le des modules Wi-Fi.
Quelle est la différence entre les modes H et L du HC-SR501 ?
En mode H (redéclenchable), la temporisation repart à chaque détection tant que le mouvement continue : une lumière reste allumée tant que quelqu'un bouge. En mode L (non redéclenchable), la sortie s'éteint à la fin de la durée même si le mouvement continue ; le déclenchement suivant arrive après le temps de blocage.
Projets à réaliser après cet article
Voir tous les projets
Détecteur de mouvement avec capteur de mouvement
Projet de base qui allume des LED en détectant un mouvement dans l'environnement grâce à un capteur de mouvement PIR. Enseigne la lecture de capteurs numériques et la logique de détection de mouvement

Sonnette et lumière avec détecteur de mouvement
Projet qui allume la LED et joue la mélodie de la sonnette avec le buzzer lorsque le capteur PIR détecte un mouvement. Il combine la détection de mouvement avec la notification sonore et lumineuse.

Éclairage automatique avec le capteur de mouvement PIR ESP32
Dans ce projet, nous allons détecter toute personne entrant dans la pièce à l'aide du capteur de mouvement PIR HC-SR501 et allumer automatiquement la LED. Lorsqu'un mouvement sera détecté, la LED restera allumée pendant un certain temps et nous gérerons le temps à l'aide de la fonction `millis()` et d'un compteur, sans avoir recours à `delay()`. Nous obtiendrons ainsi un système d'éclairage à détecteur de mouvement qui ne bloque pas l'ESP32 et permet d'effectuer d'autres tâches. Dans la vie de t

Alarme de détection de mouvement ESP32
Dans ce projet réalisé à l'aide d'un ESP32 et d'un capteur PIR, un buzzer se déclenche pour émettre une alarme sonore dès qu'un mouvement est détecté. Il s'agit d'une application simple et peu coûteuse pour un système de sécurité. (Les images sont fournies à titre indicatif ; veuillez les associer au texte correspondant)

Éclairage Intelligent ESP32 (PIR + LDR + Relais + OLED)
Transformez votre couloir, votre salle de bain ou votre garde-manger en éclairage intelligent avec l'ESP32 ! En utilisant un capteur de mouvement PIR, un capteur de lumière LDR et un module relais, nous construisons le scénario classique "la lumière s'allume lorsqu'un mouvement est détecté dans l'obscurité" — si l'environnement est déjà lumineux, le mouvement N'ACTIVE PAS la lumière, économisant ainsi de l'énergie pendant la journée. La lumière reste allumée pendant 30 secondes ; si le mouvement

Système d'Alarme de Mouvement ESP32 (PIR + Buzzer + LED + Telegram)
Un système d'alarme de sécurité intelligent qui active le buzzer et la LED lorsque le capteur PIR détecte un mouvement, tout en envoyant une notification instantanée au propriétaire via Telegram. Il intègre un cooldown de 30 secondes pour éviter les fausses alarmes. Idéal pour la sécurité domestique, la surveillance de garage, d'entrepôts ou de bureaux. Avec l'ESP32-CAM, des notifications photo sont possibles ; avec l'ESP32 DevKit V1 classique, des notifications texte sont envoyées.

Système d'alerte laser
Projet de sécurité qui détecte l'interruption du faisceau laser via une LDR et avertit par un buzzer et une LED. Il enseigne la logique de la détection de l'interruption de la lumière avec une paire l

Système de sécurité laser
Système de sécurité avancé qui déclenche l'alarme lorsque le faisceau laser est interrompu et qui peut être réinitialisé par un bouton-poussoir ou une commande IR. Enseigne les sources d'entrée multip
Autres articles
Apprends comment un capteur PIR détecte les mouvements humains, comment régler le HC-SR501, le brancher sur un Arduino, réaliser une lumière à détection de mouvement et éviter les fausses alarmes.

