Erstellen einer automatisch verriegelnden Bürotür mit Smartphone-Näherungssensor
Pssst – einen High-Tech-Schutz für dein Heimbüro oder ein geheimes Schloss für deine „Werkstatt“ möchtest (ok, du hast mich, es ist eigentlich ein Kerker/Spielzimmer) dass die Kinder es nicht verstehen? Wir geben dir Deckung. Lassen Sie uns ein intelligentes DIY-Schloss bauen, das automatisch erkennt, wenn Sie dort sind, und sperrt, wenn Sie nicht da sind.
Wie funktioniert es? NIEMAND WEISS! Oder genauer gesagt Bluetooth.
Das Konzept
Ihr Smartphone ist ein leistungsstarkes Gerät, das der Außenwelt ständig Informationen über sich preisgibt. eine Möglichkeit, dies zu tun, ist Bluetooth.
Im Discovery-Modus sendet es eine eindeutige Identifikationsnummer – aber selbst wenn es sich nicht ausdrücklich erlaubt, entdeckt zu werden, kann alles, was diese Adresse kennt, versuchen, sie zu pingen. Wenn eine Antwort zu hören ist, zeigt dies an, ob sie in Reichweite ist oder nicht.
Wir werden einen Raspberry Pi mit einem Bluetooth-Adapter einrichten, um ständig darauf zu achten, wenn Ihr Smartphone außer Reichweite ist. Wenn dies der Fall ist, rastet das Relais ein und verriegelt die Tür.
Sie benötigen
- Raspberry Pi – jedes Modell sollte funktionieren, da es keine CPU-intensive Aufgabe ist, aber ich verwende ein älteres Modell B, und die GPIO-Pinbelegungen können bei Ihrem Modell etwas anders sein. Siehe den Abschnitt über den Bordmodus weiter unten. Sie benötigen auch einige Grundlagen wie eine kabelgebundene Ethernet-Verbindung oder ein konfiguriertes Wi-Fi; plus SD-Karte und Micro-USB-Stromkabel.
- Bluetooth-USB-Adapter. Adafruit verkauft ein Bluetooth 4.0 BLE-Modul mit bestätigter Funktion (was ist Bluetooth 4.0?), aber Sie sollten alle testen, die Sie bereits herumliegen haben, bevor Sie ein neues nur für dieses Projekt kaufen. Ich habe einen alten Standard-Bluetooth-Mini-Adapter gefunden, den ich in Japan gekauft habe und der gut zu funktionieren scheint. Wir kümmern uns nicht um Übertragungsgeschwindigkeiten oder Verbindungszuverlässigkeit, da wir nur einen kurzen Handshake senden, um zu sehen, ob ein Gerät am Leben und in Ordnung ist.
- GPIO-Breakout-Board („Schuster“) und Überbrückungskabel. Sie könnten direkt von den Pins auf dem Pi aus arbeiten, aber es ist viel einfacher, wenn Sie Etiketten auf jedem Pin haben, und sie kosten sowieso nur 6 US-Dollar.
- Relaisplatine. Sie haben hier eine große Auswahl, und alles funktioniert, wenn es für die Verwendung mit einem Mikrocontroller ausgelegt ist und mindestens 12 Volt bei 5 Ampere ansteuern kann. Ich habe ein generisches 4-Kanal-Board ähnlich diesem für ungefähr 5 US-Dollar verwendet, aber ich gehe davon aus, dass Sie wissen, wie man mit Ihrem arbeitet.
- 12/24V Elektromagnetschloss, obwohl ein elektronisches Elektromagnetschloss auch funktionieren sollte. Der, den ich gekauft habe, hat eine Haltekraft von 180 kg und wird komplett mit Montageplatten und Anweisungen für etwa 35 US-Dollar geliefert.
- 12/24V-Netzteil. Das Magnetschloss muss über eine separate Stromversorgung verfügen – was auch immer Sie tun, versuchen Sie nicht, Strom dafür vom Pi zu ziehen.
- Lock.py Python-App, aber wir werden dies im Laufe der Zeit schreiben.
Mit Bluetooth arbeiten
Bluetooth ist für dieses Projekt von zentraler Bedeutung. Beginnen wir also mit der Installation von Bluetooth-Unterstützung und testen Sie unseren Adapter. Sie können dies entweder direkt vom Pi aus oder per SSH aus der Ferne tun (wie Sie Windows für SSH in Ihrem Pi einrichten).
sudo apt-get install bluez python-bluez
Stecken Sie Ihren Dongle ein, falls Sie dies noch nicht getan haben, und sehen wir uns an, was er meldet.
hcitool dev
Wenn in der Ausgabe etwas aufgeführt ist, können Sie loslegen. Als nächstes verwenden wir ein Python-Skript, um nach Bluetooth-Geräten in der Nähe abzufragen und die eindeutige Geräteadresse zu ermitteln. Wir müssen dies nur einmal für jedes Gerät tun.
wget https://pybluez.googlecode.com/svn/trunk/examples/simple/inquiry.py python query.py
Wenn Sie „0 Geräte gefunden“ sehen, haben Sie entweder keinen kompatiblen USB-Bluetooth-Dongle oder Ihr Smartphone ist nicht auffindbar. Aber nicht verzweifeln:Ich musste tatsächlich die Bluetooth-Einstellungsseite auf meinem iPhone öffnen, um es in den Erkennungsmodus zu versetzen, dann passierte Folgendes:
Großartig, jetzt erstellen wir die erste Stufe unserer Software, die die Erkennung durchführt. Erstellen Sie eine Python-App namens detect.py , und öffnen Sie es mit Nano.
nano-detektieren.py
Fügen Sie diesen Beispielcode ein:
#!/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 ):"Benutzer anwesend" drucken sonst:"Benutzer außerhalb der Reichweite" drucken time.sleep(10)
und passen Sie die folgende Zeile mit Ihrer Bluetooth-Geräteadresse an:
Ergebnis =bluetooth.lookup_name('78:7F:70:38:51:1B', timeout=5)
Drücken Sie STRG-X und J zu schließen und zu speichern. Führen Sie denselben Code aus und Sie sehen Folgendes:
Der Code sollte sehr einfach zu verstehen sein, auch wenn Sie Python noch nie zuvor berührt haben:Er sucht alle 10 Sekunden nach einem bestimmten Bluetooth-Gerät und druckt eine andere Nachricht aus, je nachdem, ob es gefunden wird oder nicht. Schalten Sie Bluetooth auf Ihrem Telefon um, um das Bewegen in und aus der Reichweite zu simulieren (in der Realität wahrscheinlich etwa 4 m). Sie können die Zeit zwischen den Scans verkürzen oder verlängern, aber ich hielt 10 Sekunden für eine angemessene Zeit, um möglicherweise warten zu müssen, bis sich die Tür öffnet, und das ist schließlich der Punkt, an dem wir mit diesem ganzen Projekt arbeiten.
Ich sollte hinzufügen, dass ich den Stromverbrauch nicht kenne, aber ich würde annehmen, dass ein häufigeres Pingen eines Geräts zwangsläufig mehr Strom verbrauchen würde. Ich habe beim Testen keine offensichtlichen Leistungsprobleme festgestellt, aber wenn die Batterielebensdauer ein ernsthaftes Problem für Sie ist, sollten Sie in Ihrem Büro einen Schalter verwenden, der die Scanschleife aktiviert und deaktiviert. Wenn Sie also drinnen sind, können Sie die Sperre anhalten und reaktivieren Sie das Scannen, wenn Sie das System verlassen.
Herzlichen Glückwunsch, Sie haben jetzt eine Python-App, die weiß, wann Sie sich in Reichweite befinden, damit wir entsprechend handeln können.
GPIO-Board-Modi
Bevor Sie fortfahren, müssen Sie herausfinden, welchen Board-Modus Sie verwenden werden. Es gibt keine richtige oder falsche Antwort, es beeinflusst nur, ob Sie die wörtliche Pinnummer oder die virtuelle GPIO-Pinnummer angeben.
Standardmäßig wird die wörtliche Pinnummer („Board-Modus“) verwendet, beginnend mit Pin 1 unten links (wenn man auf den Pi mit den USB-Ports rechts unten schaut). Pin 2 liegt direkt darüber.
Wenn Sie jedoch ein GPIO-Breakout-Board („Schuster“) haben, stammen die Beschriftungen, die Sie haben, aus einem alternativen Modus, der als „BCM“ (Broadcom SOC-Kanal) bezeichnet wird und normalerweise mit GPIO oder P vor der Nummer geschrieben wird. Sie brauchen nicht unbedingt einen GPIO-Breakout – es macht die Dinge nur einfacher. Wenn Sie kein Breakout-Board haben und keins kaufen möchten, verwenden Sie dieses Diagramm:
Beachten Sie, dass das ursprüngliche Modell B Revision 1, Revision 2 und das Modell B+ und Pi2 alle unterschiedliche Pinbelegung haben. In dieser StackExchange-Frage finden Sie ein Diagramm, das zu Ihrem Board passt.
In diesem Projektcode verwende ich das BCM GPIO-Nummerierungssystem, das dem von mir verwendeten Adafruit-Breakout-Board entspricht. Wenn Sie den wörtlichen Pin-Modus verwenden möchten, sind geringfügige Änderungen erforderlich.
Draht in einem Relais
Bringen Sie die Breakout-Platine an und stellen Sie sicher, dass der Draht von den Pins 1 und 2 (die in der Ecke Ihres Pi) an 3v3 und 5V0 am Breakout befestigt ist. Vielleicht möchten Sie einen Spannungsprüfer herausziehen, um dies zu überprüfen.
Bevor Sie fortfahren, überprüfen Sie, ob jemand anderes Ihr spezielles Relais mit dem Raspberry Pi verwendet hat (oder suchen Sie vorher eines, von dem Sie wissen, dass es funktioniert). Einige benötigen möglicherweise 5 V zur Aktivierung – aber der RPi kann nur 3,3 V an den GPIO-Ausgangspins bereitstellen. Zufällig ist der, den ich verwende, mit 3,3 V zufrieden, daher brauchte ich keine zusätzlichen Schaltkreise, nur die 5V0 zu VCC , GND zu GND , und GPIO-Pin 23 für den ersten Relaiseingang .
Mein vorheriges Tutorial zu GPIO hat gezeigt, wie man eine Transistorschaltung verdrahtet, um bei Bedarf 3,3 V auf volle 5 V zu skalieren (tatsächlich habe ich die gleiche Relaisplatine für dieses Tutorial verwendet, aber es stellte sich heraus, dass ich keine 5 V brauchte immerhin).
Der Elektromagnet muss noch nicht verkabelt werden, da Sie beim Auslösen des Relais ein hörbares Klicken hören können.
Als nächstes holen wir uns etwas Code, um mit den GPIO-Ports zu interagieren.
Wir beginnen mit Tests außerhalb von Python, um zu bestätigen, dass alles an den Ports selbst funktioniert. Installieren Sie wiringPi, das Ihnen einige nützliche Befehlszeilentools bietet.
git clone git://git.drogon.net/wiringPi cd wiringPi ./build
Konfigurieren Sie nach der Installation den GPIO-Pin 23 als Ausgang.
gpio -g mode 23 out
Führen Sie nun einen schnellen Scan aller Ports durch, um dies zu bestätigen
gpio -g readall
Sie werden etwas Ähnliches haben, obwohl Ihres bei einem Modell B+ oder Pi2 länger sein kann, da es mehr GPIO-Pins hat:
Für weitere Details:Erstellen Sie eine automatisch verriegelnde Bürotür mit einem Smartphone-Näherungssensor
Herstellungsprozess
- Banktresor
- Einfache Näherungssensorschaltung und Arbeiten mit Anwendungen
- Betrachten Sie das Problem Nr. 1 bei Bluetooth-basierten intelligenten Sensornetzwerken
- Cypress:Bluetooth-MCUs bieten Mesh-Netzwerke mit allgegenwärtiger Smartphone-Konnektivität
- Linienverfolgungssensor mit RPi
- Umgebungssensor-API mit einem RPi
- Ein einfacher analoger Näherungssensor mit digitaler Schnittstelle (für Raspberry Pi) [letztes Update:7. Februar 2014]
- Portenta- und Thermoelement-Sensor (mit MAX6675)
- CO2-Überwachung mit K30-Sensor
- Arduino mit Bluetooth zur Steuerung einer LED!