How it works
The reader rides on your vehicle, powered from the vehicle's electrical system or USB, with an external UHF antenna mounted on the side facing the course. The course is marked with waterproof passive UHF RFID tags wherever you want a checkpoint — no battery, no wiring, no maintenance. As the vehicle passes a tag, the reader records the crossing to the millisecond and streams it to the TrailTimer app over Bluetooth.
Build photo
Reader + antenna mounted on the machine — photo coming soon.
1. What you need
The vehicle unit — reference build
| Part | Reference item | Notes |
|---|---|---|
| UHF RFID reader (the core unit) | RainyFi / RainyUHF UHF RFID ESP32-S3, US 902–928 MHz version, with included 5.5 dBi antenna | The whole reader in one — ESP32-S3, UHF front end, display, buzzer, and LED integrated. Use the US version. |
| Baseline antenna | The included 5.5 dBi UHF antenna | Your known-good reference and race-day fallback. In early testing it read the test cards better than the pricier upgrade. |
| Upgraded antenna (optional) | MTI Wireless Edge MT-262031/TRH/A/K, 902–928 MHz, 7.5 dBic RHCP | Right band, but circular polarization and tag compatibility matter — validate it against your final tags before trusting it. |
| Coax / extension | Rokland 240-class SMA-male → N-male, ~6 ft / 2 m | Keep the run short — at 900 MHz even good coax costs read margin. |
| Power | USB, or a fused 12 V → USB vehicle supply | For a vehicle install use a fused, vibration-safe supply. Switched-ignition power is convenient. |
| Enclosure | Weatherproof project box | Electronics inside, antenna outside, cable entries sealed. |
The checkpoints (as many as you want)
| Part | Reference item | Notes |
|---|---|---|
| Bench / early test tags | UHF RFID anti-metal ABS hard-tag strip, 860–960 MHz | Handy for early bench testing, especially around metal. |
| Rugged course tag | Confidex Ironside Classic (US / EPC Gen2) | The better outdoor direction for a real course. Use these where reliability matters. |
| Mounting supplies | Stakes, T-posts, zip ties, brackets, adhesive | Use on-metal tags when mounting to metal — don't assume a generic tag works on a T-post. |
Use US 902–928 MHz EPC Gen2 / ISO 18000-6C tags and configure the reader for the US region (the firmware region-locks to US). Antenna polarization and tag orientation matter. Don't rely on bench reads — the only meaningful test is a gate test at real vehicle speed. Buy a handful of spare tags.
This guide names the reference parts so you know exactly what was tested, but it deliberately doesn't link to sellers — sourcing shifts, and I'd rather you buy the current-best version. Search the part names, or email me and I'll point you at what I actually bought.
2. Get and flash the firmware
The TrailTimer firmware isn't on an app store or public download — you get the firmware from me. Email tyler@tylerfit.ch, tell me you have the RainyUHF ESP32-S3, and I'll send one of:
- A ready-to-flash firmware file for your unit, with the exact loader steps — usually a one-click USB/web flasher or a short
esptoolcommand. - A hand if the flasher gives you trouble — I'll walk you through getting it onto your reader.
- The source, if you'd rather build it yourself (single Arduino / ESP32-S3 sketch; NimBLE-Arduino 2.x + the Adafruit ST7789 display libraries).
A healthy boot shows Advertising as TrailTimer-XXXX and, on first boot until
paired, a 6-digit [PAIR CODE] on the reader's screen. The current hardened
firmware is protocol v2.
3. Pair it with the app
- In TrailTimer, open Setup → DIY Timing Hardware and turn on "Show RFID Timing Screens" (it's off by default because most people don't have the hardware — you do now).
- Go to Setup → Bluetooth Scanners. Your reader appears as TrailTimer-XXXX, sorted by signal. Tap Connect.
- First time only, enter the 6-digit code from the reader's screen. After that it reconnects silently — the key lives in your iPhone's Keychain.
- Rename the reader to something useful, like the vehicle name (saved on the reader itself).
4. Register and assign tags
- Setup → RFID Tags. With the reader connected, pass each tag past the antenna — it appears under Session Scans.
- Name it (
Start,Finish,Creek Crossing,Back Field) and register it. You can record its map location too. - Open your track (or the track wizard) and assign each tag to its checkpoint.
5. Install on the course
Antenna — mount it on the side of the vehicle that faces the tags:
- High enough to clear bodywork; not buried behind metal, cage tubing, passengers, or cargo.
- Face aimed toward where the tags will be, coax strain-relieved, rigid enough that vibration doesn't change the aim.
Tags — put them at roughly antenna height, facing the passing vehicle, on the same side of the trail as the antenna, close to the racing line, away from metal (unless on-metal tags), and protected from tire strike and mud blast. Don't scatter tags on both sides — pick an antenna side and keep the whole course consistent.
Build photo
Staked course tag and gate-test setup — photo coming soon.
6. Gate testing (the part that matters)
A bench read only proves the reader, antenna, and tag can talk at zero speed. It does not prove the checkpoint will work. For every checkpoint:
- Install the tag where it will actually live.
- Drive past it at realistic speed and confirm the reader beeps.
- Run a Gate Test in the app and aim for a Strong verdict. Marginal → move the tag closer to the racing line, face it toward the antenna, or raise power. Weak will miss reads at speed.
- Repeat from the racing line, then from slightly different lateral positions. Adjust until reads are consistent.
A good checkpoint reads repeatedly without the driver "aiming" at it.
7. Reader tuning
| Setting | Use |
|---|---|
| Transmit power (18–26 dBm, default 20) | Increase only as needed. More power can improve reads but also widens the read zone. |
| RSSI threshold | Filters weak/noisy reads. |
| Debounce | Prevents duplicate crossings from one pass. |
| Peak-RSSI mode | Reports the closest approach in a burst — better for slow / tight checkpoints where the tag stays in range. |
| First-read mode (default) | Simpler, often better for fast gate-style passes. |
Defaults are conservative and right for most courses. Tune only after field testing, and re-run the Gate Test after any change. The reader keeps timing even if the phone disconnects — buffered events replay when it reconnects, so nothing is lost.
8. Race-day tips
- Bring spare tags, the original 5.5 dBi antenna as a fallback, and adapter spares.
- Label every tag physically and in the app; keep a printed course map.
- Test the start/finish gate first. Don't change antenna side after placing tags.
- If a checkpoint is marginal, move the tag closer before adding complexity.
- Sharing a track with friends carries the tag assignments along — a buddy with their own reader can time on your tags immediately.
9. Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Reader never appears in Bluetooth | Firmware not running, power issue, or BLE connected elsewhere | Check serial for the advertising line; power-cycle; disconnect other phones. |
| Pairing code fails | Code regenerates per pairing session | Use the current code shown on the reader. |
| Reads on the bench but not on course | Speed, distance, tag detuning, or poor aim | Gate-test at real speed; move the tag closer; raise/angle it; avoid metal. |
| Reads only on one side | Directional antenna behavior | Put all tags on the antenna side of the course. |
| Multiple reads per pass | Debounce too low or read zone too wide | Increase debounce, or adjust power/threshold. |
| Upgraded antenna seems worse than the cheap one | RFID is system-dependent — not impossible | Use the 5.5 dBi antenna as baseline; test final tags before mounting the MTI permanently. |
RF note: Use US 902–928 MHz hardware and tags, and let the firmware configure the reader for the US region. Avoid non-US UHF RFID modules unless you're intentionally building for another regulatory region.