Raspberry PI ~ 13 : Détecter l’ouverture des portes et fenêtres

Ce post est le treizième d’une liste de tutoriels sur le raspberry PI, cliquez ici pour accéder au sommaire ! 😀

En attendant que je parvienne à trouver la motivation pour monter la vidéo sur la sonde température radio (j’ai la vidéo, mais mon monteur est en plein partiels et je n’ai aucune notion d’adobe première ^^), je vous lance  ce ptit tuto à vous mettre sous la dent.

Aujourd’hui nous allons voir comment détecter l’ouverture d’une porte, d’une fenêtre, ou de quoi que ce soit qui s’ouvre ou qui se ferme, avec le raspberry PI et un petit composant à environ 3€.

L’état de la porte (ouverte/fermée) sera visible depuis une interface web, ou depuis notre interface de reconnaissance/synthèse vocale YURI (implantée dans les précédents tutoriaux sur le raspberry PI)

Une petite vidéo démonstration pour nous mettre en jambe :

video-2013-01-23-21-30-27 from idleman on Vimeo.

Le principe :

Un mini aimant est fixé sur le bord de la partie mobile votre porte (que nous appellerons le battant), et un petit capteur sera fixé sur la partie fixe de la porte (que nous appellerons tenant), ce capteur est nommé “capteur à effet de hall”.

C’est quoi ce composant cheulou au nom barbare ?

Un capteur à effet de hall est simplement un composant qui vas renvoyer 1 ou 0 si il est, ou non, à proximité d’un champs magnétique (par exemple émis par un aimant)

D’une certaine manière, c’est un bête interrupteur, à ceci près qu’il ne réagit pas à une pression mais à une “magnétisation” proche.

Mais alors, pas besoin d’un composant, pourquoi ne pas utiliser juste deux fils qui se touchent ?

Et bien surtout à cause du frottement, l’avantage du capteur a effet de hall est qu’il n’y a aucun contact “physique” puisque celui ci est magnétique donc :

  1. Pas de risque que le montage bloque la porte
  2. Pas de risque que l’usure du frottement abime le circuit
  3. Moins casse gueule et moche qu’un bête système de fils
  4. Sur la partie mobile, pas besoin de fils, d’alimentation, ou du moindre circuit : un aimant est en moyenne actif 400 ans, ne nécessite aucune alimentation,ne coute rien, et peut être minuscule.

Vous l’aurez compris, ce capteur à effet de hall sera branché au raspberry PI et lui enverra du 0 (l’aimant est lointain donc la porte est ouverte) ou sur 1 (l’aimant est proche donc la porte est fermée), le rapsberry Pi mettra à jour sa base de données (ici un simple fichier texte) qui sera alors consulté par l’interface web et par YURI.

Ce que je ne vous dis pas

Oai je sais, c’est con puisqu’au final je vous le dis, mais respectez mon style littéraire bande de gaufres ! 😀

J’ai dis plus haut que le capteur renvoyait une valeur digitale (0 ou un 1) et fonctionnait un peu comme un interrupteur, je vous ai mentis 😀

En réalité le capteur seul est plus une “résistance” qui vas varier en fonction de la proximité du champs magnétique et renvoyer une valeur analogique (0.2,1.4 etc…), et c’est un problème pour nous qui avons besoin d’un 0 ou d’un 1.

C’est la raison pour laquelle nous avons commandé un capteur avec un petit circuit associé, ce circuit comportes quelques autres composants qui vont traiter la valeur analogique et, a partir d’un certain seuil, définir qu’elle envoie un 0 ou un 1 (ex : si la résistance est entre 0 et 2,5 on envoie 0, sinon on envoie 1) .

Et la ou cette petite carte est top, c’est que vous avez la possibilité de régler ce seuil !! En effet un ptit potentiomètre qui se présente sous la forme d’une vis (donc réglable avec un tournevis plat) permet de faire varier ce seuil, ainsi nous pourrons agir sur la sensibilité de notre détection de porte en fonction de la porte et de la puissance de l’aimant choisis.

Je vous conseille bien évidemment de commander les aimants conseillés ci dessous qui sont minuscules et surpuissants, mais sur la théorie n’importe quel aimant avec un peu de portée fait l’affaire :).

Le matériel :

Le montage :

Une grand mère unijambiste pourrait faire ce montage dans le noir mais je vais quand même vous le spécifier histoire que les lecteurs les moins sobres puissent nous suivre :

ouverture

nb : J’ai choisis de relier les données sur le pin physique 11 du raspberry, qui correspond au numéro “0” avec la librairie wiring PI.

Le code :

On vas avoir :

Un programme en C qui vas vérifier toutes les x secondes l’état du pin “0” (qui sera donc à 0 ou 1 en fonction de si la porte est ouverte ou fermée) et envoyer l’état a une page php.

Une page php qui vas enregistrer la valeur dans une base de données (ici un fichier texte)

Enfin une page html basique qui vas faire un appel ajax au fichier texte de la base de donnée toutes les x secondes et afficher “porte fermée” ou “porte ouverte” en fonction du contenu du fichier texte.

Notez que dans le fichier PHP nous avons aussi prévu quelques lignes pour yuri (yuri requête sur la page php, qui vas vérifier l’état du fichier et retourner à yuri la phrase a dire en conséquence “porte fermée” ou “porte ouverte”).

  1. Téléchargez le programme ICI
  2. Décompressez son contenu dans /var/www/capteurOuverture
  3. Réglez les permissions des fichiers (sudo chmod -R 777 /var/www/capteurOuvertureou moins bourrin avec un 775 ou un chown www-data)
  4. Si vous voulez utiliser YURI, copiez le xml ouverture.xml du zip dans votre répertoire macros de yuri, et éditez le en remplaçant  “votre.raspberry.pi” par l’adresse réseau de votre raspberry PI

L’utilisation

Lancez le programme en C avec les paramètres :

  1. Adresse de la page php
  2. Numéro wiring Pi du pin auquel vous avez relié le capteur

ex : ./capteurOuverture /var/www/capteurOuverture/capteurOuverture.php 0

Lancez l’adresse http://votre.raspberry.pi/capteurOuverture (en remplaçant évidemment “votre.raspberry.pi” par l’adresse réseau de votre raspberry PI)

Ouvrez/fermez votre porte et visualisez le résultat sur l’interface web

Interrogez yuri en ouvrant/fermant votre porte

C’est tout pour aujourd’hui 🙂 bisous mes poulets, moi je part fêter mon quart de siècle ! 😀

165 réactions au sujet de « Raspberry PI ~ 13 : Détecter l’ouverture des portes et fenêtres »

    • Idleman Auteur ArticleRéponse

      Bien sûr que non :), il faut juste un capteur à effet de hall par portes, le même pi peut être utilisé pour toutes, c’est juste que je n’avais pas de fils assez longs pour laisser le pi sur mon bureau, d’ou sa présence près de la porte 🙂

  1. Neomatix Réponse

    Bonsoir,

    Tout d’abord, merci pour ce tuto très instructif, que je me ferais un plaisir de mettre en application dès que j’aurais reçu mon Pi !
    J’avais juste une suggestion par rapport au contrôle vocal de YURI (marrant, ça me fait penser à Code Lyoko, allez savoir pourquoi !). J’ai vu dans les commentaires du tuto sur YURI que pas mal de gens espéraient trouver le moyen de se passer du PC, mais ne serait-il pas faisable (d-d-double négation power !) d’utiliser DSpeech (synthèse + reconnaissance vocale, dispo en 9 langues dont le français) : http://dimio.altervista.org/eng/ directement sur le Raspberry ? En utilisant l’astuce de la machine virtuelle (VMWare Player + Unity) pour faire tourner ladite application sur Linux. Avec un micro en USB sur le Pi, ça permettrait de se débarrasser du PC, non ?

    Etant novice sur tout ce qui est software, je ne saurais m’avancer plus.

    Sur ce, merci encore pour cette série de tutos que j’ai découvert ce soir et bon quart de siècle à toi !

    Neomatix

    • Idleman Auteur ArticleRéponse

      Visiblement Dspeech utilise le framework speech de microsoft, on en revient donc exactement au même point qu’avec yuri ^^, alors évidemment on peux envisager de faire tourner un windows avec yuri sur le raspberry pi via une VM, mais franchement je ne le tenterais pas, le pauvre rpi risquerais de ne pas pouvoir assurer le service bien longtemps XD

      Perso ça ne me dérange pas du tout d’avoir une machine allumée à coté, ce n’est pas pour le prix que ça coute de recycler un vieux pc en serveur vocal, du coup c’est vrai que je ne fait pas trop d’efforts pour améliorer ce coté la ^^, en plus je trouve la librairie de windows vraiment très performante (et c’est rare que je dise ça de microsoft ^^)

      • Idleman Auteur ArticleRéponse

        Nb : après quelques recherches, le rpi ne semble pas pouvoir faire tourner un windows tout court, quelle que soit la méthode ^^

        • Stéphane Réponse

          j’ai déjà vu sur un blog un gars réussir à faire tourner windows 3.1 🙂 une vrai bête de course …

          Je sais ce commentaire n’aide pas, mais j’ai pas pu m’empêcher.

    • Idleman Auteur ArticleRéponse

      Les deux sont aussi simple en terme d’utilisation, et les deux peuvent être utilisés dans ce montage.

      J’ai choisis le capteur à effet de hall essentiellement parce que, contrairement aux capteurs ILS, il est possible de régler son seuil de switch, et donc d’influer sur la portée de la prise en compte du champ magnétique.

      Un capteur ILS est a seuil fixe.

      Autre petit avantage de la carte a effet de hall : elle dispose d’une led intégrée affichant le contact/non-contact magnétique ce qui est utile pour le réglage et la maintenance du dispositif.

      • oedipe78 Réponse

        L’ILS est plus adapté, c’est comme ça que tous les systèmes d’alarme fonctionne pour protéger une porte.

        Pourquoi utiliser un capteur a effet hall qui te donne plusieurs états alors que tu veux du Tout Ou Rien?

        L’avantage de l’ILS, c’est que tu peux les mettre en série, et ainsi gérer plusieurs portes avec une seul borne du Raspberry.

        Le capteur s’achète partout pour quelques euros. Et tu n’as pas besoin de carte contrairement aux capteurs à effet hall.

        Pour le voyant, tu rajoutes une led en série.

        • Idleman Auteur ArticleRéponse

          Comme je le disait, c’est un choix pour moi il n’y a as plus ou moins adapté, personnellement, je préfère pouvoir définir la sensibilité et donc la portée avant changement d’état sans avoir à toucher à la partie magnétique, le capteur a effet de hall se prête parfaitement à ce besoin, après je n’empêche personne de prendre de l’ILS comme bon lui semble hein 🙂

          En revanche tu as raison pour le montage en serie ça peut être intéressant, si ce n’est qu’on ne pourra pas définir quelle porte est ouverte mais uniquement « q’une ou plusieurs des portes sont ouvertes », si c’est bon pour un système de sécurité, ca l’est moins pour un système domotique qui doit pouvoir gérer également des scénarios (ex: si la porte du salon est ouverte, j’allume le salon, quand j’ouvre la porte du garage, le salon ne doit pas s’allumer)

  2. Paul Réponse

    Juste pour te dire que j’ai branché le capteur de mouvement IR de DX sur la pin 11 avec ton code et ça marche niquel !

    • Idleman Auteur ArticleRéponse

      Ha ha ha ^^ pas étonnant c’est exactement le même fonctionnement :), le mien n’est toujours pas arrivé je suis dégouté ^^, faut croire que bordeaux n’est pas aussi bien relayé que ta ville 😀

      Quand j’aurais tous mes éléments j’améliorerais mon code (qui à été fait a l’arrache en 2min pour l’exercice) afin de l’intégrer un peu plus a mon interface hcc et gérer les multi périphérique (parce que la on ne peux gérer qu’un pin par programme c’est pas top ^^)

  3. ralfmalone Réponse

    Excellent!
    Existe-t-il un moyen d’envoyer l’info du capteur au Raspberry par ondes radios?

    • Idleman Auteur ArticleRéponse

      Oui il y a moyen, suffit de relier ça au kit émetteur récepteur qu’on à déjà utilisé

      Comme le rpi n’est pas en temps réel, c’est difficile de passer beaucoup d’info pour la radio, l’ouverture/fermeture des portes ça irait, mais la sonde temperature par exemple, ça reçoit très mal le signal, du coup j’insiste pas trop sur la radio tant que j’ai pas trouvé un moyen de rendre le signal plus sûr (un match sur 3 environ pour le moment, et la portée est pas top).