A compact, GPS-enabled bike tracker with Bluetooth (BLE), built to fit inside a seat tube. It tracks speed and position, sends data to a phone app, and includes an integrated brake light system using LEDs and an accelerometer.
Estimated cost: ~435 NOK (AliExpress) / ~1,330 NOK (local hobby shops)
| Component | Model | Qty | Purpose | Price (CN) | Price (NO) |
|---|---|---|---|---|---|
| Microcontroller | ESP32-C3 SuperMini | 1 | Brain, Bluetooth 5.0, PWM control | 35 kr | 120 kr |
| GPS Module | Beitian BN-180 or ATGM336H | 1 | Speed & location tracking | 90 kr | 250 kr |
| GPS Antenna | 15×15mm Active Ceramic (u.FL/IPEX) | 1 | Signal reception through seat tube hole | incl. | incl. |
| Accelerometer | LIS3DH (breakout board) | 1 | Brake detection & deep sleep wake | 25 kr | 90 kr |
| Component | Model | Qty | Purpose | Price (CN) | Price (NO) |
|---|---|---|---|---|---|
| LEDs | 3W Red Power LEDs | 5 | Brake light (15–50 lumen) | 20 kr | 100 kr |
| Lenses | 13mm Mini TIR LED Lenses (60°) | 5 | Focus & prism effect | 15 kr | 80 kr |
| LED Driver | IRLB8721 Logic Level MOSFET | 1 | Lets ESP32 drive high-power LEDs | 10 kr | 40 kr |
| Resistors | Appropriate values for LEDs | 5 | Current limiting | incl. | incl. |
| Component | Model | Qty | Purpose | Price (CN) | Price (NO) |
|---|---|---|---|---|---|
| Battery | 18650 Li-ion 3500mAh (Samsung 35E / LG MJ1) | 3 | 10,500 mAh total capacity | 180 kr | 450 kr |
| Charge Module | TP4056 USB-C (with protection) | 1 | Charging & battery safety | 10 kr | 50 kr |
| USB-C Breakout | Female USB-C breakout board (optional) | 1 | Mount charge port in seat tube hole | incl. | incl. |
| Component | Purpose | Price (CN) | Price (NO) |
|---|---|---|---|
| 30AWG Silicone Wire (stranded, multi-color) | Vibration-resistant wiring | 50 kr | 150 kr |
| Heat Shrink Tubing (30mm & 40mm) | Moisture sealing | incl. | incl. |
| Conformal Coating (e.g. MG Chemicals 419D) | PCB corrosion protection | incl. | incl. |
| Clear UV Resin or 2-part Epoxy | Waterproof lens sealing (IP67) | incl. | incl. |
| Self-adhesive Foam Tape / Neoprene | Vibration dampening in tube | incl. | incl. |
| Thermal Glue | Heat transfer from LEDs to metal tube | incl. | incl. |
- Soldering iron + solder (rosin core flux)
- Multimeter (check for shorts before connecting battery)
- Heat gun or lighter (for heat shrink)
- UV lamp (if using UV resin)
The components are stacked vertically inside the seat tube in a "sandwich" formation:
┌─────────────────────┐ ← Seat tube opening / hole
│ GPS Antenna │ ← Topmost: sits at or just below the hole
│ (faces skyward) │
├─────────────────────┤
│ USB-C Breakout │ ← Optional: mounted in the hole for charging
├─────────────────────┤
│ GPS Module (BN-180) │
│ ───────────────────│
│ ESP32-C3 SuperMini │ ← Glued back-to-back with GPS, insulation between
│ ───────────────────│
│ LIS3DH Accelerometer│
├─────────────────────┤
│ MOSFET + Resistors │ ← LED driver circuit
├─────────────────────┤
│ 18650 Battery #1 │
│ 18650 Battery #2 │ ← 3 cells in parallel (same voltage!)
│ 18650 Battery #3 │
└─────────────────────┘ ← Bottom of seat tube
- Drill 4–5 small holes in the seat post, facing rearward
- Mount each 3W LED behind a TIR lens in each hole
- Seal with clear UV resin or epoxy for waterproofing (IP67)
- Glue LED backs to the metal tube wall with thermal glue (acts as heatsink)
The GPS antenna must have "sky view" — metal blocks GPS signals (Faraday cage effect).
- Route a thin u.FL cable from the GPS module up through the seat tube hole
- Place the 15×15mm ceramic antenna at the opening, just under the seat
- If the frame is carbon, signal may partially pass through without external antenna
USB-C ──→ TP4056 Charge Module
│
B+ ───┤──→ 3x 18650 in Parallel (connect + to + , − to −)
B− ───┘
│
OUT+ ──┤──→ ESP32 VIN (3.3V regulated onboard)
OUT− ──┘──→ ESP32 GND
⚠️ Before connecting batteries in parallel, charge each cell individually to the same voltage first.
BN-180 TX ──→ ESP32 RX (GPIO20 or any UART-capable pin)
BN-180 RX ──→ ESP32 TX (GPIO21 or any UART-capable pin)
BN-180 VCC ──→ 3.3V
BN-180 GND ──→ GND
u.FL port ──→ External GPS antenna (via cable through tube)
LIS3DH SDA ──→ ESP32 SDA (GPIO8)
LIS3DH SCL ──→ ESP32 SCL (GPIO9)
LIS3DH VCC ──→ 3.3V
LIS3DH GND ──→ GND
LIS3DH INT ──→ ESP32 GPIO (for wake-from-sleep interrupt)
Battery+ ──→ MOSFET Drain ──→ LED+ (via resistor per LED)
LED− ──→ GND
ESP32 GPIO (PWM) ──→ MOSFET Gate (with pull-down resistor)
MOSFET Source ──→ GND
- TinyGPS++ — Parses GPS data; use
.speed.kmph()for speed - ESP32 BLE Arduino — Bluetooth Low Energy communication with phone app
- Boot → Initialize GPS, BLE, accelerometer
- Active Mode (cycling):
- GPS reads position & speed at 1–10 Hz
- ESP32 sends speed via BLE to phone app
- Accelerometer detects braking (negative G-force) → trigger LEDs at 50 lumen
- Normal riding → LEDs at ~15 lumen (tail light mode)
- Deep Sleep Mode (parked):
- No motion for 2 min → turn off GPS & BLE
- Power draw drops to ~1–2 mA (accelerometer stays awake)
- Motion detected → instant wake-up, resume tracking
- BLE timeout:
- No phone connected for 5 min → stop BLE advertising to save power
GPS speed can jump under trees or between buildings. Apply a simple moving average filter (last 3 readings) for stable display in the app.
| Mode | Current Draw | Duration (10,500 mAh) |
|---|---|---|
| Active (GPS + BLE + tail light) | ~100–150 mA | ~35+ hours continuous |
| Braking (LEDs at 50 lumen) | ~300–500 mA | Burst only |
| Deep Sleep (parked) | ~1–2 mA | ~200+ days |
| Real-world (1 hr/day commute) | — | 2–4 months between charges |
- Cold weather (−5°C to −10°C) reduces effective capacity by 20–30%
- Poor GPS signal = higher power draw (module works harder)
- 10 Hz updates use more power than 1 Hz — tune to your needs
- Heat shrink (with adhesive lining) around all electronics except antenna
- Conformal coating on all PCBs to prevent condensation corrosion
- UV resin or epoxy seal on each LED lens hole (flush with seat post)
- Foam/neoprene wrap around the module stack to prevent rattling
- Use stranded silicone wire (not solid core) — handles vibration
| Location | Pros | Cons |
|---|---|---|
| Inside seat tube (recommended) | Invisible, theft-proof, protected | Requires external GPS antenna, metal blocks BLE signal |
| Under the seat | Easy access, good GPS signal | Visible, vulnerable to theft/weather |
| Bottle cage mount | Flat box, easy to remove for charging | Takes up bottle cage spot |
| Volume | Estimated Unit Cost |
|---|---|
| 1 (prototype) | ~435 kr (CN) / ~1,330 kr (NO) |
| 100 units | ~300 kr (custom PCB) |
| 1,000+ units | ~200–250 kr (PCBA + bulk batteries) |
Suggested retail price: ~990 kr (healthy margin for an advanced product).
Note: 25% MVA (VOEC) applies on shipments from abroad over 350 kr. Always use reputable battery brands (Samsung, Panasonic, LG) — avoid cheap cells with fake capacity ratings.
Revision for find my support:
DIY Bike Tracker — Build Guide
Overview
A compact, GPS-enabled bike tracker with Bluetooth (BLE), built to fit inside a seat tube. It tracks speed and position, sends data to a phone app, and includes an integrated brake light system using LEDs and an accelerometer. Supports both Apple Find My and Google Find My Device networks via the official MFi / FMDN certification path.
Estimated cost: ~480 NOK (AliExpress) / ~1,400 NOK (local hobby shops)
Parts List
Main Electronics
Brake Light System
Power System
Mounting & Protection
Find My Network Compatibility
The nRF52840 is one of the only chips officially supported by both Apple and Google for their Find My networks.
MFi Certification Path
Google FMDN Certification
Tools Required
Assembly — Physical Layout
Where Everything Goes (Seat Tube Stack)
The components are stacked vertically inside the seat tube in a "sandwich" formation:
LED Placement
Antenna Placement
The GPS antenna must have "sky view" — metal blocks GPS signals (Faraday cage effect).
Wiring Diagram
Power Circuit
GPS Module → XIAO nRF52840
Accelerometer (Built-in IMU)
No external wiring needed — the LSM6DS3TR-C is soldered onto the XIAO Sense board and communicates via internal I2C. Access it in firmware directly.
Piezo Buzzer
LED Brake Light Circuit
Software Logic
SDK & Toolchain
Core Behavior
Speed Smoothing
GPS speed can jump under trees or between buildings. Apply a simple moving average filter (last 3 readings) for stable display in the app.
Battery Life Estimates
Battery Tips
Weatherproofing Checklist
Mounting Options
Scaling to Production
Suggested retail price: ~990–1,290 kr (premium justified by dual Find My support).