Tuto pas à pas Python : le détecteur de mouvements PIR

Deuxième tutoriel en python dédié au pack d’accessoires.
Cette fois on va se pencher sur le capteur pir. Le programme réalisé sera tout aussi simple que celui du tuto en C++ disponible ici.

Avant tout : Installation des outils

Ce tuto est réalisé sur l’IDE Mu pour Circuit Python.
Si vous n’avez pas encore installé l’un et l’autre veuillez vous référer au guide d’installation Mu et CircuitPython disponible sur le site.

les branchements

Etape 1 : La base du programme

Commencez par ouvrir Mu et créer un nouveau fichier.
Copiez-y le code suivant :

from gamebuino_meta import begin, waitForUpdate, display, buttons, color
import board
import digitalio

while True:
    waitForUpdate()
    display.clear()

Cela va importer les libraires Gamebuino nécessaires au fonctionnement de notre programme, ainsi qu’une libraire “digitalio” dont on aura besoin pour travailler avec notre capteur.

La partie commencant par “while True:” constitue la boucle principale de notre programme, sans elle il ne se passerait rien.

Etape 2 : Lire depuis le capteur

On va tout d’abord configurer l’entrée de notre capteur pour pouvoir lire le signal qu’il envoie.
Pour cela deux petites lignes suffisent :

pir_pin = digitalio.DigitalInOut(board.D8)
pir_pin.direction = digitalio.Direction.INPUT

On définit le pin dédié au capteur comme étant le pin digital D8 puis on définit ce pin comme une entrée, entrée depuis laquelle on va pouvoir lire une donnée.

Pour cette lecture on va stocker l’information obtenue dans une variable “old_value” telle que :

old_value = pir_pin.value

Cela nous permet d’avoir une lecture initiale au lancement du programme qui nous servira de référence.

Une fois ce point de référence établi au lancement du programme la suite est très simple et se passe dans notre boucle principale.
on ajoute une variable locale “pir_value” où l’on assigne la valeur lue depuis le capteur comme pour old_value :

while True:
    waitForUpdate()
    pir_value = pir_pin.value

Il nous suffit ensuite de comparer pir_value et old_value pour déterminer si on le capteur détecte quelque chose ou non.
La comparaison se fait en deux temps :

while True:
    waitForUpdate()
    pir_value = pir_pin.value
    if (pir_value):
        if not (old_value):
            display.clear()
            display.print('Motion detected!')
    else:
        if (old_value):
            display.clear()
            display.print('No Motion')
    old_value = pir_value

Dans la première partie on vérifie si le capteur détecte quelque chose, si oui on vérifie que ce n’était pas déjà le cas en vérifiant que old_value est nulle, auquel cas on efface l’écran avant d’afficher le message “Motion detected !”
Dans la seconde partie, n’ayant pas détecté d’activité on vérifie si old_value contient quelque chose, si oui c’est que le capteur ne détecte rien à ce moment-là, on efface donc l’écran avant d’afficher le message “No Motion”.
Et enfin on remplace le contenu de old_value par celui de pir_value pour établir une continuité dans notre boucle.

Félicitations, vous avez survécu à ce (très court) tutoriel python !

Votre programme devrait ressembler à ceci :

from gamebuino_meta import begin, waitForUpdate, display, buttons, color
import board
import digitalio

pir_pin = digitalio.DigitalInOut(board.D8)
pir_pin.direction = digitalio.Direction.INPUT

old_value = pir_pin.value

while True:
    waitForUpdate()
#    display.clear()
    pir_value = pir_pin.value
    if (pir_value):
        if not (old_value):
            display.clear()
            display.print('Motion detected!')
    else:
        if (old_value):
            display.clear()
            display.print('No Motion')
    old_value = pir_value

Vous pouvez maintenant le charger sur votre console avec circuit python, mais n’oubliez pas d’en faire une copie sur votre ordinateur pour ne pas le perdre.

1 Like