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: Gibt OPEN bzw. CLOSED für den jeweils aktuellen Zustand des Schlosses zurück
  • open: Öffnet die Tür bei korrektem Token
  • close: 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

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: