Timing system


2x Chafon UHF RFID Fixed Reader CF-RU6403

4x Chafon UHF 12dBi vertical antenna Model CF-RA1201

4x Chafon UHF 6dbi vertical floor mat antenna Model CF-RA2006

2x Intel NUC

3x Mikrotik Ltap Lite

3x 17Ah battery

2x Pololu 9V, 2.6A Step-Down Voltage Regulator D36V28F9

2x Schneider Electric box

Hikvision camera

Box version 1 – without router

Box version 2 during testing – with router

At the moment we have two IP66 boxes with 4-ports readers, they can work from socket or from battery (up to 12h). Plan is to upgrade it so battery can be used in buffer mode with AC connected. Intel NUC is connected to Mikrotik router that has LTE (thanks to TELE2 CSP we can activate unlimited 24h data plan for only 0.50 Eur). Camera is connected to another Mikrotik router (without internet) so we can easily manage it.


v1 – Modified demo software from SDK, build on C#. We have added one additional tab where we can save csv (data is also automatically sent to server), set reading and saving interval, set reader and event id. Second tab is used to set-up reader – frequency, antennas, power, sound and so on. There are some settings for fine-tuning of reader, so we can set it up for more accurate readings or for covering more tags at a time.

v2 – planned as written-from-scratch software with all needed functions and simplified settings. But it is not the main priority for now.

For remote connection to Intel NUC we are using AnyDesk.

Server and backend

PHP, MySQL, WordPress, custom scripts, WPDataAccess and WPPayForms Pro plugins.

Registration form is build using WPPayFormsPro (it has built-in Stripe support – can pay using card). Plugin is saving all registration data in database but some data are in comma-separated arrays, so we created a custom script that is parsing this raw table and saving registration data into another table. After registration is closed data is downloaded and modified adding race id, calculating age group (we do not want runners to select age group by themselves as there will be many mistakes), fixing errors, removing duplicates. When everything is done, TIDs are assigned, we are uploading this table back to database. Plan is to automate age group calculation.

Pre race checklist

(print bibs, scan tags, put them on bibs, assign TID to runner, upload into database)

  • Enable internet on readers
  • Turn on camera, sync time
  • Connect antennas to readers, turn on readers and Intel NUC’s
  • Connect to Intel NUC, sync time, check  CSV file name, reader id and event id in software

At the moment we are using only gun time. When race starts we write down start time into StartTime field in WPRACE_DISTANCES table. Plan is to add physical button but we need to think how we can sync two readers. Here we also need to check event id (it should be the same in both readers) and distance name  (it should be the same as in the start protocol). As we use only gun time at the moment (no chip time) – we turn readers on after last runners crosses start line. Field “points” allows us to use several readers depending on running course. If we want to use both our reader on the finish we just write 0 and they both will act as one reader and will remove duplicate values. If we want to time race with several laps, for example 4, we can write 0,0,0 – meaning there will be 3 readings (laps). But if for example we want to put one reader somewhere else, we will write 1,0. System will (at least we hope so – have not tested it yet) take one reading from reader 1 and finish reading from reader 0.

All results are going to RAW table and later they are automatically transformed into another table where we can see race id, distance, name, surname, gender, age group, yob, position in race and in age group and finish time. Data can be exported to csv for further analysis in Excel.


Some thoughts about tags and polarization

  • Original Chafon “reusable” tags – works very bad with floor antenna and quite ok with side antenna.
  • “Reusable” tags from Alixpress – works very bad with floor antenna but to use it with side antenna it should be rotated 90 degrees
  • “Reusable” shoe tags – works ok with floor antenna (but not perfect), but to use it with side antenna it should be rotated 90 degrees
  • “Disposable” Chafon tags with foam – works ok with floor antenna, but needs to be put vertically. With side antenna works ok, so the best result will be if we put tag vertically and rotate side antenna 90 degrees.
  • “Disposable” Chafon shoe tag – works very good with floor antenna but to use it with side antenna it should be rotated 90 degrees


  1. Reusable shoe tags (#3) are ok to use with floor antenna + side antenna if side antenna is rotated
  2. (Dogbone?) disposable tags with foam are ok to use with floor antenna + side antenna if side anenna is rotated
  3. Disposable shoe tags are ok to use with floor antenna + side antenna if side anenna is rotated



First real test was in June 2020, we timed small (40 runners) half marathon + 5k. Start and finish were at the same time and location. Where we failed? At home we scanned and assigned each runner EPC, but during the race we scanned for TID. Each RFID tag has three fields – EPC, TID and UserDefined. So we were unable to find runner in our protocol. Luckily there were only few runners so we were able to fix it.

Second test – 5k race, about 160 runners. We also used bib tags with foam this time. Panel antennas worked quite good, we had only few misses – one person broke his tag, another stopped his watch right before finish line and covered bib with his arm, so reader was not able to read it. Luckily we were able to identify all missed using video camera. Floor antena is not working so good, maybe because it is only 6 dbi or we need to use another type of tags.  we need to rotate tags so they have the same polarization.