Micropython-PIR-alarm
Introduction
Je ne sais pas pour vous? Mais personnellement, je me suis toujours demandé comment interfacer capteur d'alarme sur un projet microcontrôleur.
En tant que Maker, nous avons tous eu l'occasion de tester l'un ou l'autre capteur PIR... mais qu'en est il une fois que l'on est confronté à un modèle plus "professionnel" ?
Cet article concerne quelques un de ces capteurs.
Capteur PIR-476 standard
Voici le capteur le plus commun, destiné à un usage en intérieur.
Ce capteur PIR (Passive Infra Res) est utilisé en intérieur pour couvrir une surface de 10m x 10m avec un angle de détection de l'ordre de 90° (de 88° à 110°)
| Caractéristique | Valeur |
| Application | Intérieur |
| Couverture | 10m x 10m |
| Angle de détection | ~90° |
| Hauteur installation | 2.0 à 2.7m |
| Alimentation | 9 à 16V DC (31mA) |
| Sortie | OptoCoupleur (NC=Normally Closed), 20V DC max, 100mA) |
| Température | -10°C à 50°C |
| Dimensions | 52mm x 60mm (Haut: 92mm) |
| Poids | 80 gr |
| Autre | * Compensation de la température |
Fonctionnement de la sortie:
- Detection = LED Allumé = OptoCoupleur "Ouvert"
- Non detection = LED Eteinte = OptoCoupleur "Fermé"
De la sorte, si quelqu'un coupe le fil vers le détecteur alors le circuit s'ouvre, ce qui revient à une détection d'alarme.
| Contact | Description |
|---|---|
| + | Alimentation: 9 à 16V DC. |
| - | Alimentation: masse/GND. |
| com | Optocoupleur: Commun (son "émetteur") |
| NC | Optocoupleur: Contact normalement fermé (Normally Closed) lorsque le capteur ne détecte rien. "Collecteur" de l'optocoupleur. |
| Tamper | Contacts de l'anti-sabotage (si présent). |
Connexion sur MicroContrôleur
Raccordement Simple
L'exemple ci-dessous indique comment brancher le capteur sur un microcontrôleur 3.3V (comme Raspberry-Pi Pico).
L'entrée GP2 passe au niveau haut lorsqu'un mouvement est détecté.
L'entrée GP2 reste au niveau bas si rien n'est détecté.
Le script pour lire l'état de l'entrée est relativement simple:
import time
from machine import Pin
p = Pin( 2, Pin.IN )
while True:
print( "ALARM" if p.value() else "---" )
time.sleep(1)
| Une tension de 3.3V est parfaite pour transporter le signal sur une courte distance. Cette tension reste cependant trop faible pour propager le signal d'alarme fiablement sur une longue distance (>1m). |
Raccordement en cascade
Il est possible de brancher plusieurs capteurs sur une seule ligne en les branchant en série.
L'alarme est donc déclenchée lorsqu'un des capteurs détecte un mouvement.
| L'inconvénient de cette configuration est qu'il n'est pas possible de savoir lequel des capteurs à provoqué le déclenchement de l'alarme (c'est donc une gestion par "zones"). |
Raccordement analogique
Le raccordement en cascade ne permet pas d'identifier le capteur impliqué dans la détection.
J'ai d'abord pensé qu'une utilisation intelligente de résistances en pont diviseur de tension pourrait permettre l'identification du capteur.
Malheureusement, même avec 4 capteurs, il existe des cas il faut identifier une différence de 200mV. Ce qui n'est pas une situation fiable sur une installation filaire.
Augmenter la tension
Elever la tension du signal est une bonne façon de limiter l'impact des interférences sur ce même signal.
Cependant, cela implique une interface électronique du côté du microcontrôleur afin de ne pas dépasser la tension maximale autorisée sur les entrées.
Dans l'exemple ci-dessous, la tension d'alimentation des capteurs (9V) est également utilisée comme tension de signal. Un optocoupleur est utilisé côté microcontrôleur pour réduire le signal à 3.3V max.
Dans le cas présent:
- Detection = LED Allumé = OptoCoupleur "Ouvert" => Opto-coupleur microcontroleur "Ouvert" => GP2 = LOW
- Non detection = LED Eteinte = OptoCoupleur "Fermé" => Opto-coupleur microcontroleur "Fermé => GP2 = HIGH