En plus d’une caméra de surveillance et de capteurs de mouvement, les informations sur les fenêtres et les portes ouvertes sont également intéressantes pour un système de surveillance auto-construit. Un contrôle avec des barrières lumineuses infrarouges ou d’autres méthodes serait certainement possible, mais dans ce cas, c’est beaucoup plus compliqué.
Dans ce tutoriel, il sera montré comment vérifier facilement l’état d’une fenêtre, par exemple, à l’aide d’un interrupteur magnétique.
Pièces de matériel requises
Heureusement, il ne faut pas grand-chose pour fixer l’interrupteur, et la plupart des pièces sont probablement déjà présentes dans les caisses de la plupart des hobbyistes. J’ai utilisé ces composants :
- 1 paire d’interrupteurs magnétiques
- Résistors (470 Ω et 10k Ω)
- 1 x Transistor BC547
- Câble Jumper
Installation
La configuration est telle que montrée dans l’image. Comme broche d’entrée j’ai utilisé GPIO 17 (broche 11 de la carte) :
Il importe peu de savoir lequel des deux câbles de l’interrupteur magnétique est relié à la base du transistor. L’extrémité libre doit être fixée à la fenêtre/porte et celle avec le meilleur câble au cadre fixe de la porte/fenêtre.
Si les deux parties sont trop éloignées l’une de l’autre, il est possible que seule une très petite quantité d’électricité traverse le transistor, ce qui est insuffisant pour réaliser l’interrupteur. Dans ce cas, vous pouvez essayer de faire en sorte que la connexion du Pi soit de 5V au lieu de 3.3V, mais alors vous devez absolument mettre une résistance entre l’émetteur du transistor et le GPIO.
Bien sûr, vous pourriez construire ce circuit comme une résistance de rappel et ainsi avoir un signal HIGH uniquement lorsque la fenêtre est ouverte.
Contrôles
Les contrôles sont très simples et peuvent être utilisés sous cette forme dans de nombreux projets. Au lieu de mon code Python, un code similaire peut également être utilisé en C ++ (en utilisant WiringPi).
Mais passons ensuite au code:
sudo python
1 2 3 4 5 6 |
importer RPi.GPIO comme GPIO GPIO.setmode(GPIO.BCM) # Numéros GPIO au lieu des numéros de carte MAGNET_GPIO = 17 GPIO.setup(MAGNET_GPIO, GPIO.IN) # Mode d'affectation GPIO impression GPIO.input(MAGNET_GPIO) |
Tant que la fenêtre et donc aussi le commutateur magnétique est fermé, un 1 est affiché sur la broche. Dès que le contact est interrompu, le transistor ne commute plus et un zéro est affiché sur le GPIO. Cela vous permet de demander si une fenêtre/porte est ouverte ou non.
Si vous voulez attendre que l’état change, vous pouvez utiliser la fonction suivante :
1 |
GPIO.add_event_detect(MAGNET_GPIO, GPIO.BOTH, callback=my_callback) |
Dans ce cas, une fonction appelée my_callback()
doit être présente, qui est ensuite appelée. Ici, les états GPIO.RISING
et GPIO.FALLING
au lieu de GPIO.BOTH
sont possibles.