SwimWatch is een zelf ontwikkeld systeem voor tijdwaarneming. Elke baan heeft een baantimer met scherm en knop, een startertimer geeft het startmoment, en één server controleert de tijden, bepaalt de volgorde, toont de uitkomst en legt alles vast in een logbestand.
Als zwemmer of toeschouwer raak je snel kwijt hoe ver een wedstrijd is. Als het scherm laat zien wat er op dat moment in het water gebeurt, is een wedstrijd voor iedereen leuker en makkelijker te volgen.
Van een idee voor het scorebord tot een eigen systeem voor tijdwaarneming, in iets minder dan twee jaar.
{{ s.body }}
SwimWatch is draadloos en verplaatsbaar. Elke klok werkt op een eigen accu en praat via WiFi met één server, een Raspberry Pi. Er lopen geen kabels langs het bad en er wordt niets vast in het zwembad gemonteerd: router, access point, server en klokken gaan na de wedstrijd gewoon weer mee.
Alles wat een apparaat of persoon doet gaat via die server, en de server stuurt de klokken en schermen aan. Kies hieronder een datastroom om te zien hoe een bericht door het systeem gaat.
{{ net.text }}
Geen installatie nodig: elke pagina werkt in de browser van een laptop, tablet of telefoon.
{{ screen.what }}
{{ screen.note }}
Een tijdwaarnemer kan per ongeluk twee keer drukken, of na de finish nog een keer. Daarom controleert de server elke split voordat die op een scherm komt: welke afstand hoort erbij, telt deze druk mee, en wie ligt er voor. Alles, ook wat niet meetelt, komt in het logboek.
De tijdwaarnemer staat aan de startzijde, dus een split valt na elke twee lengtes. Uit het programma weet de server de afstand van het event en daarmee hoeveel splits er komen. De laatste is de finish. Bij een estafette is dat de afstand maal het aantal zwemmers.
{{ splitNote }}
Per baan geldt een wachttijd (cooldown) na de start en na elke split: standaard 12 s, instelbaar van 1 tot 60 s. Een druk binnen die tijd, of na de finish, wordt genegeerd. Hij verschijnt nergens als tijd, maar staat wel met de reden in het log.
Voorbeeld: 100 m in een bad van 25 m, verzonnen tijden.
De baan met de meeste splits staat voorop. Bij een gelijk aantal telt de vroegste tijdstempel. Zo staat op het wedstrijdscherm na elke split meteen de juiste volgorde.
De server schrijft elke START, SPLIT, SPLIT IGNORED en RESET in competition.log. Het bestand wordt alleen aangevuld, nooit aangepast, en staat buiten de container, zodat het een herstart overleeft.
De operator ziet de laatste regels live op de remote. De logpagina ververst elke 10 s en het hele log is te downloaden. Zo dient het log als tijdstrook: na afloop is van elke split terug te zien wanneer hij binnenkwam en of hij meetelde.
Geïnspireerd op de back-upknop die tijdwaarnemers bij ETW-systemen al gebruiken. Een LilyGO T-Display S3 met eigen firmware, in een 3D-geprinte behuizing, met een losse splitknop aan een kabel. Draai het model, sluit de knop aan en probeer het.
{{ msg }}
Een handgreep met drukknop aan een kabel, met een haakse jack die in de zijkant van de baantimer gaat. De tijdwaarnemer houdt de knop vast en drukt bij elke aanslag.
Bij een druk legt een interrupt direct de stand van de hardwareteller vast, voordat de software iets anders doet. In de starterrol geeft dezelfde knop de start.
De knop wordt aangesloten met een 3,5 mm jackplug. De klok zelf draait op een ingebouwde LiPo-accu, dus aan het bad is geen stroomkabel nodig.
Een bericht is niet altijd even lang onderweg. Daarom worden alle klokken eerst gelijkgezet met dezelfde tijdbron, en rekent elke baantimer bij de start zelf uit hoe laat het bericht binnenkwam.
De server draait een tijdserver (chrony). Alle klokken volgen die ene bron en stellen zich elke 60 s bij, geleidelijk en nooit met een sprong. Ook zonder internet lopen ze onderling gelijk.
De starterklok leest zijn NTP-klok uit tot op de microseconde en stuurt T naar de server. Daarna is hij vergrendeld tot een reset. De server stuurt T ongewijzigd door.
Elke baantimer rekent bij ontvangst uit hoeveel later dat is dan T, en laat zijn hardwareteller lopen alsof hij precies op T is gestart.
Kies een WiFi-vertraging. De baantimer berekent d en zet zijn startmoment zoveel terug.
Is het verschil negatief, dan neemt de baantimer 0. Voorbeeldwaarden zijn verzonnen.
De timer loopt vanaf het begin {{ calc.ms }} voor op het moment van ontvangst, dus gelijk met de starter.
Lokaal opgezet in het zwembad, geen permanente installatie. Een travelrouter kan inloggen op een ander WiFi-netwerk of via LAN/WAN internet krijgen.
Gekozen om prijs en lage eisen. Passief gekoeld, dus in een afgesloten kist te plaatsen, weg van het water.
Via een Cloudflare Tunnel is alleen het wedstrijdscherm via internet te zien. Remote, upload, instellingen, apparaten en logs blijven lokaal.
Browsers verbinden automatisch opnieuw. De baantimer meet op zijn eigen hardwareteller.
SwimWatch liep mee op drie niveauwedstrijden in Alphen aan de Rijn. Per baan is het log vergeleken met de officiële handtijd uit de KNZB-uitslag. Verschil = SwimWatch min officieel.
| Niveauwedstrijd deel 3 1 maart 2026 | Niveauwedstrijd deel 4 29 maart 2026 | Niveauwedstrijd deel 1 11 oktober 2026 | |
|---|---|---|---|
| Eindtijden vergeleken | 285 | 250 | 230 |
| Mediaan verschil | +0,17 s | +0,20 s | +0,10 s |
| Binnen 0,30 s | 92% | 86% | 91% |
| Binnen 0,10 s na correctie per serie | 79% | 83% | 73% |
Binnen een serie is SwimWatch precies. De vaste afwijking van +0,10 tot +0,20 s ontstaat bij de handmatige start: 50m-tijd en eindtijd wijken even veel af.
Een heat 100 m rugslag met één starter en één baantimer. Links de klokken met hun splitknop, rechts de remote en het wedstrijdscherm.