mardi 26 septembre 2017

Détecteur de mouvement infrarouge passif (PIR) et Raspberry Pi

Je vous explique aujourd'hui comment faire en sorte que votre Raspberry Pi détecte un mouvement grâce à un capteur à infrarouge passif (ou PIR, pour passive infrared).  Nous utiliserons un script en langage python.

Si vous n'avez encore jamais utilisé un capteur PIR, je crois que ce serait une très bonne idée de lire d'abord ce billet:  vous y trouverez entre autres choses des informations concernant leur principe de fonctionnement et les réglages qu'on peut effectuer au moyen de leurs potentiomètres. Si vous préférez utiliser une carte Arduino plutôt qu'un Raspberry Pi il existe également un petit tutoriel à ce sujet.

Connexions

Le capteur nécessite une tension d'alimentation
d'au moins 5 V, mais sa sortie délivre malgré tout une tension de 3,3 V qui est tout à fait appropriée pour notre Raspberry Pi.

En théorie, les branchements sont donc:
  • +5 V du PIR : 5V du Raspberry
  • OUT du PIR : N'importe quel GPIO du Raspberry Pi, j'ai choisi la pin #16 (GPIO 23).
  • GND du PIR:  GND du Raspberry Pi

J'ai précisé "en théorie" car, bien que tous les tutoriels que j'ai consultés prétendent que tout fonctionne très bien de cette façon, mon module PIR était à toute fin pratique inutilisable si je l'alimentais au moyen d'une des sorties 5 V du Raspberry Pi (il détectait continuellement un mouvement, même lorsqu'il n'y en avait pas).

Si vous constatez ce genre de problème de votre côté également, la solution est simple:  utiliser une alimentation autonome pour le capteur PIR (en n'oubliant pas de relier la borne négative de l'alimentation à la masse (GND) du Rasbperry Pi, pour que toutes les parties de votre système mesurent la tension en utilisant la même référence).

Le circuit que j'ai utilisé était donc plutôt celui-ci:



Script python simple

Voici un premier script en python qui allume une LED (branchée à la pin #18: GPIO 24) lorsqu'un mouvement est détecté (un message indiquant qu'un mouvement a été détecté est également affiché à l'écran).



Émission d'un son lorsque le mouvement est détecté

Attaquons-nous maintenant à un projet un tout petit peu plus élaboré, qui pourrait s'avérer très amusant:  lorsque quelqu'un s'approchera du Raspberry Pi, celui-ci émettra un son (qui, espérons-le, surprendra notre intrus...).

Le son qui sera joué est le contenu d'un fichier ".wav".  Si vous voulez, vous pouvez créer vous-même ce fichier, au moyen d'un logiciel comme Audacity (par exemple, on pourrait vous entendre crier "SORTEZ D'ICI IMMÉDATEMENT!"), ou visiter une banque de sons libre de droits comme, par exemple "La sonothèque".  J'ai choisi un rire un peu inquiétant, je l'ai téléchargé sur mon Raspberry Pi, et j'ai rebaptisé le fichier "mon_son.wav" (bien entendu, vous choisissez le nom que vous voulez, mais le script ci-dessous suppose qu'il s'appelle "mon_son.wav").

Avant d'aller plus loin, ce serait une bonne chose de vous assurer que votre Raspberry Pi est en mesure de produire le son décrit par ce fichier.  Vous vous assurez donc que des enceintes multimédia sont branchées sur la sortie jack audio de votre Raspberry Pi, ou encore que votre moniteur HDMI est en mesure de produire un son.

Une façon de jouer votre fichier ".wav", c'est d'entrer la commande "aplay mon_son.wav" dans le terminal.


Si vous n'entendez rien, ça pourrait être parce la sortie audio n'est pas correctement définie.

Pour forcer le son à être émis par le jack audio, vous écrivez cette commande:  "amixer cset numid=3 1"
Pour acheminer le son par la sortie HDMI, vous utilisez plutôt:  "amixer cset numid=3 2"


Maintenant que vous vous êtes assuré que le Rasbperry Pi joue correctement votre fichier ".wav", vous pouvez exécuter le script python ci-dessous (attention:  ce script doit se trouver dans le même répertoire que le fichier .wav).  Pour jouer le son, le script utilise la bibliothèque pygame, qui est déjà installée par défaut dans Rasbpian.

Il va sans dire que le capteur PIR est toujours branché à la pin #16 (GPIO 23), comme dans l'activité précédente.  La LED, toutefois, n'est pas nécessaire.



Chaque fois que quelqu'un s'approche du Rasbperry Pi, ce dernier émet un rire lugubre...

Photographie automatique

Si vous avez une Pi Camera, il est relativement facile de fabriquer un dispositif qui prendra une photographie ou une vidéo de tout intrus qui entre dans la pièce.  Puisqu'il s'agit d'un projet classique qui a souvent été traité ailleurs, je vous réfère à ce tuto (en anglais) par la Raspberry Pi Foundation.

Yves Pelletier (Twitter) (Facebook)

1 commentaire:

  1. Bonjour, j'ai essayé le programme et voici le message que j'ai en réponse.
    pi@raspberrypi:~ $ sudo python pirwav.py
    pygame 1.9.4.post1
    Hello from the pygame community. https://www.pygame.org/contribute.html
    Detection d'un mouvement!
    free(): double free detected in tcache 2
    Abandon

    RépondreSupprimer