Chorus RF Laptimer


Chorus [ˈkɔr əs] - 1. (Music) a group of persons singing in unison.

NOTE: This project is currently in a "public beta" stage. Changes to schematic and software are very likely. Feel free to contribute and/or share your usage results to improve the project.

This is a VTX Radio Frequency Lap Timing solution for drone racers - the evolution of a Solo DIY RF Laptimer project. Several updated Solo Laptimer devices connected together make up a Chorus Laptimer device which is capable of tracking several drones at once. This is a "lightweight" alternative to IR lap timing systems having the advantage that it does not require any additional equipment on drones except VTX.


Support the project:

If you'd like to support the project, please contribute. This is the main benefit of the open-source ideology.

If you feel like spending some money for the purspose - I'd also be very grateful for that.

PayPal logo - PayPal Me

Bitcoin logo - 1KHfQpKfSFZtc9c7b9ZPSsX3uqRcXgJuow

Thanks for your support!

Featured references:




Solo or Chorus node - device for tracking a single drone. Parts cost about $12. Consists of Arduino Pro mini, RX5808 module, connectors, optional buzzer, optional resistors:

Solo device

Chorus - several (2+) connected Solo devices (nodes):

Chorus device



How it works

Each Solo device measures a VTx signal strength (RSSI value) and compares it with a threshold set up. If the RSSI value is above the threshold, the corresponding drone is considered passing a finish gate.


Used parts

Bluetooth module setup

Make sure your bluetooth module baud rate is set to 115200 (use any of numerous tutorials on internet).

Generalized steps:

  1. Connect HC-06 -> USB-UART Adapter -> PC
  2. Open Arduino IDE, set adapter's COM port, run Serial Monitor
  3. Send commands

More details for HC-06 are on this wiki page

WiFi module setup

Geekcreit DT-06 modules by default operate as WiFi access point with IP So open your browser, connect to and set up as follows:

Don't forget to save each page after making the changes!

Change Baud Rate to 115200, Serial Split Timeout(ms) to 10, leave other settings as shown:

Serial page setup

On the WiFi page you may specify the name for your WiFi network and set a password:

WiFi page setup

On the Networks page you should select UDP Server and make sure the UDP port is set to 9000:

Networks page setup

Make sure to restart the module to apply the changes. They'll remain until you "Restore" the module to defaults.

Restart module

RX5808 SPI patch (required)

(copied from sheaivey/rx5808-pro-diversity repo)

In order to get the RX5808 to use SPI you will need to open it and remove a single SMD resistor.

RX5808 spi patch

For older versions of RX5808 use these instructions.

Wiring of a Solo device

Parts may be connected directly without using any additional components:

UPDATE: powering RX5808 from Arduino's VCC was a bad idea - Pro Mini's linear regulator might not be able to provide enough power for RX, so use raw 5V power instead.

UPDATE #2: powering Arduino via RAW pin is also a bad idea if you use external stabilized 5V power supply - Arduino's internal voltage regulator might significantly drop voltage thus making LiPo monitor calculations wrong. Supply 5V power to VCC pin instead (as shown on the updated wiring diagram).

Note the resistor divider for LiPo Battery monitoring. Although just one of the Solo devices in a Chorus should be connected to LiPo battery for monitoring, but make sure to have A0 Arduino pins on all other Solo devices connected to Ground (via 1K resistor) or just solder the resistors on each Solo device according to schematic.

Wiring Solo schematic

It seems to work fine being connected this way, however adding 100 Ω resistors in line on SPI wires (Arduino pins 10, 11, 12) is a good idea to prevent possible glitches with channel selection:

Wiring with resistors

Schematic and PCBs

Schematic and PCB design in DipTrace format are available in the DipTrace folder.

Schematic Printed Circuit Board

PCB by Joao Reis (Gerber format, SeedStudio compatible):

PCB by Joao Reis

PCB by Philip Seidel (4 node, DipTrace, Gerber):

PCB by Philipp Seidel

Assembly of a Solo device

Correct positioning of RX5808 module against the finish gate area is vital for correct measurements.

I tried using different types of antennas and shields with RX5808 to achieve the best possible accuracy, and finally found that the module itself works as a short-range directional antenna. The non-shielded side of the module is a surface that should face the gate, so consider this fact upon assembling.

Assembly of a Chorus device

  1. Make several Solo devices.
  2. Connect them together.
  3. Connect a Bluetooth module to the last Solo device in a chain.
  4. Use a jumper on the first Solo device to shorten two upper pins.
  5. Attach 5V power supply to one of the Solo devices (make sure to supply enough power - each Solo device consumes about 250mA).
  6. Optionally attach LiPo battery to one of the solo devices that has a resistor divider for LiPo Monitoring feature
Assembly of a Chorus Device



Download the project from Arduino folder, open chorus-rf-laptimer.ino file with Arduino IDE and upload to each Solo device.

Android App

The app is now available on Google Play.

Get the Android app

iOS App

Lazar Djordjevic is the creator of the iOS app. Thanks, Lazar!

The app is available on App Store.

Get the iOS app

Note for iOS users: Apple devices don't work with HC-05/06 modules. You should use HM-10 Bluetooth module instead. (Or wait for WiFi modules support in iOS version :))

App User Guide

Android app is used as the illustration for the guide.

Application startup screen:

Application startup screen

Use "⋮" menu to connect/disconnect to your Chorus device.

Application connect

Connection is available via Bluetooth or WiFi, depending on the connectivity module you use for your Chorus.

Bluetooth connection assumes that Bluetooth is enabled and the Bluetooth module is paired with the phone.

WiFi connection assumes that the module operates in Access Point mode (AP), UDP server is up and running on port 9000, and you are connected directly to its WiFi network.

Once connected to Chorus device, the app automatically detects a number of stacked Solo devices and shows corresponding controls.

The app consists of 4 tabs:

Controls on the tabs are mostly self-explanatory. Still some clarifications might be useful:

When you stop the race, Chorus device immediately clears saved lap times, but they remain visible in the application until new race is started. Also the Race data is saved in CSV reports on your device (if you grant the Write to SD Card permissions)

LiPo Monitoring feature has a "hidden" possibility for adjustment. If voltage measured by LiPo Monitor in Android App doesn't correspond to real voltage of your battery, perform a long tap on a voltage value to see the Adjustment controls:

LiPo Monitor LiPo Monitor Adjustment

Adjust until measured voltage corresponds to the voltage of your LiPo battery while it's powering the Chorus device.

Setup and Usage Guide

  1. Power on the Chorus device and put it on the ground in a corner of the finish gate facing the opposite side at 45 degrees upwards.
  2. Start the mobile app and connect to the Chorus device.
  3. Setup VTX Band/Channel for each Solo device in Android app on the "Freq" tab.
  4. Fully prepare racing drones and power them up (VTX must be powered in racing mode).
  5. Setup threshold values for each channel on the "Pilots" tab (see detailed description below).
  6. Repeat step 5 for each drone taking part in a race.
  7. Calibrate timers using the corresponding button on a "Race" tab (in case you have more than 1 Solo device).
  8. Start Race in the app.
  9. Fly the track and see the lap times being captured.

Also consider shielding the Chorus device with a piece of metal on one side where drones are approaching from. It might increase the accuracy by partially blocking the VTx signal before a drone is inside a gate.

RSSI Threshold Setup

When you first start the device, it has predefined threshold values of 190 on each channel, which is more or less suitable value for 25mW VTx. But if you want to have accurate laps tracking, you should consider individual thresholds setup for each participating drone.

You can set RSSI threshold in 2 alternative ways:


  1. Hold a powered drone at the opposite side of the gate.
  2. Note the RSSI value.
  3. Use +/- buttons to change the threshold to match the noted value (short press changes by 1, long press changes by 30).
Manual Threshold Setup


  1. Hold a powered drone far enough from the device (10-20 meters), so that current RSSI is significantly lower compared to when the drone is near.
  2. Long press "Set" button - notice yellow circle progress bar which means that Chorus is wating for RSSI to start rising.
  3. Walk towards the opposite side of the gate. At some point notice the yellow progress bar changing color to blue, which means that Chorus recognized the rise of RSSI and is now tracking the maximum value). Continue approaching the gate (RSSI should rise).
  4. Pass the gate (don't stop) and move away from it (either return or go forward). Make sure that you pass Chorus a bit farther than the most distant point of the gate where you want Chorus to capture a flying drone during the race.
  5. At some point distant from the gate, the blue progress bar will change to the captured RSSI threshold value. You're done!

Note: you can set thresholds for all pilots in a heat at once. Just start threshold setup for each pilot and have all pilots walk by the gate.

Automatic Threshold Setup


If the app connects to Bluetooth module but doesn't seem to communicate with the device, check the following:

  1. Arduino must be 5V 16Mhz (proper work of 3.3V 8Mhz is not guaranteed)
  2. Bluetooth module baud rate must correspond to Arduino's: 115200 baud
  3. Loopback jumper must be in place.
  4. Wiring :)


Big thanks to all contributors to this project:

Android app:

Arduino app:

iOS app:

Alternative PCB design:

LiveTime integration:


Feel free to ask questions, suggest improvements, report your usage results.

Happy flying!

/Google Play and the Google Play logo are trademarks of Google LLC./