I've been working on solving a fairly unique problem with the Raspberry Pi and I thought I'd share my progress.
I've been working in the ski race industry for the past 9 years or so, with a particular focus on timing. The rules for timing a ski race are pretty highly regulated by FIS, the international sanctioning body. The traditional way of doing it is to have a start wand at the top and a photocell switch at the finish, with copper wire connecting both to an approved timing device in the finish shack. The timing device records the time of day of any event (start or finish) down to the 1/10,000th+ of a second and passes this info on to a computer over a serial connection. The computer then calculates net times by subtracting the start time of day from the finish time of day. At least one backup system is also required for any scored race. For a world cup or Olympic race 3 backup systems are required.
This has the obvious drawback of requiring lots of copper wire. For a downhill course the start may be 2 or more miles from the finish. That amount of copper is expensive, the installation is expensive, and once there is snow on the ground repair is expensive if not impossible. In the past few years, however, FIS has made an allowance for timing without wires between the start and finish. To achieve this, start time of day info is recorded at the start, on a separate approved timing device that is synchronized to the device in the finish. All that is needed is to get this info somehow to the finish shack to be able to calculate net times. If none of this makes sense, some diagrams can be found here on page 14: https://assets.fis-ski.com/image/upload ... 2_59-E.pdf
The approved (homologated, in skiing lingo) timing devices all communicate with a PC via an RS232 serial connection. The problem is getting this serial data from the start, which is possibly several miles away, to the PC in the finish area. FIS makes no specification on how this must happen. Current solutions on the market use radio transmitters, which tend to be pricy and also require line-of-sight, which may or may not be available.
My solution is to collect the serial info from the timing device in the start using a raspberry pi, then send it to the finish using MQTT. The computer in the finish receives the data over MQTT, then sends it to the target timing software using a serial null modem (com0com). This has been working great so far, at only $30 or so for a Pi Zero with a case and an SD card. The MQTT protocol has proven reliable with shaky internet connections. I am still working on reliably measuring the transmission time of MQTT messages, but the results overall have been promising.
Anyways, sorry for the novel. There are very few people in the world interested in wireless timing or remote serial data so I thought I would post here in hopes that someone else might find the project useful. It could easily be adapted for any project that needs to access a serial device remotely, and even comes with a GUI!
The project is here if anyone is interested: https://github.com/zhenry9/ullr