Ignorer et passer au contenu

Livraison offerte à partir de 50€ d'achats, livrée sous 48h !

Livraison à partir de seulement 2.50€ !

Contents Menu Expand Light mode Dark mode Auto light/dark mode

Utiliser un détecteur de mouvement Infrarouge (PIR) sur la Pi Pico via du code Arduino

(Mis à jour le 23/06/2023)

../_images/pir-sensor-rpi-pico-upesy-rp2040-boards-preview.jpg

Voici un capteur très intéressant pour détecter la présence d’une personne ou d’un animal : le capteur infrarouge passif , plus communément connu sous le nom de capteur PIR pour « Passive InfraRed ». Ces capteurs sont souvent intégrés dans des systèmes d’alarme ou des systèmes d’éclairage qui s’allument automatiquement lorsqu’une personne entre dans une pièce.

Le fonctionnement d’un détecteur de mouvement par infrarouge (PIR)

Le capteur infrarouge passif se trouve sous un dôme blanc en plastique. Il détecte les rayons infrarouges émis par les objets autour de lui, sans émettre de rayonnement lui-même. C’est différent des capteurs actifs qui émettent un rayonnement infrarouge à l’aide d’une LED, puis détectent la partie réfléchie ou transmise.

Lorsqu’il détecte un mouvement dans son environnement, le capteur détecte des variations dans les rayons infrarouges. Ensuite, un circuit électronique envoie cette information.

En réalité, la boule en plastique agit comme une lentille pour diriger les rayons infrarouges vers le capteur. Cela permet d’avoir un large angle de détection, suffisant pour détecter une personne dans une pièce.

Prendre en main le module PIR

Il est assez simple de connecter un détecteur infrarouge à une Raspberry Pi Pico sur le plan électronique. Pas besoin d’utiliser des codes ou des librairies compliqués. Cependant, ce qui peut être un peu difficile, c’est de régler correctement le capteur PIR pour qu’il détecte les mouvements de manière précise. En plus, il existe différentes variations du même module provenant de différents fabricants…

Caractéristiques techniques du module PIR (HC-SR501)

Note

Les kits DIY incluent généralement des capteurs PIR basés sur le modèle fourni par Adafruit , souvent appelé HC-SR501 .

Circuit module HC-SR501 Adafruit PIR

Apercu du module PIR d’Adafruit

Voici quelques caractéristiques du capteur PIR d’Adafruit (et de ses clones chinois) :

  • Tension d’alimentation : 5-12V selon le module (5V recommandé)

  • Portée : Le capteur peut détecter des mouvements jusqu’à 7 mètres de distance.

  • Angle de mesure : Environ 120 degrés.

Le capteur fonctionne à une tension de 3,3V. Le module est équipé d’un régulateur linéaire qui convertit la tension d’entrée en 3,3V.

Branchements du capteur HC-SR04

Le module PIR a 3 connecteurs : GND pour la masse, OUT pour la sortie du capteur, et +5V pour l’alimentation. Le signal logique de sortie est de 3,3V, ce qui convient parfaitement à la Pi Pico.

Correspondance des broches

Module PIR

RPi Pi Pico

OUT

GP26

5V

5V

GND

GND

Avertissement

Malheureusement, selon le fabricant du module, les broches 5V et GND peuvent être inversées, ce qui peut être déroutant. Par exemple, dans les photos, l’alimentation est inversée par rapport au module d’Adafruit…

Note

Pour vous assurer de bien alimenter le capteur, voici une astuce : la broche 5V se trouve du même côté que la diode orange du module.

Brochage polarité capteur HC-SR501 PIR

Voici un exemple de montage sur une breadboard utilisant un capteur PIR (avec la polarité d’Adafruit) avec la Pi Pico :

Câblage du PIR avec carte rpi pico W

Câblage d’un capteur PIR (Adafruit) avec la Pi Pico

Câblage du PIR avec carte uPesy RP2040 DevKit

Câblage d’un capteur PIR (Adafruit) avec la carte uPesy (plus simple avec le numéro de broche non ?🙂

Note

La broche GP26 a été choisie arbitrairement, mais vous pouvez prendre n’importe quelle broche d’entrées logiques de la Pico pour OUT .

Configurer la détection de mouvements

Pour régler la détection des mouvements, vous avez trois paramètres à votre disposition : deux potentiomètres pour ajuster la sensibilité et la durée de détection, ainsi qu’un cavalier (jumper) pour activer ou désactiver l’option « Retrigger ».

Astuce

Pour une configuration optimale, réglez les deux potentiomètres comme indiqué sur l’image ci-contre.

Calibration potentiomètre capteur HC-SR501 PIR

Avertissement

Je vous suggère également de positionner le module dans la même orientation que sur la photo, afin que les explications correspondent. Sinon, si vous le placez dans une autre orientation, les termes « gauche » et « droite », ainsi que le sens de rotation, seront modifiés.

Sur la partie droite , vous trouverez le potentiomètre de sensibilité . Il vous permet d’ajuster l’amplitude du mouvement requis pour déclencher la sortie. Pour augmenter la sensibilité, tournez le potentiomètre dans le sens horaire (dans le sens des aiguilles d’une montre). Cela vous permettra de détecter des mouvements plus subtils, même à une plus grande distance (environ 7 mètres).

Astuce

Les deux potentiomètres peuvent tourner jusqu’à un demi-tour (180°) : n’appliquez pas trop de force. Vous pouvez utiliser un petit tournevis, bien qu’il soit possible de les tourner avec vos doigts.

Sur la partie gauche , vous trouverez le potentiomètre de durée . Il vous permet de contrôler la durée pendant laquelle le signal de sortie reste actif après la détection d’un mouvement. Cela affecte la durée de l’impulsion générée.

Si vous utilisez la Pico pour détecter l’impulsion, une durée courte suffit. Cela permet au capteur de détecter de nouveaux mouvements et d’envoyer de nouvelles impulsions. Cependant, si le capteur est directement connecté à un circuit sans logique (comme un relais avec une lampe), il est préférable d’augmenter la durée pour éviter que la lampe ne s’éteigne immédiatement lorsque le mouvement cesse.

Pour augmenter la durée, tournez le potentiomètre dans le sens horaire (à la position maximale, le signal restera actif pendant plusieurs minutes).

Astuce

Sur la photo, les potentiomètres sont réglés pour une sensibilité maximale avec une durée d’impulsion minimale.

À côté des potentiomètres, vous verrez trois broches dans un coin. Deux d’entre elles sont reliées par un cavalier de couleur jaune ou noire. Normalement, le cavalier est placé le plus près possible du coin, dans la position L .

Avec cette configuration (Single Trigger ), si un mouvement est détecté alors que le signal de sortie est déjà actif (génération de l’impulsion en cours), il sera ignoré.

Cependant, si vous déplacez le cavalier dans l’autre configuration, si un mouvement est détecté alors que le signal de sortie est déjà actif, la génération du signal en cours sera prolongée pour prendre en compte la nouvelle (Multiple Trigger Mode ).

Explication mode Simple trigger PIR
Explication mode Simple trigger PIR

Astuce

En fin de compte, il peut être bénéfique d’utiliser le mode « Multiple Trigger » si vous souhaitez que le signal reste actif tant qu’il y a quelqu’un dans la pièce. Cependant, il faut noter que ce mode n’est pas très fiable, car même si l’impulsion est plus longue, elle finit par se terminer même s’il y a toujours du mouvement.

Vérifier le bon fonctionnement du capteur PIR

Pour vous assurer que le capteur est correctement réglé et qu’il détecte correctement les mouvements, je vous recommande de vérifier les impulsions générées. Cette étape est essentielle pour vous assurer que le module réagit correctement aux mouvements. La méthode la plus simple consiste à utiliser le traceur série fourni par l’Arduino IDE.

Utiliser le traceur série pour afficher les impulsions du PIR

L’Arduino IDE comprend un outil appelé « traceur série » qui permet d’afficher le signal généré par le capteur PIR sur une période donnée. C’est un peu comme un oscilloscope basique 🙂.

Astuce traceur série Arduino IDE oscilloscope

Nous allons utiliser un code Arduino pour récupérer la valeur analogique du signal envoyé par le capteur PIR.

void setup() {
  pinMode(26, INPUT);
  Serial.begin(115200);
}

void loop() {
  Serial.println(analogRead(26));
  delay(20);
}

Astuce

Dans cet exemple, nous utilisons la broche GP26 car elle est connectée à l’ADC de la Pico.

Si les potentiomètres sont correctement réglés, vous devriez voir des impulsions s’afficher dans le traceur série chaque fois qu’un mouvement est détecté par le capteur.

Exemple traceur série Arduino IDE oscilloscope

Astuce

Si vous disposez d’un oscilloscope, vous pouvez également l’utiliser à la place 😎.

Méthode pour vérifier la détection de mouvement avec une simple LED

Une autre méthode consiste à connecter une LED à la broche OUT du capteur pour visualiser les impulsions, même si elles peuvent être trop rapides pour être vues à l’œil nu.

Câblage du PIR avec carte RP2040 Devkit

Astuce

La carte Pico est ici utilisée uniquement pour fournir une alimentation 5V.

Détecter le mouvement sur la Pico avec du code Arduino

Une fois que nous avons vérifié le bon fonctionnement du capteur PIR, nous pouvons maintenant intégrer la logique qui permettra à la Pico de détecter un mouvement.

Examiner en boucle l’état de la broche

La méthode la plus simple pour détecter l’impulsion logique consiste à surveiller en permanence l’état de la broche connectée au capteur PIR dans la fonction loop() .

#define PIN_PIR 26

void my_task(){
  }

void setup() {
  pinMode(PIN_PIR, INPUT);
  Serial.begin(115200);
}

void loop() {
  if (digitalRead(PIN_PIR) == 1){
      Serial.println("Motion detected");
      my_task(); // task when motion detected
  }
  delay(20);
}

Cette approche peut être suffisante si le programme n’a pas d’autres tâches à effectuer. Chaque fois que le signal devient haut, la fonction my_task() sera exécutée et peut-être appelée plusieurs fois pour une même détection. Une solution plus élégante consiste à utiliser une interruption sur la Pico.

Avertissement

Si une impulsion est envoyée par le capteur pendant l’exécution de my_task() et se termine avant la fin de cette exécution, elle ne sera pas prise en compte par la Pi Pico.

Utiliser une interruption pour détecter le mouvement en arrière-plan

En utilisant une interruption, la fonction my_task() sera exécutée à chaque nouvelle impulsion envoyée par le capteur infrarouge. La fonction loop() peut être utilisée pour d’autres tâches.

Astuce

C’est la meilleure approche lorsque vous souhaitez mettre en place une logique plus complexe pour traiter les signaux de détection du capteur.

#define PIN_PIR 36

void IRAM_ATTR my_task() {
  ets_printf("Motion detected\n");
}

void setup() {
  Serial.begin(115200);
  pinMode(PIN_PIR, INPUT);
  attachInterrupt(PIN_PIR, my_task, RISING);
}

void loop() {
}

Si les tâches à effectuer dans l’interruption sont importantes, il est préférable de les réaliser dans la boucle principale. L’interruption sera simplement utilisée pour indiquer avec certitude une impulsion du capteur PIR.