I. Les capteurs infrarouges PIR▲
Les capteurs infrarouges PIR (Passive Infrared) fournissent des solutions très simples pour la détection de mouvement.
Tous les éléments sur terre émettent un faible niveau de radiation infrarouge, cependant tout corps exposé à une source de chaleur émet davantage de radiation.
Les capteurs PIR sont capables de détecter tout changement de niveau de radiation à l'intérieur de leur zone de détection. Par exemple, lorsqu'une personne entre dans une pièce, le capteur détecte le changement du niveau de radiation.
II. Câblage du circuit▲
Pour cette expérience, les éléments suivants sont nécessaires :
- une plaquette de câblage rapide ;
- six fils de raccordement mâle/femelle ;
- un capteur infrarouge PIR.
Tous ces composants peuvent être acquis en commerce spécialisé.
Prenez trois fils de raccordement mâle/femelle et branchez la partie femelle sur les connecteurs du capteur. Les trois connecteurs sont identifiés comme suit :
|
|
Branchez la partie mâle du fil de raccordement PIR-VCC à la ligne d'alimentation de la plaquette (la ligne rouge verticale), le fil de raccordement PIR-GND à la ligne de masse (la ligne bleue verticale) et le fil de raccordement PIR-OUT à l'un des jeux de trous libre de la plaquette. |
|
Utilisez un fil noir pour raccorder la broche n° 6 « GPIO-GND » du Rapsberry à un trou de la ligne de masse de la plaquette sur laquelle le fil PIR-GND est déjà relié. |
|
Utilisez un fil rouge pour raccorder la broche n° 2 « GPIO 5V » à la ligne d'alimentation de la plaquette sur lequel le fil PIR-VCC est déjà relié. |
|
Connectez avec un dernier fil, la sortie PIR-OUT à la broche n° 26 « GPIO 7 ». |
|
III. Lire l'état des capteurs en Python▲
L'état du capteur infrarouge PIR peut être lu de la même façon que l'état d'une entrée raccordée à un bouton poussoir (NDLR : voir Lecture d'un bouton).
Cependant, le capteur PIR ne nécessite pas de résistance de rappel puisque la tension délivrée en sortie est soit 0 V, soit 3,3 V.
La broche n° 26 « GPIO 7 » connectée à la sortie PIR-OUT du capteur doit simplement être configurée comme une entrée (NDLR : voir Configuration des entrées-sorties).
Entrez le code suivant en utilisant un éditeur de texte (nano par exemple) :
import
RPi.GPIO as
GPIO
import
time
GPIO.setmode
(
GPIO.BCM)
PIR =
7
GPIO.setup
(
PIR, GPIO.IN)
try
:
print
(
"PIR Module Test"
)
print
(
" (CTRL+C to exit)"
)
time.sleep
(
2
)
print
"Ready"
while
True
:
if
GPIO.input(
PIR):
print
(
"Motion detected! "
)
time.sleep
(
1
)
except
KeyboardInterrupt
:
print
(
"Quitting"
)
GPIO.cleanup
(
)
Au début du programme, il y a deux déclarations qui initialisent le fonctionnement du GPIO et les fonctions de gestion du temps.
import
RPi.GPIO as
GPIO
import
time
Ensuite, il y a la configuration de la numérotation du port GPIO dans le mode BCM (NDLR : voir Configuration générale) :
GPIO.setmode
(
GPIO.BCM)
Après la configuration du mode de numérotation, une variable spécifique PIR est utilisée pour stocker la connexion du Raspberry Pi associée à la sortie numérique du capteur PIR. Cette variable est utilisée pour configurer la broche comme étant une broche d'entrée avec :
PIR =
7
GPIO.setup
(
PIR, GPIO.IN)
Le programme proposé en exemple inclut une instruction try
...except
. Lors d'un CTRL+C, l'exception KeyboardInterrupt est levée, un message informe que le programme va être quitté, mais juste avant de le faire le port GPIO est réinitialisé.
À l'intérieur du try
, il y a des instructions d'affichage à l'écran et une boucle while
. Dans cette boucle, on interroge l'entrée GPIO toutes les secondes pour connaître son état. Si elle est à l'état haut, alors le message :
Motion detected!
s'affiche à l'écran.
IV. Réglages du capteur PIR▲
Sur le capteur il y a deux potentiomètres. L'un pour régler la durée minimale du maintien du signal de sortie à l'état haut suite à une détection de mouvement, l'autre ajuste la sensibilité du capteur PIR à la détection de mouvement. Suivez les instructions du manuel qui indique les fonctions de chacun des potentiomètres.
Si le programme indique continuellement qu'un mouvement est détecté, essayez de diminuer la sensibilité du capteur. Le curseur du potentiomètre tourné dans le sens contraire des aiguilles d'une montre permettra de la diminuer.
V. Le port GPIO et les fonctions de rappel (ou callbacks)▲
Dans les exemples précédents, une boucle de scrutation active (polling) a été utilisée pour relever périodiquement l'état de l'entrée du port GPIO.
Cependant, le port GPIO permet également l'utilisation de fonctions de rappel (ou callbacks). Cela signifie qu'une broche d'entrée peut être configurée pour appeler une fonction Python sur un événement particulier provenant d'un changement d'état (NDLR : voir aussi Interruption et détection de front).
Cela est plus avantageux que de scruter activement le port dans une boucle, car l'appel de la fonction est déclenché par interruption sans la nécessité de recourir à une fréquence de scrutation élevée (NDLR : le programme pouvant être occupé à autre chose par ailleurs, il doit revenir interroger l'état de l'entrée à intervalles suffisamment rapprochés pour ne pas manquer le changement d'état qui peut survenir à tout instant).
De cette façon, quand le programme tourne, le CPU du Raspberry attend passivement que le signal du capteur PIR bascule. Une fois le programme réveillé par détection d'un front, la fonction de rappel est activée. Dans notre cas, la fonction de rappel passée à la broche du GPIO est configurée sur un front montant du signal.
Les événements d'interruption possibles du GPIO sont GPIO.RISING (front montant), GPIO.FALLING (front descendant) et GPIO.BOTH (sur changement d'état).
import
RPi.GPIO as
GPIO
import
time
def
callback_up
(
channel):
print
(
"Up detected on channel
%s
"
%
channel)
PIR =
7
GPIO.setmode
(
GPIO. BCM)
GPIO.setup
(
PIR, GPIO.IN)
try
:
GPIO.add_event_detect
(
PIR, GPIO.RISING, callback=
callback_up)
while
1
:
time.sleep
(
100
)
except
KeyboardInterrupt
:
print
(
" Cleaning up the GPIO"
)
GPIO.cleanup
(
)
VI. Conclusion▲
Nous avons présenté une méthode très simple pour connecter un capteur de mouvement au Raspberry Pi. Nous pourrions compléter en ajoutant un buzzer, des LED et un système de verrouillage magnétique de porte et nous fabriquerions ainsi un système de sécurité complet à bas coût grâce au Raspberry Pi !
VII. Notes de la Rédaction de Developpez.com▲
Cet article est une traduction adaptée de l'article écrit par Jacob Marsh et paru dans le n°21 du magazine TheMagPi, sous le titre PIR motion detection.
Nous remercions les membres de la Rédaction de Developpez.com pour le travail de traduction, de relecture et d'adaptation qu'ils ont effectué, en particulier :
Merci également à Malick pour la relecture orthographique.