einfachstoppen
← Zur App

Beta. Tor und Startstab sind ein Bauvorschlag nach Datenblättern und Rechnung und waren bei Veröffentlichung noch nicht an echter Hardware ausprobiert. Zahlen zur Genauigkeit gibt es erst nach der Messung. Bluetooth ist ohne Kopplung offen.

Architektur

Dieses Dokument erklärt, wie das Tor gebaut ist und warum. Das Bluetooth-Protokoll steht in protokoll.md, der Aufbau in aufbau.md, die offenen Messungen in messung.md.

Ziel und Nichtziele

Das Tor liefert für Start oder Ziel eine genauere Zeit als ein Tipp mit dem Finger. Es ist eine zusätzliche Quelle neben den Taps, so wie die Kamera-App, und es teilt deren Regel: Es verfeinert einen Tipp, es ersetzt keinen.

Nicht Ziel: ein Zeitnahme-System mit Hundertstel-Garantie, eine Teilnehmererkennung (Transponder, Nummern), ein verkauftes Produkt. Das Tor weiß nicht, wer durchlief.

Bausteine

Übersicht

BausteinAufgabeCode
Senderschickt 38-kHz-Bursts über die Streckesrc/sender.cpp
Tor (Empfänger)stempelt den Abriss der Bursts, hält ihn bis zur Bestätigung, funkt ihnsrc/main.cpp, src/kern.h
Startstabstempelt das Öffnen eines Reedkontakts, sonst wie das Tor (TOR_MODUS=2)src/main.cpp, src/kern.h (Kontakt)
Kamera-Appkoppelt, gleicht die Uhr ab, rechnet um, meldeteinfachstoppen-ziel, Release 0.3.0 (TestFlight-Beta, iPhone), am Gerät nicht geprüft
Serverpaart den Durchgang mit einem Tipp oder lässt einen Menschen zuordneneinfachstoppen.de, kamera.paaren()

Der Server bekommt nichts Neues: ein Durchgang vom Tor ist für ihn ein Kamera-Durchgang (POST /api/races/{code}/kamera, art = ziel oder start).

Weg eines Durchgangs

Signal

  1. Bei freiem Strahl zuckt der Ausgang des TSOP-Empfängers etwa 830-mal je Sekunde (active low). Jeder Impuls ist ein Interrupt, der nur „zuletzt gesehen“ schreibt.
  2. Läuft jemand durch, bleiben die Impulse aus. tor::Strahl merkt das nach 4 ms Stille und schätzt die Zeit des Abrisses: letzter Impuls + eine halbe Periode (0,6 ms).
  3. tor::Totzeit lässt nur den ersten Abriss je 300 ms zu (Standard).
  4. tor::Puffer legt den Durchgang mit seq ab und die Firmware funkt ihn per notify.
  5. Das Handy rechnet t_us in die eigene Uhr um (versatz aus dem Sync), meldet an den Server und schreibt die Bestätigung zurück. Erst dann verlässt der Durchgang den Puffer.
  6. Der Server paart ihn mit einem Tipp, wenn es eindeutig ist, sonst bleibt er offen.

Drei Uhren

Tor-Uhr (µs seit Start), Handy-Uhr, Server-Uhr. Gemessen wird nur auf der Tor-Uhr. Das Handy kennt seinen Versatz zum Server schon (/api/time) und schätzt den zum Tor beim Sync (siehe Protokoll). Die Ankunftszeit eines Pakets zählt nie: das ist dieselbe Regel wie bei den Taps im Server, aus demselben Grund.

Entscheidungen

Fehlerfälle

FallVerhalten
Verbindung weg, Durchgänge entstehenbleiben im Puffer, gehen beim Wiederverbinden mit wahrer Zeit raus
Benachrichtigung geht im Funk verlorennach 2 s ohne Bestätigung nochmal; doppelt zählt nicht
Tor startet neuneues boot, seq beginnt bei 1, Versatz gilt nicht mehr, Handy gleicht neu ab
Sender fällt ausImpulse bleiben aus: ein Durchgang wird gemeldet, danach nichts mehr
Strahl flattert (Zweige, Regen)Totzeit schluckt Folgeabrisse; ein einzelner ausgelassener Impuls ist unter der Haltezeit
Startstab: Kabel am Reed ab oder Reed defektder Stab ist nie scharf und meldet nichts; nur ein Probedurchgang nach dem Aufstellen fängt das ab
Startstab: Stange federt nicht zurückbleibt offen, nächstes Öffnen erst nach erneutem Schließen von mindestens 100 ms
Direkte Sonne, Leuchtstoffröhreder Empfänger regelt per AGC ab; auf echter Hardware nicht geprüft

Der Fall „Sender fällt aus“ ist eine echte Schwäche: Das Tor kann einen leeren Akku am Sender nicht von einem Läufer unterscheiden. Ein Abgleich im Sitzungsablauf (nach dem Aufstellen einmal durchlaufen, Sender-Akku ausreichend) fängt das ab, die Firmware nicht.

Sicherheit

Was getestet ist und was nicht