I’ve spoken before about the importance of accurate timing at World BoarderX Championships. I even mentioned at the end of the article that I was putting my money where my mouth is and attempting to develop my own system. Truthfully, I’ve been dabbling in making my own system for years but always struggled – I would find a promising avenue, only to find some fatal flaw somewhere down the road. Not anymore. Using an Arduino board combined with a VB .NET program, I have finally built a working system!
Currently, I only have a system for BoarderX but I plan to build a Downhill system in the coming months, ready for the UK Championships at the end of August. The focus on the BoarderX was with the clear aim of being ready for the system to be used at the World Championships at the end of June.
Having spent months developing the hardware and code, I had a system that was ready for real-world testing. Before we jump into that, a brief overview of what it will be used for and how it works;
The plan is for the timing system to be used during qualifying. I think we have found probably the best race qualifying system of any similar sport out there but we’ve always been let down by the accuracy of the timing. This system solves that.
Athletes will race in 3 qualifying races, will score points based on their position in each of these races and will have their times recorded. The athletes are then ordered by their total points haul. Inevitably, this leads to some athletes finishing with the same score – this is where the timing comes in. Where athletes have the same score, their fastest time across their 3 races are used to determine their qualifying order (fastest time places highest).
The system is designed to generate the qualifying races, record the race results and times (with some human interaction) and calculate the qualifying position based on the results. There is also a function to display the live qualifying positions during the qualifying session.
How it works
The laser gates are set up at the top and bottom of the track – the bottom gate at across the finish line and the start gate set up so that when the start gate drops, it breaks the beam and starts the race (that way, it is a consistent start across all races). The lasers connect to an Arduino experiment board, where the Arduino is loaded with code which knows what to with the information coming in from the laser gates (i.e. what information to send to the VB .NET solution).
The VB .NET solution loads in the qualifying races from the BoarderX spreadsheet (which generates the qualifying races and calculates the qualifying results (it also calculates the knockout races and final results)). The solution prefills each race and the user inputs the race results as each race finishes, with the solution automatically populating the race times. Once each race result is submitted, the data is saved to a csv file in case of a system crash.
The BoarderX spreadsheet either reads in the csv file after qualifying is complete, or a macro can be run to read the csv in every 30 seconds to enable live qualifying results to be displayed. Once the results are read in, the spreadsheet calculates the qualifying positions as defined above (by score then time). The spreadsheet then populates the Knockout races and the user puts in the results of the KO races directly into the spreadsheet, which dynamically updates the next round of races including gate choice. At the end of it all, the spreadsheet provides the finishing order for all the athletes in all categories.
I’d done a bunch of testing and scenario planning in the safety of my flat while building the system. I had encountered and squashed many bugs along the way and was feeling pretty confident that the system was fairly robust and almost bug free, however nothing tests a system like the real thing. You can test and plan all you like, but you never seem to find everything. I arranged a BoarderX day at Harthill Adventure Centre (formerly Hale’s Board and Bike Park) for this purpose.
A good group of riders turned up and we got a bunch of qualifying races completed, giving the system a pretty robot run through. For a change, it seems my confidence in the system was well placed! We only found one bug/scenario which I hadn’t planned for and it should only be a half hour fix to resolve.
There are still quite a few things left to do ahead of the World’s (see picture below), but the hard work is certainly done – perhaps now I’ll start getting some more riding in so my legs are ready in time for the biggest competition of the year!