Utiliser un détecteur de mouvement Infrarouge (PIR) sur la Pi Pico en MicroPython
(Mis à jour le 04/12/2023)
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 .
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.
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.
Voici un exemple de montage sur une breadboard utilisant un capteur PIR (avec la polarité d’Adafruit) avec la Pi Pico :
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.
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 ).
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.
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.