Créer une porte de bureau à verrouillage automatique avec capteur de proximité pour smartphone
Pssst – voulez une protection high-tech pour votre bureau à domicile, ou une serrure secrète pour votre « atelier » (ok, vous m'avez compris, c'est en fait un donjon/salle de jeux) que les enfants ne pourront pas comprendre? Nous avons ce qu'il vous faut. Construisons une serrure intelligente DIY qui détecte automatiquement quand vous êtes là et se verrouille quand vous n'y êtes 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; une façon de le faire est Bluetooth.
En mode découverte, il diffuse un numéro d'identification unique - mais même lorsqu'il ne se permet pas spécifiquement d'être découvert, tout ce qui connaît cette adresse peut essayer de la pinger. Si une réponse est entendue, cela indiquera si elle est à portée ou non.
Nous allons configurer 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 mettra en action et verrouillera la porte.
Vous aurez besoin
- Raspberry Pi - n'importe quel modèle devrait fonctionner car ce n'est pas une tâche gourmande en CPU, mais j'utilise un ancien modèle B, et les brochages GPIO peuvent être légèrement différents sur votre modèle. Voir la section sur le mode carte ci-dessous. Vous aurez également besoin de quelques éléments de base comme une connexion Ethernet filaire ou une configuration Wi-Fi ; plus carte SD et câble d'alimentation micro USB.
- Adaptateur USB Bluetooth. Adafruit vend un module Bluetooth 4.0 BLE dont le fonctionnement a été confirmé (qu'est-ce que le Bluetooth 4.0 ?), mais vous devriez tester ceux que vous avez déjà dans le coin 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 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 bien vivant.
- Panneau de dérivation GPIO (« cobbler ») et câbles de démarrage. Vous pouvez travailler directement à partir des broches du Pi, mais c'est beaucoup plus facile si vous avez des étiquettes sur chaque broche, et elles ne coûtent que 6 $ de toute façon.
- Carte relais. Vous avez ici une grande variété de choix, et tout fonctionnera s'il est conçu pour être utilisé avec un microcontrôleur et peut piloter au moins 12 volts à 5 ampères. J'ai utilisé une carte générique à 4 canaux similaire à celle-ci pour environ 5 $, mais je vais supposer que vous savez comment faire fonctionner la vôtre.
- Serrure à électroaimant 12/24V, bien qu'une serrure à solénoïde électronique devrait également fonctionner. Celui que j'ai acheté a une force de maintien de 180 KG et est livré avec des plaques de montage et des instructions, pour environ 35 $.
- Alimentation 12/24V. Le verrou magnétique doit avoir une alimentation séparée - quoi que vous fassiez, n'essayez pas de tirer l'alimentation du Pi.
- L'application Python Lock.py, mais nous l'écrirons au fur et à mesure.
Travailler avec Bluetooth
Bluetooth est au cœur de ce projet, commençons donc par installer un support Bluetooth et testons notre adaptateur. Vous pouvez le faire directement à partir du Pi ou SSH à distance (comment configurer Windows en SSH dans votre Pi).
sudo apt-get install bluez python-bluez
Insérez votre dongle si vous ne l'avez pas déjà fait et examinons ce qu'il signale.
hcitool dev
Si vous avez quelque chose répertorié dans la sortie, vous êtes prêt à partir. Ensuite, nous utiliserons un script Python pour rechercher les appareils Bluetooth à proximité et saisir l'adresse unique de l'appareil. Nous n'avons besoin de le faire qu'une seule fois pour chaque appareil.
wget https://pybluez.googlecode.com/svn/trunk/examples/simple/inquiry.py python survey.py
Si vous voyez « 0 appareils trouvés », 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 découvert que je devais ouvrir la page des paramètres Bluetooth sur mon iPhone pour le lancer en mode découverte, puis c'est arrivé :
Super, créons maintenant la première étape de notre logiciel qui effectue la détection. Créez une application Python appelée detect.py , et ouvrez-le avec Nano.
nano detect.py
Collez 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 l'adresse de votre appareil Bluetooth :
result =bluetooth.lookup_name('78:7F:70:38:51:1B', timeout=5)
Appuyez sur CTRL-X et Oui pour fermer et enregistrer. Exécutez le même code, et vous voyez quelque chose comme ceci :
Le code doit être très simple à comprendre même si vous n'avez jamais touché Python auparavant :il recherche un appareil 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 déplacement dans et hors de portée (probablement environ 4 m en réalité). Vous pouvez réduire ou augmenter le temps entre les scans, mais j'ai pensé que 10 secondes était un temps raisonnable pour potentiellement devoir attendre que la porte se déverrouille, c'est là où nous allons avec tout ce projet après tout.
Je dois ajouter que je ne connais pas la consommation d'énergie de cette opération, mais je suppose que le fait de faire un ping plus souvent sur un appareil consommerait nécessairement plus d'énergie. Je n'ai pas vu de problèmes de performances évidents lors des tests, mais si la durée de vie de la batterie est une préoccupation sérieuse pour vous, envisagez d'avoir un interrupteur à l'intérieur de votre bureau qui active et désactive la boucle d'analyse, donc une fois que vous êtes à l'intérieur, vous pouvez suspendre le verrouillage système, puis réactivez le scan lorsque vous partez.
Félicitations, vous avez maintenant une application Python qui sait quand vous êtes à portée, nous pouvons donc commencer à agir en conséquence.
Modes de 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 consiste à 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 des ports USB sur la droite). La broche 2 est juste au-dessus.
Cependant, si vous avez une carte de dérivation GPIO (« cobbler »), les étiquettes que vous avez proviennent d'un mode alternatif, appelé « BCM » (canal Broadcom SOC), et sont généralement écrites avec GPIO ou P comme préfixe du numéro. Vous n'avez pas strictement besoin d'une évasion GPIO - cela facilite simplement les choses. Si vous n'avez pas de tableau de bord et que vous ne voulez pas en acheter un, utilisez ce schéma :
Notez que le modèle B d'origine révision 1, révision 2 et les modèles B+ et Pi2 ont tous des brochages différents. Reportez-vous à cette question StackExchange pour un diagramme correct pour votre tableau.
Dans ce code de projet, j'utilise le système de numérotation BCM GPIO qui correspond à la carte de dérivation Adafruit que j'ai. Des modifications mineures sont nécessaires si vous souhaitez utiliser le mode pin littéral.
Câbler dans un relais
Fixez la carte de dérivation, en vous assurant que le fil des broches 1 et 2 (celles dans le coin de votre Pi) se fixe à 3v3 et 5V0 sur la dérivation. Vous voudrez peut-être sortir un testeur de tension pour vérifier cela.
Avant de continuer, vérifiez si quelqu'un d'autre a utilisé votre relais particulier avec le Raspberry Pi (ou trouvez-en un à l'avance qui fonctionne). Certains peuvent nécessiter 5 V pour s'activer, mais le RPi ne peut fournir que 3,3 V sur les broches de sortie GPIO. Par chance, celui que j'utilise est content de 3.3V, donc je n'ai pas eu besoin de circuits supplémentaires, 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 montrait comment câbler un circuit à transistor pour augmenter de 3,3 V à 5 V complet 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 5 V après tout).
Pas besoin de câbler l'électro-aimant pour le moment, car vous pourrez entendre un clic audible lorsque le relais se déclenche.
Ensuite, récupérons du code pour interagir avec les ports GPIO.
Nous commencerons par tester en dehors de Python pour confirmer que tout fonctionne sur les ports eux-mêmes. Installez câblagePi, qui vous donne quelques outils de ligne de commande utiles.
git clone git://git.drogon.net/wiringPi cd câblagePi ./build
Une fois installé, configurez la broche GPIO 23 pour être une sortie.
gpio -g mode 23 out
Maintenant, faites une analyse rapide de tous les ports pour confirmer
gpio -g readall
Vous aurez quelque chose de similaire à cela, bien que le vôtre puisse être plus long sur un modèle B+ ou Pi2 car il a plus de broches GPIO :
Pour plus de détails :créez une porte de bureau à verrouillage automatique avec un capteur de proximité pour smartphone
Processus de fabrication
- Coffre bancaire
- Circuit de capteur de proximité simple et fonctionnement avec les applications
- Considérez le problème n°1 avec les réseaux de capteurs intelligents basés sur Bluetooth
- Cypress :les microcontrôleurs Bluetooth offrent un réseau maillé avec une connectivité omniprésente pour les smartphones
- Capteur de suivi de ligne avec RPi
- API de capteur environnemental avec un RPi
- Un capteur de proximité analogique simple avec interface numérique (pour Raspberry Pi) [dernière mise à jour :7 février 2014]
- Capteur Portenta et thermocouple (avec MAX6675)
- Surveillance du CO2 avec le capteur K30