Pssst - willst du High-Tech-Schutz für dein Heimbüro oder ein geheimes Schloss für deine "Werkstatt" (ok, du hast mich, es ist eigentlich ein Verlies / Spielzimmer), dass die Kinder nicht herausfinden können? Wir geben dir Deckung. Lassen Sie uns ein DIY-Smart-Lock bauen, das automatisch erkennt, wenn Sie dort sind, und sperrt, wenn Sie nicht da sind.
Wie funktioniert es? NIEMAND WEISS! Oder genauer Bluetooth.
Das Konzept
Ihr Smartphone ist ein leistungsfähiges Gerät, das ständig Informationen über sich selbst nach außen preisgibt. Eine Möglichkeit ist Bluetooth.
Im Erkennungsmodus sendet es eine eindeutige Identifikationsnummer - aber auch wenn es sich nicht ausdrücklich erlaubt, entdeckt zu werden, kann alles, was diese Adresse kennt, versuchen, es anzupingen. Wenn eine Antwort gehört wird, würde dies anzeigen, ob sie in Reichweite ist oder nicht.
Wir werden einen Raspberry Pi mit einem Bluetooth-Adapter einrichten, der ständig auf der Suche ist, wenn sich Ihr Smartphone außerhalb der Reichweite befindet. Wenn dies der Fall ist, wird das Relais aktiv und verriegelt die Tür.
Du wirst brauchen
- Raspberry Pi - jedes Modell sollte funktionieren, da es keine CPU-intensive Aufgabe ist, aber ich verwende ein älteres Modell B, und die GPIO-Pinouts können in Ihrem Modell leicht abweichen. Sehen Sie sich den Abschnitt "Board-Modus" unten an. Sie benötigen auch einige Grundlagen wie eine kabelgebundene Ethernet-Verbindung oder Wi-Fi konfiguriert Einrichten von Wireless-Netzwerk auf Ihrem Raspberry Pi Einrichten von Wireless-Netzwerk auf Ihrem Raspberry Pi Praktisch jedes Raspberry Pi-Projekt erfordert eine Netzwerkverbindung und erhebliche Flexibilität kann erreicht werden indem Sie den Ethernet-Anschluss zugunsten eines drahtlosen USB-Dongles ignorieren. Weiterlesen ; plus SD-Karte und Micro-USB-Netzkabel.
- Bluetooth USB-Adapter. Adafruit verkauft ein Bluetooth 4.0 BLE-Modul bestätigt funktioniert (was ist Bluetooth 4.0? Wie Bluetooth 4.0 die Zukunft der mobilen Konnektivität gestaltet Wie Bluetooth 4.0 die Zukunft der mobilen Konnektivität gestaltet Bluetooth ist der vergessene Stern auf dem Gerätespezifikationen. Lesen Sie mehr), aber Du solltest alle testen, die du schon herumliegen hast, bevor du eine neue für dieses Projekt kaufst. Ich habe einen alten Standard-Bluetooth-Miniadapter gefunden, den ich in Japan gekauft habe und der anscheinend gut funktioniert. Übertragungsgeschwindigkeiten oder Verbindungszuverlässigkeit sind uns egal, da wir nur einen schnellen Handshake aussenden, um zu sehen, ob ein Gerät lebt und wohlauf ist.
- GPIO Breakout Board ("Cobbler") und Starthilfekabel. Sie könnten direkt von den Pins auf dem Pi arbeiten, aber es ist viel einfacher, wenn Sie Etiketten an jedem Pin haben, und sie sind sowieso nur $ 6.
- Relaiskarte. 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 treiben kann. Ich habe ein generisches 4-Kanal-Board ähnlich wie dieses für etwa $ 5 verwendet, aber ich gehe davon aus, dass Sie wissen, wie man deins arbeitet.
- 12 / 24V Elektromagnetschloss, obwohl ein elektronisches Magnetschloss auch funktionieren sollte. Die eine, die ich gekauft habe, hat 180kg Haltekraft und wird komplett mit Montageplatten und Anweisungen geliefert, für ungefähr $ 35.
- 12 / 24V Stromversorgung. Das Magnetschloss muss eine separate Stromversorgung haben - was auch immer Sie tun, versuchen Sie nicht, es vom Pi zu trennen.
- Lock.py Python-App, aber wir schreiben dies, während wir weitermachen.
Mit Bluetooth arbeiten
Bluetooth ist für dieses Projekt von zentraler Bedeutung. Beginnen wir also mit der Installation einer Bluetooth-Unterstützung und testen Sie unseren Adapter. Sie können dies entweder direkt von der Pi, oder SSH in remote (wie Sie Windows zu SSH in Sie einrichten Pi Einrichten Ihrer Raspberry Pi für kopflose Verwendung mit SSH Einrichten Ihrer Raspberry Pi für kopflose Verwendung mit SSH Die Raspberry Pi kann akzeptieren SSH-Befehle, wenn sie an ein lokales Netzwerk angeschlossen sind (entweder über Ethernet oder Wi-Fi), so dass Sie sie einfach einrichten können.Die Vorteile von SSH gehen über die Störung des täglichen Screenings hinaus ... Read More).
sudo apt-get install bluez python-bluez
Fügen Sie Ihren Dongle ein, wenn Sie es noch nicht getan haben, und schauen wir uns an, was es berichtet.
hcitool dev
Wenn Sie etwas in der Ausgabe aufgelistet haben, können Sie loslegen. Als Nächstes verwenden wir ein Python-Skript, um nach Bluetooth-Geräten in der Nähe zu suchen und die eindeutige Geräteadresse abzurufen. Das müssen wir nur einmal für jedes Gerät tun.
wget https://raw.githubusercontent.com/karulis/pybluez/master/examples/simple/inquiry.py python inquiry.py
Wenn "0 Geräte gefunden" angezeigt wird, haben Sie entweder keinen kompatiblen USB-Bluetooth-Dongle oder Ihr Smartphone ist nicht erkennbar. Verzweifeln Sie nicht: Ich fand, dass ich die Bluetooth Einstellungsseite auf meinem iPhone öffnen musste, um es in den Entdeckungsmodus zu treten, dann passierte das:
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 sie mit Nano.
nano detect.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): print "User present" else: print "User out of range" time.sleep(10)
und passen Sie die folgende Zeile an Ihre Bluetooth-Geräteadresse an:
result = bluetooth.lookup_name('78:7F:70:38:51:1B', timeout=5)
Drücken Sie STRG-X und Y, um zu schließen und zu speichern. Führen Sie den gleichen Code aus, und Sie sehen etwa 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 gibt eine andere Meldung aus, je nachdem, ob er gefunden wurde oder nicht. Schalten Sie das Bluetooth auf Ihrem Telefon ein, um das Ein- und Ausfahren zu simulieren (wahrscheinlich in Wirklichkeit etwa 4 m). Sie können die Zeit zwischen den Scans verringern oder erhöhen, aber ich fühlte, dass 10 Sekunden eine angemessene Zeit waren, um möglicherweise auf die Freigabe der Tür warten zu müssen, wo wir doch mit dem ganzen Projekt hingehen werden.
Ich sollte hinzufügen, ich weiß nicht über den Stromverbrauch, dies zu tun, aber ich würde davon ausgehen, dass ein Ping ein Gerät öfter verbrauchen würde mehr Strom verbrauchen würde. Ich habe keine offensichtlichen Leistungsprobleme beim Testen gesehen, aber wenn die Batterielebensdauer ein ernsthaftes Problem für Sie darstellt, sollten Sie einen Schalter in Ihrem Büro in Erwägung ziehen, der die Scanschleife aktiviert und deaktiviert. Sobald Sie sich in Ihrem Büro befinden, können Sie die Sperre anhalten System, dann reaktivieren Sie den Scan beim Verlassen.
Herzlichen Glückwunsch, Sie haben jetzt eine Python-App, die weiß, wann Sie sich in Reichweite befinden, damit wir damit beginnen können.
GPIO-Kartenmodi
Bevor Sie fortfahren, müssen Sie herausfinden, welchen Board-Modus Sie verwenden möchten. Es gibt keine richtige oder falsche Antwort, es betrifft nur, ob Sie die Literal-Pin-Nummer oder die virtuelle GPIO-Pin-Nummer angeben.
Standardmäßig wird die Pin-Nummer ("Board-Modus") verwendet, beginnend mit Pin 1 unten links (wenn Sie auf das Pi mit USB-Anschlüssen rechts schauen). Pin 2 ist knapp darüber.
Wenn Sie jedoch eine GPIO-Breakout-Karte ("Cobbler") haben, stammen die Bezeichnungen aus einem anderen Modus, BCM (Broadcom SOC channel), und werden üblicherweise mit GPIO oder P vor der Nummer geschrieben. Sie brauchen nicht unbedingt einen GPIO-Breakout - es macht die Dinge einfacher. Wenn Sie kein Breakout Board haben und dieses nicht 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 Pin-Outs haben. In dieser StackExchange-Frage finden Sie ein Diagramm, das für Ihr Board geeignet ist.
In diesem Projektcode verwende ich das GPIO-Nummerierungssystem von BCM, das dem Adafruit-Breakout-Board entspricht, das ich habe. Kleinere Änderungen sind erforderlich, wenn Sie den Literal-Pin-Modus verwenden möchten.
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 sind. Vielleicht möchten Sie einen Spannungsprüfer ziehen, um dies zu überprüfen.
Bevor Sie fortfahren, überprüfen Sie, ob jemand anderes Ihr bestimmtes Relais mit dem Raspberry Pi verwendet hat (oder finden Sie vorher eine, von der Sie wissen, dass sie funktioniert). Manche benötigen 5V zur Aktivierung - aber der RPi kann nur 3.3V an den GPIO-Ausgangspins bereitstellen. Zufällig ist der, den ich benutze, glücklich mit 3.3V, also brauchte ich keine zusätzlichen Schaltungen, nur die 5V0 zu VCC, GND zu GND und GPIO Pin 23 für den ersten Relaiseingang .
Mein vorheriges Tutorial zu GPIO Erste Schritte mit GPIO auf einem Raspberry Pi Erste Schritte mit GPIO auf einem Raspberry Pi Wenn du das Arduino cool fandst, warte nur, bis du deine Hände auf einem Raspberry Pi hast - diese Dinge sind erstaunlich. Sie sind nicht nur ein voll funktionsfähiger Computer, sondern haben auch einen Transistorschaltkreis, um 3.3V auf volle 5V zu erhöhen, wenn Sie brauchen (tatsächlich habe ich die gleiche Relaisplatine für dieses Tutorial, aber es stellt sich heraus, dass ich nicht 5V schließlich brauchte).
Keine Notwendigkeit, den Elektromagneten noch anzuschließen, da Sie ein hörbares Klicken hören werden, wenn das Relais feuert.
Als nächstes nehmen wir etwas Code, um mit den GPIO-Ports zu interagieren.
Wir beginnen damit, außerhalb von Python zu testen, um zu bestätigen, dass alles an den Ports selbst funktioniert. Installieren Sie wiringPi, das Ihnen einige nützliche Befehlszeilenwerkzeuge zur Verfügung stellt.
git clone git://git.drogon.net/wiringPi cd wiringPi ./build
Nach der Installation konfigurieren Sie den GPIO-Pin 23 als Ausgabe.
gpio -g mode 23 out
Machen Sie jetzt einen kurzen Scan aller Ports zur Bestätigung
gpio -g readall
Sie werden etwas Ähnliches haben, obwohl Ihr Modell auf einem Modell B + oder Pi2 länger sein könnte, da es mehr GPIO-Pins hat:
Dies kann zunächst etwas verwirrend sein, aber die Tabelle ist in der Mitte geteilt und die Spaltenreihenfolge ist auf jeder Seite umgekehrt. Ganz links und ganz rechts ist die BCM-Pin-Nummer. Da wir 23 verwenden, sollte der Modus jetzt als OUT angezeigt werden. Dies ist ein nützlicher kleiner Befehl, um eine gute Vorstellung davon zu bekommen, was mit all Ihren Pins passiert.
Um den Pin hoch oder niedrig zu schreiben, verwenden Sie einfach
gpio -g write 23 1 gpio -g write 23 0
Hoffentlich, wenn Sie das Relais richtig verkabelt haben, hören Sie es klicken und an- und ausschalten. Wenn nicht, fahren Sie nicht fort, bis Sie die Verkabelung gefunden haben. Denken Sie daran, dass Sie möglicherweise eine höhere Spannung benötigen, um das Relais zu aktivieren.
Sobald Sie bestätigt haben, dass das Relais und GPIO funktioniert, fügen Sie die Python-Module für GPIO hinzu.
sudo apt-get install python-dev python-rpi.gpio
Lassen Sie uns jetzt unsere Python-App so ändern, dass das Relais beim Erkennen des Telefons aktiviert oder deaktiviert wird. Sie finden den endgültigen Code in diesem Gist. Kopieren Sie die vorhandene Datei detect.py in eine neue lock.py und fügen Sie die folgenden Import- und Setup-Befehle hinzu:
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) RELAY = 23 GPIO.setup(RELAY, GPIO.OUT)
Fügen Sie in der IF-Anweisung einen Befehl hinzu, um das Relais zu aktivieren oder zu deaktivieren. Beachten Sie, dass Ihr Relais entweder mit einem niedrigen oder einem hohen Signal arbeiten kann. Passen Sie es dementsprechend nach dem Test an.
GPIO.output(RELAY, 1)
Um diese neue Version auszuführen, setzen Sie den Befehl mit sudo voran - Zugriff auf GPIO erfordert root-Rechte.
Anhängen
Sobald Sie bestätigt haben, dass das Relais mit Ihrem Näherungssensor feuert, fügen Sie Ihr Elektromagnetschloss hinzu. Auf der Relais-Seite bringen Sie den positiven 12-V-Anschluss in die Klemme mit der Bezeichnung COM (common), dann den positiven Stromeingang vom Elektromagneten zum NO-Anschluss ( normalerweise offen, dh normalerweise ist er nicht mit dem gemeinsamen Anschluss verbunden, wird aber bei Ihnen sein) aktiviere das Relais ).
Verbinden Sie die Masse von der Stromversorgung und den Elektromagneten am GND-Anschluss.
Beziehen Sie sich auf die Montageanleitung, die mit Ihrem Schloss geliefert wurde; Die Tür muss ziemlich dick sein, und es ist einfacher, wenn sie sich von der Seite weg öffnet, auf der das Schloss sein soll. Meines war das Gegenteil, also brauche ich die L-förmige Halterung, sowie ein zusätzliches Stück Holz, um die Türstärke zu erhöhen.
Verbesserungen
Dies war ein Beweis für das Konzept, auf dem ich mit anderen Projekten aufbauen konnte, und wirklich nur, um neugierige Augen aus meinem Büro zu lassen, wenn ich nicht da bin - es ist nicht darauf ausgelegt, ein narrensicheres Sicherheitssystem zu sein. Dafür benötigen Sie eine Backup-Batterie, um bei einem Schnitt den Strom fließen zu lassen.
Natürlich, wenn jemand in dein Haus einbricht und sich die Mühe macht, deine Macht zu kappen, dann hast du wahrscheinlich das größere Problem, dass es ein Psychopath ist, der dich töten will, anstatt ein zufälliger Einbrecher. Sie würden auch ein physisches Riegelschloss zusätzlich zu einem elektronischen und einem wirklich großen Stock wollen.
Natürlich ist diese Annäherungsdetektionstechnik mit Bluetooth nicht nur auf ein automatisches Türschloss beschränkt - Sie können damit auch Ihr Garagentor öffnen, wenn Sie nach Hause kommen, oder Ihr Heimkino einschalten, bevor Sie durch die Tür gehen.
Welches Feature sollte ich als nächstes hinzufügen? Hattest du Probleme beim Aufbau? Lass es mich in den Kommentaren wissen und ich werde mein Bestes tun, um zu helfen!