Smart Tree House Lock

Unsere Gruppe:
Wir haben diese Gruppe im Februar 2016 im JFZ gegründet um eine Smart Home Steuerung für unsere Baumhäuser zu entwickeln und später auch dort verbauen zu können. Mehr Infos zu den Baumhäusern findet man auf der Projektseite. Später wird es dort auch die Möglichkeit geben Übernachtungenen zu buchen. Im JFZ finden innerhalb immer unterschiedliche Dinge statt. Einerseits ganz klar die Programmierung des Arduinos und Raspberry PIs. Andererseits gibt es auch immer wieder Lötarbeiten oder auch mal ein Gehäuse, das später mit dem 3D Drucker gedruckt werden soll.
Wir treffen uns (wie die anderen Gruppen auch) aktuell immer Mittwochs zwischen 19 Uhr und 21 Uhr. Manchmal auch spontan an anderen Tagen, das machen wir dann über unsere Whatsapp Gruppe aus. (Gut Whatsapp ist streitbar, aber es funktioniert für uns eben! 😉 )
Bei Interesse: Komm gerne vorbei, schau es dir an. Wir finden sicherlich eine Möglichkeit, wie du mithelfen kannst.
Wenn du gerne auch handwerklich mit Holz, Sägen, Schrauben oder Klettern etwas tun willst, sei dir gerne unsere Baumhausbaugruppe empfohlen. Da sind verschiedene Leute vom kleinen Schüler mit 10 Jahren bis zum alten Hasen (etwas älter 🙂 ) vertreten. Es macht auf jeden Fall meistens Spaß und am Ende sieht man auch gleich was.

Unsere Geschichte:
Seit ca. 4 Jahren (Stand Anfang 2016) bauen die Pfadfinder und allerlei weitere fachkundige Techniker an einem Baumhaus herum.
Doch wie jedes normale Haus braucht auch ein Baumhaus ein Schloss um es gegen unbefugte Eindringlinge zu schützen. Deshalb basteln wir seit ca. Anfang 2015 an einer Arduino Lösung für das Schloss.

Die allererste Idee war:
1. Jemand reserviert sich eine Übernachtung auf der Baumhaus Seite.
2. Der Kunde und die Arduino Steuerung am Baumhaus bekommen an dem gebuchten Tag eine SMS mit dem Code zugeschickt.
3. Der Arduino wertet den Code aus der empfangenen SMS aus und wartet ab jetzt auf die richtige Codeeingabe.
4. Nach Erreichen vom Ende der gebuchten Dauer erhält der Kunde und der Arduino eine Benachrichtung.
5. Der Arduino löscht den Code wieder und ist wieder dumm. Das Schloss lässt sich nicht mehr öffnen.

SMS Idee

Gut, die Idee war eigentlich nicht mal so schlecht. Natürlich ist die SMS aus IT Security Sicht eigentlich schon lange ein geknacktes Medium. Unsere Zielgruppe wären aber bestimmt nicht die ultimativen IT Security Experten gewesen. Außerdem: Wer ins Baumhaus möchte könnte zur Not auch einfach mit roher Gewalt einbrechen. Daher wäre es vermutlich ganz ok gewesen.

Nach anfänglichen Versuchen mit dem GSM Modul wurde das Empfangen und Auswerten von SMS bereits gut gemeistert. Allerdings bestand die Schwierigkeit den aktuellen Modus „Code eingeben“ beim Empfangen einer SMS zu unterbrechen und dann direkt die SMS auszuwerten. Das hat die GSM Library nicht wirklich vorgesehen und so gut kenne ich mich dann doch noch nicht aus um mal eben ein paar hardwarenahe Änderungen durchzuführen. Kurz gesagt: Damit war die Idee erstmal hinüber.

Aufbau mit GSM ohne Relais

Nachdem aber bereits viel Zeit vergangen war (es war schon Herbst 2015) musste trotzdem eine Lösung her. Die sah nun wie folgt aus.

1. Der Arduino und der Webserver berechnen pro Tag immer einen neuen Code.
2. Der Code kann bis zu 14 Tage gültig sein, je nachdem welches Suffix man eingibt.
3. Wenn der Code richtig ist, öffnet sich das Schloss.
4. Der richtige Code kann so oft eingegeben werden, solange der richtige Zeitraum noch stimmt.

Da ich in unserer Gruppe der einzige Arduino Programmierer war und aktuell auch bin, hab ich mir ein Zeitmodul zur Hand genommen und anhand des aktuellen Datums ein Codemuster entwickelt. Dazu noch ein gewisses Suffix um die Anzahl der gültigen Tage mit der Codeeingabe zu übermitteln.
Die Eingabe wird dann auch via LCD Ausgaben bestätigt und bei richtigem Code wurde dann das Relais geschalten.

Die Schaltung hat im Herbst 2015 dann also schon funktioniert. Das Problem waren eben die unterschiedlichen Spannungen. Das Relais arbeitet mit 5V Steuerspannung (die vom Arduino abgezweigt werden konnte), der Arduino wurde mit 9V versorgt und das Türschloss hat zwingend 12V benötigt.
Wenn ich die fertige Schaltung dann mit dem Relais angeschlossen habe, kam nach mehrmaligem Schalten immer wieder eine Spannungsspitze ans LCD und hat damit die komplette Steuerung unbrauchbar gemacht. Erst wenn man den Arduino wieder stromlos gemacht hat, ging es wieder.

Februar bis Mai 2016:
Seit Februar 2016 treffen wir uns nun im JFZ und haben seither einen Plan aufgestellt, wie wir die Schaltung noch optimieren können. Eines war schnell klar: Statt einem Relais (die immer zu Überspannungen neigen) lieber kleine und besser kontrollierbare MOSFETs zu verwenden. Der Vorteil liegt auf der Hand. Sie sind erstens kleiner als Relais und schalten auch schon bei sehr niedrigen Steuerströmen den Schalter. Zweitens erzeugen sie aufgrund fehlender Magnetspulen keine Überspannungen.
Nach ein paar ersten Versuch war der Prototyp schnell startklar. Da wir jedoch unsere Schaltung für mehrere Baumhäuser ausgelegt haben, kam uns die Idee eine Platinen zu entwerfen. Zuerst haben wir selbst mit einer Lochrasterplatine eine Platine zusammengelötet. Später haben wir dann eine fertige Prototypen Platine mit Schraubenklemmenanschlüssen verwendet.
Letztendlich hat dieser Prototypen schon alle Grundfunktionen erfüllt und wir konnten durch die Eingangsspannungstoleranz am Arduino (der zwischen 7 V und 20 V verträgt) relativ einfach mit einer einheitlichen Spannung von 12 V arbeiten. Damit waren auch keine umständlichen und verlustbehafteten Spannungswandler notwendig.
Ein kleine Gallerie zur Prototypen Platine (die sogar lange Zeit am Haus hing und funktionsfähig war!)

Später haben wir sogar einen Tag gehabt, an dem wir eine Einführung in das Sema CAD Programm bekommen haben. Damit hat dann einer unserer Mitstreiter das Baumhaus als CAD Modell entworfen. So kann dann das Holz schon fertig zugeschnitten als Bausatz erstellt werden.

//Update: Mai bis Juli 2016:
Nachdem wir die Prototypen Platinen erfolgreich entworfen und gebaut haben, war die Überlegung da, welche weiteren Sensoren noch angesteuert werden sollten. Da wir weiterhin den Arduino UNO weiterverwenden wollten und dieser nur begrenzte GPIO Pins hat, waren wir schnell am Ende. Das LCD war mit 4 Pins (via i²c) relativ klein. Die 16-stellige Tastatur braucht mit 8 Pins aber schon relativ viele. Aber wir wollten unbedingt noch weitere Sensoren einbauen. Beispielsweise einen Magnetsensor, der einen Alarm auslöst, falls die Luke ein paar Sekunden offen ist. Damit der Besucher die Luke auch wieder schließt und nicht nachts beim Schlafen aus dem Baumhaus kullert und sich durch einen Sturz verletzt.
Für den Alarm ist auch sinnvoll einen Lautsprecher zu haben, denn man ansteuern kann. Für Arduino gibt es auch eine kleine nette Library die alle Tonarten definiert hat.
Weiter wollten wir noch einen zweiten MOSFET zur Ansteuerung der Treppenbeleuchtung einbauen. Der Sensor soll aber nur bei Nacht angehen und wenn eine Bewegung registriert wird. Das ist gar nicht so leicht zu realisieren, da man erstmal eine sinnvolle Helligkeit definieren muss. Die Bewegung ist mit einem PIR Sensor trotzdem relativ einfach zu erkennen.
Nachdem wir diese beiden Sensoren und den Lautsprecher und eine ungetestete Verbindung zwischen Arduino und Raspberry Pi via i²c für die Platine definiert haben, ging es los die Platine zu entwerfen. Dabei hatten wir freundlicherweise Unterstützung durch einen langjährigen Platinenlayouter vom Seuffer. Zugegeben unsere Änderungswünsche waren dann doch etwas speziell, aber am Ende wurde es dann endlich gut.
Hier noch ein paar Screenshots vom 3D-Modell der Platine:

Im Juli hatten wir dann eine kleine Führung durch die Fertigung beim Seuffer. Das war sehr interessant und spannend zu sehen. Wenn man die SMD Bauteile manchmal anschaut, sind das ja unheimlich kleine Bauteile und die Anlagen schaffen es trotzdem diese zu greifen und passend auf die Platinen zu bestücken und anschließend auszubacken.
Alex, unser Website Programmierer hat angefangen eine Buchungsseite zu bauen. Man kann sie testweise mal hier sehen.

Update: Oktober bis Dezember 2016:
Im Sommer ist unsere Gruppe aufgrund Urlaubszeit und Baumhausbau Aktivitäten ausgefallen. Ab Oktober haben wir dann endlich aber unsere Platinen gefertigt bekommen und auch erste Bauteile bekommen. So haben die Schüler angefangen zu löten. Sie hatten und haben immer noch sehr viel Spaß dabei. Ein erstes Erfolgserlebnis war die Tatsäche, dass der Lautsprecher gleich funktioniert hat. Wie üblich waren aber leider auch viele Bauteile erstmal falsch herum eingelötet. Die Platine ist so designt, das 2 MOSFETs drauf sind. Einer für das Schloss, ein zweiter für das Außenlicht. Dazu wurde noch das Zeitmodul integriert bzw. Header für das Zeitmodul vorgesehen. Da der DS3231SN Zeitchip aber nicht verfügbar war und bei den üblichen Händlern in Deutschland sehr teuer war, haben wir es kurzerhand bei Aliexpress bestellt. Ob der Chip dann auch funktioniert, muss noch beweisen. Jedoch waren meine bisherigen Erfahrungen bei Arduino Klonen und anderen Standardbauteilen recht positiv. Außerdem ist dieser Zeitchip sehr häufig eingesetzt und auch sehr genau.

Update: Januar bis Mai 2017:
Die ersten DS3231SN Chips sind endlich nach langer Wartezeit aus China gekommen und konnten auf die Platine aufgelötet werden.
Während dem 33C3 hatte ich auch Zeit gefunden den Arduino Code fertig zu schreiben. In der Theorie hat er auch funktioniert. 🙂 Doch ohne Hardware konnte ich es nicht austesten und so gab es dann doch eine böse Überraschung: Es hat rein gar nichts funktioniert.
Durch einen Tipp von xsider, dass ich via Polling jeden Sensor alle X Sekunden auslesen sollte, kam dann endlich mal die Lösung in Sicht. Und so funktionierte der Code dann auch endlich mal. Gibt man den richtigen Code ein, öffnet sich der MOSFET für das Türschloss und gibt die Türe frei. Doch auch auf der Hardware Seite gab es noch ein paar Probleme. So war ein Widerstand zu groß dimensioniert, so dass bei jedem Öffnen des MOSFET die Spannung in den Keller ging. Nachdem dieser Widerstand durch ein Stück Draht ersetzt wurde, hat es wieder funktioniert. Beim Entwickeln kommen eben oft ein paar Stolpersteine dazu!
Auch der Reed Kontakt Sensor (zur Feststellung ob die Türe offen ist) hat funktioniert, wurde aber erstmal wieder verworfen.

Update: Juni bis Dezember 2017:
Nachdem der Sourcecode mit der Zeit immer vollständiger und benutzbarer wurde, wurde noch ein einfacher (aber dafür auf Arduino und dem Webserver benutzbarer) Algorhithmus überlegt um den Code pro Baumhaus Schaltung einen einmaligen Code zu erstellen. Wir haben uns dazu ein bisschen an der ROT13 Verschlüsselung orientiert und das Ergebnis der Berechnung durch bestimmte Zeichen ersetzt. So kann die Berechnung im Sourcecode verbleiben, das Geheimnis besteht aus 3 Teilen: Die Baumhaus-ID, das Verwürfelungsarray mit den Ersetzungszeichen und einen Tagesteiler. Prinzipiell ist diese Variante nicht 100% sicher, aber da nach jeder falschen Codeeingabe 5 Sekunden vergeben müssen ist es etwas mühsam, das Teil durchzuprobieren.
Neben dem Sourcecode wurde auch das Gehäuse designt. Um es leicht duplizieren zu können, hatten wir einen handelsüblichen Elektrokasten mit einer Hutschiene genommen und darin den Solarladeregler und den Arduino mit der Platine in einem Gehäuse untergebracht. Dazu noch die Verkabelung der einzelnen Komponenten und alle notwendigen Anschlüsse nach außen geführt.
Um den Code dann auch ordentlich einzugeben war noch ein Gehäuse konstruiert und mit dem 3D-Drucker gedruckt!

Update: Januar bis Mai 2018:
Um alles mal etwas zu dokumentieren und das Projekt etwas unabhängiger von einer Person zu machen, habe ich auch auch mal eine Dokumentation geschrieben, welches alles etwas genauer beschreibt!
Der einzige Knackpunkt, der uns zur Zeit noch Ärger macht ist eine sinnvolle Verkabelung. Wir hatten eine funktionale Version aber da sie nur gesteckt war ist sie leider sehr leicht wieder auseinander gegangen. Man müsste es einfach noch sauber verlöten und die Verkabelung noch sauber dokumentieren.

Hier die benötigten Dateien zum Download:
Dokumentation
BaumhausCodeDS-neu.zip
libraries.zip
Platinen-Tests

COMING SOON (wenn sich jemand findet, der es macht!):
– Kommunikation zwischen Raspberry Pi und Arduino