Sphincter
Dieser Artikel behandelt Sphincter 2.0, die Schliessanlage des Labors 2.0. Die Neuauflage war nötig, weil im Labor 2.0 eine Paniktür verbaut wurde, die sich auch im abgeschlossenen Zustand von innen öffnen lässt. Außerdem wurden einige Kinderkrankheiten der alten Version beseitigt. Die alte Version ist hier dokumentiert.
Firmware und Schaltplan gibts hier.
Anforderungen an das neue System
- funktioniert mit Paniktüren (Auf- und Zuschließen mit jeweils einer Vierteldrehung, Aufsperren durch Herunterdrücken der Klinke)
- bei einer Fehlfunktion muss von außen mit einem normalen Schlüssel gesperrt werden können
- fail-safe: Das System darf unter keinen Umständen die Tür blockieren können.
- Verwendung mehrerer Zugangskontrollsysteme (sprich: Signalgeber) gleichzeitig
- Notversorgung bei Stromausfall und galvanische Trennung von allen anderen Laborsystemen
Technik
Hardware
Um die neuen Anforderungen zu erfüllen musste der Türöffner von Sphincter 1.0 von Grund auf neu entwickelt werden. Er besteht jetzt aus einer 3D-gedruckten Platte, die auf den Schließzylinder von innen aufgesetzt wird. Darauf befindet sich ein Zahnrad, in das der Schlüssel eingesetzt wird. Angetrieben wird es über einen Schrittmotor, die Positionsbestimmung erfolgt über einen Reed-Kontakt in der Grundplatte und einen Magneten im Zahnrad.
Auf der Steuerplatine ist ein ATmega8 verbaut. Die galvanische Trennung von anderen Laborsystemen wurde über Optokoppler realisiert. Außerdem gibt es noch einen 12V Bleiakku mit Ladegerät und Spannungsüberwachung um auch bei einem ausgelösten FI noch Zugang zu den Räumen zu haben.
Interface
Der Türöffner verfügt über zwei getrennte, optisch isolierte Interfaces. Jedes Interface hat 6 Pins: Vcc, GND, lock, unlock, status0 und status1.
Über die lock/unlock-Leitungen wird die Tür ab- und aufgesperrt. Die Steuerung erwartet hier ein mindestens 1.5ms langes active-high Signal. Der Pegel ist unkritisch (mind. 2V wegen des Optokopplers). status0/status1 sind zwei open collector Ausgänge. Auf der Steuerplatine sind bereits Pullup-Widerstände vorgesehen; um sie zu nutzen muss Vcc angeschlossen werden. Möchte man die Pullups nicht benutzen muss Vcc unbelegt bleiben.
Steckerbelegung:
Vcc | status0 |
status1 | lock |
unlock | GND |
Das Steuergerät kennt im Moment drei Statuszustände:
Zustand | status0 | status1 |
---|---|---|
error | High | High |
aufgesperrt | High | Low |
zugesperrt | Low | High |
Außerdem gibt es noch drei Status-LEDs auf der Platine und an der Tür:
Status | rot (Platine) | gelb | blau |
---|---|---|---|
error | X | (blinken) | (blinken) |
aufgesperrt | X | aus | ein |
Türe offen | X | aus | (blinken) |
zugesperrt | X | ein | aus |
automatisches Zusperren | X | (blinken) | aus |
Akkuspannung niedrig | (blinken, langsam) | X | X |
Akkuspannung kritisch | (blinken, schnell) | X | X |
Bedienung
Bedienung von außen
Die Steuerung des Sphincters von außen basiert auf einem
HTTPS-Service, der aus dem internen Netzwerk (WLAN) des OpenLabs
erreichbar ist. Dieser Service läuft auf
https://labctl.openlab-augsburg.de/sphincter
(der
DNS-Eintrag zeigt auf eine interne IP-Addresse).
Der Service erwartet HTTP-Request nach folgender Form:
https://labctl.openlab-augsburg.de/sphincter?action=<action>&token=<token>
Hierbei ist das Token ein zufälliger String, den man als virtuellen Schlüssel zum OpenLab bekommt, und action ist entweder:
state
: GibtOPEN
bzw.CLOSED
für den jeweils aktuellen Zustand des Schlosses zurückopen
: Öffnet die Tür bei korrektem Tokenclose
: Schließt die Tür bei korrektem Token
Die einfachste Möglichkeit ist also einfach die Tür mit dem Browser
oder curl
zu steuern, es sind aber Clients aller Arten
denkbar.
Clients
- Trigger-Android-App - Trigger is an Android App to unlock/lock doors, show the door status and ring a bell.
- Sphincter-Android-App (Source Code)
Bedienung von innen
Wenn ihr den Türöffner aus irgend einem Grund von innen manuell bedienen müsst, müsst ihr die Abdeckung am Elektronikgehäuse aufklappen. Dort befinden sich jeweils ein Taster für einen Systemreset und das Auf-/Zuschließen.
Wenn ihr das Labor als letzter verlasst und nicht über euer mobiles Endgerät absperren wollt, dann könnt ihr - wie früher - automatisch zusperren lassen. Drückt dafür den Taster an der Tür ca. 1s lang. Die gelbe LED beginnt zu blinken, ihr habt dann 15s Zeit um das Lab zu verlassen.
Verhalten bei Fehlern
Das System ist so ausgelegt, dass es grundsätzlich jeden Fehler mit einem Absperrvorgang beheben kann. Wenn sich das System im Error-Modus befindet (fehlgeschlagener Absperrversuch oder Systemneustart) führt jedes Kommando zu einer Referenzfahrt. Dabei wird die Tür abgeschlossen und ein neuer Nullpunkt ermittelt. Bei jedem normalen Absperren wird ebenfalls der Nullpunkt neu ermittelt.
Der Unterschied zwischen Referenzfahrt und Absperren besteht darin, dass die Referenzfahrt auch dann einen genauen Nullpunkt ermitteln kann, wenn das Zahnrad so weit verdreht wurde, dass der Endstopp schon ausgelöst hat.
Fehler | Symptome | Lösung |
---|---|---|
jemand hat das Zahnrad von Hand verdreht | Aufschließen funktioniert nicht mehr | Zuschließen um eine neue Referenzposition zu finden, dann nochmal aufschließen. In besonders harten Fällen diese Prozedur nochmal wiederholen (nötig, wenn der Endstopp beim Verdrehen ausgelöst hat) |
Tür wurde beim Zusperren nicht zugezogen | Tür wurde nicht abgeschlossen, Sphincter ist im Error-Modus: beide LEDs blinken | Auf- oder Zusperren, um eine neue Referenzfahrt auszulösen. Dabei Tür unbedingt zuziehen! |
Tür wurde beim Aufsperren nicht zugezogen | Tür öffnet sich nicht (auch nicht, wenn sie danach zugezogen wird), Motor überspringt Schritte und hat seine Position verloren | Zuschließen um eine neue Referenzposition zu finden, dann nochmal aufschließen |
sphincter ist im Error-Modus | beide LEDs blinken | irgend ein Kommando geben und Tür zuziehen um eine Referenzfahrt auszulösen |
Source Code und Schaltpläne
Der Source Code ist relativ wild verteilt, was schon mehrfach für Verwirrung gesorgt hat. Man sollte das mal™ ändern.
Folgende Repositories enthalten relevantes:
- Android-Client: sphincter-remote
- Control daemon (stellt die HTTPS-API bereit): sphincterd
- CAD für die 3D-gedruckten Teile: sphincter-cad
- Firmware für den Mikrocontroller: sphincter2.0 (bzw. ursprüngliches Repository hier)