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

Détecter des mouvements avec un détecteur Infrarouge (PIR) sur l’ESP32 en MicroPython

(Mis à jour le 23/06/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.

Comment fonctionne un capteur de mouvement 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 très facile d’utiliser un capteur infrarouge avec l’ESP32 en MicroPython. Le plus compliqué est de calibrer correctement le capteur PIR pour qu’il détecte les mouvements de manière précise, surtout compte tenu des différentes variantes des modules disponibles.

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

Les capteurs PIR disponibles dans les kits DIY sont généralement basés sur le modèle proposé par Adafruit .

Note

Parfois, ce module PIR est également 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 des versions chinoises similaires) :

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

  • Portée : Le capteur peut détecter un mouvement jusqu’à 7 mètres

  • Angle de détection : environ 120 degrés

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 de sortie de 3,3V est compatible avec l’ESP32.

Correspondance des broches

Module PIR

ESP32

OUT

GPIO36

5V

5V

GND

GND

Avertissement

Selon le fabricant du module, les broches 5V et GND peuvent être inversées. Veuillez vérifier attentivement les polarités.

Pour être sûr d’alimenter le capteur dans le bon sens, je vous propose l’astuce suivante :

Note

La broche 5V est du même côté que la diode orange du module :

Brochage polarité capteur HC-SR501 PIR

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

Câblage du PIR avec carte ESP

Câblage d’un capteur PIR (Adafruit) avec une carte uPesy ESP32 Wroom DevKit

Note

La broche GPIO36 a été choisie arbitrairement : vous pouvez prendre n’importe quelles broches d’entrées logiques de l’ESP32 pour OUT .

Configurer la détection de mouvement

Il y a trois paramètres que vous pouvez ajuster pour calibrer la détection des mouvements : deux potentiomètres pour la sensibilité et la durée de détection, et un cavalier (jumper) pour activer l’option « Retriger ».

Astuce

Pour une configuration rapide, vous pouvez mettre les potentiomètres dans la même position que sur la photo.

Calibration potentiomètre capteur HC-SR501 PIR

Avertissement

Assurez-vous d’orienter le capteur de la même manière que sur la photo pour que les explications correspondent. Sinon, les indications gauche-droite et sens de rotation seront différents.

  • Potentiomètre de sensibilité (à droite) : Il règle la sensibilité du capteur en ajustant l’amplitude du mouvement requis pour déclencher la sortie. Pour augmenter la sensibilité, tournez le potentiomètre dans le sens horaire (sens des aiguilles d’une montre). Cela permet de détecter des mouvements plus discrets à une plus grande distance (environ 7 mètres), mais cela augmente également le risque de fausses détections.

Astuce

Les potentiomètres ont une rotation limitée à 180 degrés, veillez donc à ne pas les forcer. Utilisez de préférence un petit tournevis pour les ajuster.

  • Potentiomètre de durée (à gauche) : Il contrôle la durée pendant laquelle le signal de sortie reste actif après la détection d’un mouvement. Cela correspond à la largeur de l’impulsion générée. Si le capteur est connecté directement à un circuit sans logique (par exemple, 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 en cas d’absence de mouvement. Pour augmenter la durée, tournez le potentiomètre dans le sens horaire. À la position maximale, le signal reste actif pendant plusieurs minutes.

À côté des potentiomètres, il y a 3 broches mâles dans un coin, dont deux sont reliées par un cavalier (jumper) de couleur jaune ou noire.

Par défaut, le cavalier est placé dans la position la plus proche du coin, en position “L”. Avec cette configuration si un mouvement est détecté alors que le signal de sortie est déjà actif (génération d’impulsion en cours), il sera ignoré.

Cependant, si vous déplacez le cavalier pour l’éloigner du coin (en position “H”), lorsqu’un mouvement est détecté alors que le signal de sortie est déjà actif, la durée de génération du signal en cours est prolongée pour tenir compte de la nouvelle détection de mouvement (mode de déclenchement multiple).

Explication mode Simple trigger PIR
Explication mode Simple trigger PIR

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

Ce n’est pas la méthode que je recommanderais, mais si vous n’avez pas d’oscilloscope sous la main, cela peut être pratique. La méthode consiste juste à brancher une LED en sortie de la broche OUT du capteur qui génère l’impulsion. Quand un mouvement est détecté, la LED devrait s’allumer.

Astuce

Si l’impulsion est très rapide, il se peut que ce ne soit pas réellement visible à l’œil.

Câblage du PIR avec carte ESP

Détecter le mouvement sur l’ESP32 en Micro Python

Une fois que le bon fonctionnement du capteur PIR est validé, nous pouvons intégrer la logique qui permettra à l’ESP32 de détecter un mouvement.

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(36, 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 l’ESP32.

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 l’ESP32.

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(36, mode=Pin.IN, pull=Pin.PULL_UP)

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

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

while True:
  ...