Faire une porte de bureau à verrouillage automatique avec capteur de proximité pour smartphone

Nous allons configurer un Raspberry Pi avec un adaptateur Bluetooth pour être à l'affût lorsque votre smartphone est hors de portée, et enclencher un relais en action pour verrouiller la porte.

Nous allons configurer un Raspberry Pi avec un adaptateur Bluetooth pour être à l'affût lorsque votre smartphone est hors de portée, et enclencher un relais en action pour verrouiller la porte.
Publicité

Pssst - voulez une protection haute technologie pour votre bureau à domicile, ou une serrure secrète pour votre "atelier" (ok, vous m'avez, c'est en fait une salle de donjon / jeu) que les enfants ne seront pas en mesure de comprendre? Nous vous avons couvert. Construisons un verrou intelligent DIY qui détecte automatiquement quand tu es là, et verrouille quand tu ne l'es pas.

Comment ça marche? PERSONNE NE SAIT! Ou plus précisément, Bluetooth.

Le concept

Votre smartphone est un appareil puissant qui révèle constamment des informations sur lui-même au monde extérieur; D'une certaine façon, c'est Bluetooth.

En mode découverte, il diffuse un numéro d'identification unique - mais même s'il ne se permet pas d'être découvert, tout ce qui connaît cette adresse peut essayer de le cingler. Si une réponse est entendue, cela indiquerait si elle est à portée ou non.

Nous allons mettre en place un Raspberry Pi avec un adaptateur Bluetooth pour être constamment à l'affût lorsque votre smartphone est hors de portée, et quand c'est le cas, le relais se met en action et verrouille la porte.

Tu auras besoin de

  • Raspberry Pi - n'importe quel modèle devrait fonctionner car ce n'est pas une tâche intensive en CPU, mais j'utilise un ancien modèle B, et les broches GPIO peuvent être légèrement différentes sur votre modèle. Voir la section sur le mode carte ci-dessous. Configuration de la mise en réseau sans fil sur votre Raspberry Pi Configuration de la mise en réseau sans fil sur votre Raspberry Pi Pratiquement chaque projet Raspberry Pi nécessite une connexion réseau, et une grande flexibilité peut être acquise en ignorant le port Ethernet en faveur d'une clé USB sans fil. Lire la suite ; plus une carte SD et un câble d'alimentation micro USB.
  • Adaptateur USB Bluetooth. Adafruit vend un module Bluetooth 4.0 BLE confirmé fonctionnement (qu'est-ce que Bluetooth 4.0? Comment Bluetooth 4.0 façonne l'avenir de la connectivité mobile Comment Bluetooth 4.0 façonne l'avenir de la connectivité mobile Bluetooth est l'étoile oubliée sur la fiche de spécifications de l'appareil. vous devriez tester tout ce que vous avez déjà traîné avant d'en acheter un nouveau juste pour ce projet. J'ai trouvé un ancien mini adaptateur Bluetooth standard que j'ai acheté au Japon et qui semble fonctionner correctement. Nous ne nous soucions pas des vitesses de transfert ou de la fiabilité de la connexion, car tout ce que nous faisons est d'envoyer une poignée de main rapide pour voir si un appareil est en vie et bien.
  • Carte de dérivation GPIO («cordonnier») et câbles de démarrage. Vous pouvez travailler directement à partir des broches sur le Pi, mais c'est beaucoup plus facile si vous avez des étiquettes sur chaque broche, et ils sont seulement de 6 $ de toute façon.
  • Relais de bord. Vous avez une grande variété de choix ici, et tout fonctionnera s'il est conçu pour une utilisation avec un microcontrôleur et peut conduire au moins 12 volts à 5 ampères. J'ai utilisé un tableau générique à 4 canaux similaire à celui-ci pour environ 5 $, mais je vais supposer que vous savez comment travailler le vôtre.
  • Serrure à électroaimant 12 / 24V, bien qu'un verrou électromagnétique électronique devrait également fonctionner. Celui que j'ai acheté a une force de maintien de 180KG et est livré avec des plaques de montage et des instructions, pour environ 35 $.
  • Alimentation 12 / 24V. Le verrou de l'aimant doit avoir une alimentation séparée - quoi que vous fassiez, n'essayez pas de tirer de l'énergie du Pi.
  • Lock.py application Python, mais nous allons écrire cela au fur et à mesure.

Travailler avec Bluetooth

Bluetooth est au cœur de ce projet, alors commençons par installer un support Bluetooth et tester notre adaptateur. Vous pouvez soit le faire directement à partir du Pi, ou SSH à distance (comment installer Windows à SSH dans votre Pi Configuration de votre Raspberry Pi pour une utilisation sans tête avec SSH Configuration de votre Raspberry Pi pour une utilisation sans tête avec SSH Le Raspberry Pi peut accepter Les commandes SSH sont connectées à un réseau local (via Ethernet ou Wi-Fi), ce qui vous permet de le configurer facilement.Les avantages de SSH ne se limitent pas à perturber le contrôle quotidien ... En savoir plus).

sudo apt-get install bluez python-bluez 

Insérez votre dongle si vous ne l'avez pas déjà fait, et regardons ce qu'il rapporte.

 hcitool dev 

Si vous avez quelque chose listé dans la sortie, vous êtes prêt à partir. Ensuite, nous allons utiliser un script Python pour interroger les périphériques Bluetooth à proximité, et saisir l'adresse unique du périphérique. Nous avons seulement besoin de le faire une fois pour chaque appareil.

 wget https://raw.githubusercontent.com/karulis/pybluez/master/examples/simple/inquiry.py python inquiry.py 

Si vous voyez "0 périphérique trouvé", vous n'avez pas de clé USB Bluetooth compatible ou votre smartphone n'est pas détectable. Ne désespérez pas cependant: j'ai trouvé que je devais effectivement ouvrir la page des paramètres Bluetooth sur mon iPhone pour le lancer en mode découverte, alors ceci est arrivé:

bluetooth identifié

Génial, créons maintenant la première étape de notre logiciel qui fait la détection. Créez une application Python appelée detect.py et ouvrez-la avec Nano.

 nano detect.py 

Coller dans cet exemple de code:

 #!/usr/bin/python import bluetooth import time while True: print "Checking " + time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime()) result = bluetooth.lookup_name('78:7F:70:38:51:1B', timeout=5) if (result != None): print "User present" else: print "User out of range" time.sleep(10) 

et ajustez la ligne suivante avec votre adresse de périphérique Bluetooth:

 result = bluetooth.lookup_name('78:7F:70:38:51:1B', timeout=5) 

Appuyez sur CTRL-X et Y pour fermer et enregistrer. Exécutez le même code, et vous voyez quelque chose comme ceci:

Détecteur de présence de l'utilisateur

Le code devrait être très simple à comprendre même si vous n'avez jamais touché Python auparavant: il scanne un périphérique Bluetooth particulier toutes les 10 secondes, et imprime un message différent selon qu'il est trouvé ou non. Basculez le Bluetooth sur votre téléphone pour simuler un mouvement dans et hors de portée (probablement environ 4m dans la réalité). Vous pouvez diminuer ou augmenter le temps entre les balayages, mais j'ai estimé que 10 secondes étaient un délai raisonnable pour potentiellement attendre que la porte se déverrouille, et c'est ce que nous faisons avec tout ce projet après tout.

Je devrais ajouter, je ne sais pas au sujet de la consommation de puissance de faire ceci, mais je supposerais que cingler un dispositif plus souvent consommerait nécessairement plus de puissance. Je n'ai pas vu de problèmes de performance évidents dans les tests, mais si la vie de la batterie est une préoccupation sérieuse pour vous, pensez à installer un commutateur dans votre bureau qui active et désactive la boucle de balayage, une fois que vous êtes à l'intérieur système, puis réactivez le balayage lorsque vous partez.

Félicitations, vous avez maintenant une application Python qui sait quand vous êtes à portée, donc nous pouvons commencer à agir sur ce point.

Modes de la carte GPIO

Avant de continuer, vous devez déterminer quel mode de carte vous allez utiliser. Il n'y a pas de bonne ou de mauvaise réponse, cela affecte simplement si vous spécifiez le numéro de broche littéral ou le numéro de broche GPIO virtuel.

La valeur par défaut est d'utiliser le numéro de broche littéral ("mode carte"), en commençant par la broche 1 en bas à gauche (si vous regardez le Pi avec les ports USB sur la droite). La broche 2 est juste au-dessus de ça.

Cependant, si vous avez une carte d'évasion GPIO ("cordonnier"), les étiquettes que vous avez proviennent d'un autre mode, appelé "BCM" (canal SOC Broadcom), et sont généralement écrites avec GPIO ou P préfixant le numéro. Vous n'avez pas strictement besoin d'une évasion GPIO - cela rend les choses plus faciles. Si vous n'avez pas de table de discussion et que vous ne voulez pas en acheter une, utilisez ce diagramme:

Diagramme de brochage A et B du modèle Raspberry Pi de RaspberryPi.org
Diagramme de brochage A et B du modèle Raspberry Pi de RaspberryPi.org

Notez que le modèle original B révision 1, révision 2, et les modèles B + et Pi2 ont tous des broches différentes. Reportez-vous à cette question StackExchange pour un diagramme correct pour votre forum.

Dans ce code de projet, j'utilise le système de numérotation BCM GPIO qui correspond à la carte de connexion Adafruit que j'ai. Des modifications mineures sont nécessaires si vous souhaitez utiliser le mode de broche littérale.

Fil dans un relais

Fixez la carte de dérivation, en veillant à ce que le fil des broches 1 et 2 (ceux dans le coin de votre Pi) attachent à 3v3 et 5V0 sur la cassure. Vous pourriez vouloir sortir un testeur de tension pour vérifier cela.

serrure intelligente rpi - gpio

Avant de continuer, vérifiez si quelqu'un d'autre a utilisé votre relais particulier avec le Raspberry Pi (ou en trouver un à l'avance que vous connaissez). Certains peuvent nécessiter l'activation de 5V - mais le RPi ne peut fournir que 3, 3V sur les broches de sortie GPIO. Par chance, celui que j'utilise est content avec 3.3V, donc je n'ai pas eu besoin de circuit supplémentaire, juste le 5V0 à VCC, GND à GND, et la broche GPIO 23 pour la première entrée de relais .

Mon précédent tutoriel sur GPIO Premiers pas avec GPIO Sur un Raspberry Pi Premiers pas avec GPIO Sur un Raspberry Pi Si vous pensiez que l'Arduino était cool, attendez de mettre la main sur un Raspberry Pi - ces choses sont incroyables. En plus d'être un ordinateur entièrement fonctionnel, ils ont également ... Lire la suite a montré comment câbler un circuit à transistors pour passer de 3, 3 V à 5 V maximum si vous en avez besoin (en fait, j'ai utilisé la même carte de relais pour ce tutoriel, mais il s'avère que je n'avais pas besoin de 5V après tout).

Pas besoin de câbler dans l'électro-aimant pour le moment, car vous entendrez un clic audible lorsque le relais se déclenchera.

Ensuite, prenons du code pour interagir avec les ports GPIO.

Nous allons commencer par tester en dehors de Python pour confirmer que tout fonctionne sur les ports eux-mêmes. Installez wiringPi, qui vous donne quelques outils de ligne de commande utiles.

 git clone git://git.drogon.net/wiringPi cd wiringPi ./build 

Une fois installé, configurez la broche GPIO 23 pour qu'elle soit une sortie.

 gpio -g mode 23 out 

Maintenant, faites un scan rapide de tous les ports pour confirmer

 gpio -g readall 

Vous aurez quelque chose de similaire, bien que le vôtre puisse être plus long sur un modèle B + ou Pi2 car il a plus de broches GPIO:

gpio readall

Cela peut être un peu déroutant au début, mais la table est divisée au milieu et l'ordre des colonnes est inversé de chaque côté. À l'extrême gauche et à l'extrême droite se trouve le numéro de broche BCM. Puisque nous utilisons 23, vous devriez voir le mode listé maintenant comme OUT. C'est une petite commande utile juste pour avoir une bonne idée de ce qui se passe avec toutes vos épingles à tout moment.

Pour écrire la broche haut ou bas, il suffit d'utiliser

 gpio -g write 23 1 gpio -g write 23 0 

Si tout va bien, si vous avez le relais correctement câblé, vous entendrez le déclic. Sinon, ne continuez pas tant que vous n'avez pas compris le câblage. Rappelez-vous, vous pouvez avoir besoin d'une tension plus élevée pour activer le relais.

Une fois que vous avez confirmé que le relais et le GPIO fonctionnent, ajoutez les modules Python pour GPIO.

 sudo apt-get install python-dev python-rpi.gpio 

Maintenant, modifions notre application Python pour activer ou désactiver le relais lorsque le téléphone est détecté. Vous trouverez le code final sur ce Gist. Copiez le fichier detect.py existant dans un nouveau fichier lock.py et ajoutez les commandes d'importation et de configuration suivantes:

 import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) RELAY = 23 GPIO.setup(RELAY, GPIO.OUT) 

Dans l'instruction IF, ajoutez une commande pour activer ou désactiver le relais. Notez que votre relais peut fonctionner avec un signal faible ou élevé, alors réglez en conséquence après le test.

 GPIO.output(RELAY, 1) 

Pour exécuter cette nouvelle version, préfixez la commande avec sudo - l'accès à GPIO nécessite des privilèges root.

Accrocher

Une fois que vous avez confirmé que le relais se déclenche avec votre capteur de proximité, ajoutez votre serrure électromagnétique. Du côté du relais, amenez le 12 V positif dans la borne étiquetée COM (commun), puis l'entrée de puissance positive de l'électro-aimant vers la borne NO ( normalement ouverte, c'est-à-dire normalement non connectée au activer le relais ).

Rejoindre le sol de l'alimentation et l'électro-aimant sur le terminal GND.

rpi smart lock - relais

Reportez-vous aux instructions de montage fournies avec votre serrure. la porte doit être assez épaisse, et c'est plus facile si elle s'ouvre du côté où vous voulez que la serrure soit allumée. Le mien était le contraire, j'ai donc besoin du support de montage en forme de L, ainsi que d'un morceau de bois supplémentaire pour augmenter l'épaisseur de la porte.

serrure intelligente rpi - électroaimant

Améliorations

C'était une preuve de concept pour moi de construire avec d'autres projets, et vraiment juste pour garder les yeux hors de mon bureau quand je ne suis pas là - ce n'est pas conçu pour être un système de sécurité infaillible. Pour cela, vous aurez besoin d'une batterie de secours pour maintenir la puissance en cas de coupure.

Bien sûr, si quelqu'un entre dans votre maison et prend la peine de couper votre pouvoir, vous avez probablement le plus gros problème d'être un psychopathe qui veut vous tuer, plutôt qu'un cambrioleur occasionnel. Vous voudriez également un verrou de pêne dormant physique en plus d'un verrou électronique, et un très gros bâton.

Bien sûr, cette technique de détection de proximité utilisant Bluetooth ne se limite pas à une serrure automatique - vous pouvez également l'utiliser pour déclencher l'ouverture de votre porte de garage lorsque vous rentrez chez vous, ou allumer votre home cinéma avant de franchir la porte.

Quelle fonctionnalité pensez-vous que je devrais ajouter ensuite? Avez-vous eu des problèmes pour construire cela? Faites-moi savoir dans les commentaires et je ferai de mon mieux pour vous aider!

In this article