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 en MicroPython

(Mis à jour le 04/12/2023)

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

Un capteur très utile pour détecter la présence d’une personne ou d’un animal est le capteur infrarouge passif, également connu sous le nom de capteur PIR (Passive InfraRed). Ce capteur est souvent utilisé dans les systèmes d’alarme et les éclairages 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 PIR contient un capteur pyroélectrique sous un dôme en plastique blanc. Ce capteur détecte le rayonnement infrarouge émis par les objets environnants, d’où son nom de « capteur infrarouge passif ». Contrairement aux capteurs actifs qui émettent eux-mêmes un rayonnement infrarouge, le capteur PIR détecte les variations du rayonnement infrarouge causées par un mouvement dans son environnement. Ensuite, le module électronique du capteur envoie une information sous la forme d’une impulsion logique.

Le dôme en plastique agit comme une lentille qui redirige les rayons infrarouges vers le capteur, permettant une détection sur un angle large, suffisamment grand 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.

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

Pour avoir un retour sur la calibration des potentiomètres, vous pouvez utiliser une LED connectée à 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

Détecter le mouvement sur la Pico en MicroPython

Vérifier en boucle l’état de la broche

La méthode la plus évidente pour détecter l’impulsion logique est de tout simplement scruter l’état de la broche qui est relié au capteur PIR :

from machine import Pin
import time

pin_pir = Pin(26, mode=Pin.IN, pull=Pin.PULL_UP)

def my_task():
    pass

if __name__ == "__main__":
    while True:
        if pir_pin.value() == 1:
            print("Motion detected")
            my_task()

        time.sleep_ms(20)

Ce script simple peut fonctionner si le programme n’a rien d’autre à faire. Tant que l’impulsion est à l’état haut, la fonction my_task() sera exécutée. Elle peut être appelée plusieurs fois pour une même détection. Une solution plus élégante consiste à utiliser une interruption sur la Pi Pico.

Avertissement

Si une nouvelle impulsion est émise par le capteur pendant l’exécution de la tâche my_task() , et qu’elle se termine avant la fin de l’exécution de my_task() , elle ne sera pas prise en compte par la Pico.

Utiliser une interruption en arrière-plan

En utilisant une interruption, la fonction my_task() sera exécuté à chaque fois qu’une nouvelle impulsion sera envoyée par le capteur infrarouge. La fonction loop() peut être utilisée pour autre chose.

Astuce

C’est l’approche à privilégier si vous voulez implémenter une logique plus complexe pour traiter les signaux de détection du capteur.

from machine import Pin

pin_pir = Pin(26, mode=Pin.IN, pull=Pin.PULL_UP)

def my_task(pin):
  print("Motion detected")

pin_pir.irq(trigger=Pin.IRQ_RISING,handler=my_task)

while True:
  ...

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.