Track Mode telemetry dashboard with central tachometer, shift lights, and bar graphs
← Telemetry — Master Module

Live Telemetry & Data Link

A modular, embedded vehicle telemetry platform modernising an analog sports car with real-time data acquisition, high-frequency logging, and dynamic HUD rendering.

View Repository on GitHub
01

System Specification

Hardware architecture and polling figures pulled directly from the physical build.

Vehicle Mule 2004 Lotus Elise 111R (2ZZ-GE ECU)
Processing Core Raspberry Pi 5 — Broadcom BCM2712, VideoCore VII GPU
Bus Communication ISO 9141-2 (K-Line) over USB — Vgate vLinker FS, FTDI FT230X bridge
Display Hardware 5-inch capacitive touchscreen — 800×480 native resolution (DSI)
Sampling & Refresh Fast PIDs (RPM, Speed, Throttle) @ 20 Hz · Slow PIDs (Coolant, Battery, IAT, Fuel) @ 1 Hz round-robin · 60 FPS vector rendering
UI Framework Python 3 / PyQt5 — QPainter vector graphics engine
Onboarding menu screen allowing driver to select between Road Mode and Track Mode
02

Onboarding & Mode Selection

Upon power-up, the software launches directly into a clean kiosk menu. Rather than locking the driver into a single interface, the touchscreen allows instant selection between Road Mode and Track Mode before initializing the OBD-II polling thread.

This onboarding layer ensures the system configures its active query set (needed_fields) before opening serial communications, optimizing bandwidth from the moment the engine fires.

03

Road vs. Track Layouts

One telemetry core, two dedicated UI profiles tailored for street ergonomics or high-RPM motorsport focus.

Road layout mockup showing speed, coolant, battery, intake temp, and fuel level
Road Mode General Profile

Ergonomics & Daily Drivability

Focused on clear road parameters: large digital speed readout, battery voltage, intake air temperature, fuel level, and balanced coolant zone alerts.

VS
Track layout mockup with dominant central tachometer, shift lights, and bar graphs
Track Mode Track Profile

Driver Focus & High-RPM Performance

Dominant central tachometer with progressive shift lights sweeping up to 8,500 RPM, dedicated throttle position bar, and lap timing HUD.

04

Interactive Telemetry Simulator

A pixel-perfect Web Component port of the Python PyQt5 rendering engine. Experience the dashboard directly in your browser with real-time physics and pedal inputs.

05

In Action

Comparing desktop simulation testing against real-world in-car testing inside the Lotus Elise cockpit.

MOCK DATA
LIVE VEHICLE DATA

Road Mode — Mock Simulation

Verifying UI smoothing, color thresholds, and gauge sweep animation on desktop via MockEngine before deploying to hardware.

Road Mode — Live Vehicle

Real-time road layout data ingestion over ISO 9141-2 K-Line inside the Lotus Elise, proving immediate throttle response.

Track Mode — Mock Simulation

Testing tachometer sweep, progressive shift lights, and throttle bar response using simulated high-RPM data.

Track Mode — Live Vehicle

Full track layout running live in the cockpit with real ECU data, zero frame drops across tachometer and shift light rendering.

06

Integration & Hardware Debugging

Bridging software and physical vehicle hardware presented real-world constraints that required targeted architectural fixes.

K-Line Bus Latency

Solving 1s Throttle Lag & Bus Bottlenecks

Challenge: The Lotus 2ZZ ECU communicates over ISO 9141-2 (K-Line)—a legacy half-duplex serial protocol where queries block sequentially. Polling all 9 supported PIDs every frame caused a ~1-second lag between throttle input and gauge movement.

Fix: Implemented selective field querying (needed_fields) and a Dual-Rate Polling Engine. Fast fields (RPM, Speed, Throttle) are queried every iteration at 20Hz, while slow fields (Coolant, Battery, Intake Temp, Fuel) are polled round-robin once per cycle (1Hz). Query count dropped from 9 to 3 on Road layout, eliminating lag completely.

Serial Transport

Serial Port Enumeration & Handshake Fixes

Challenge: macOS enumerates FTDI chips as /dev/cu.usbserial-*, while Linux uses /dev/ttyUSB0. When unreachable, python-obd fell back to an auto-scan that got stuck probing Apple's debug console for 30s. Additionally, forced baud rates (38400/115200) broke adapter initialization.

Fix: Configured launch environment variable overrides (PITELEMETRY_PORT) to target valid ports directly and bypass auto-scan sweeps. Reordered connection attempts in model.py to prioritize auto-baud negotiation before forcing explicit rates.

UI Engine

Neutral Palette Color Calibration

Challenge: Night cockpit testing revealed a noticeable reddish tint across the dashboard background, caused by subtle red-channel biases in palette hex codes (e.g., #1A1012).

Fix: Refactored config.py, motec_tachometer.py, and side_panel.py to enforce true neutral greys ($R=G=B$). Verified color accuracy across the entire rendering pipeline via RGB pixel sampling.

Vehicle Packaging

Power Management & Cockpit Integration

Challenge: Ensuring clean startup and shutdown sequences when powered directly from the car's ignition circuit without corrupting the MicroSD file system.

Fix: Routed switched 12V audio power through a regulated 12V-to-5V buck converter feeding the Pi 5, paired with auto-launch systemd kiosk services and read-only overlay filesystems.

07

Platform Modules

The telemetry platform is split into independent modules, each tackling a specific aspect of vehicle data.

Hardware

Mechanical Enclosure

Custom 3D-printed single-DIN bezel holding the 5" DSI screen flush in the Lotus Elise dashboard.

Software

OBD-II Software Interface

Asynchronous multi-threaded data ingestion, publish-and-poll architecture, and K-Line protocol handling.

Active HUD

Live Telemetry & Data Link

Real-time cockpit dashboard rendering, Road vs. Track profiles, and zero-lag ECU gauge sweeps.

Sub-Module

Lap Timer & Performance Logger

10Hz GPS automated start/finish line geofencing, acceleration benchmarking, and VBOX session logging.

Sub-Module

G-Force Meter & Cornering Analysis

50Hz 6-DOF IMU integration measuring live longitudinal/lateral Gs, pitch, roll, and friction circle limits.

In Development

Dashcam & Video Overlay

Synchronized video capture paired with real-time telemetry gauges burned directly into MP4 track footage.

08

Production Build

The final production version after many sessions of hardware debugging, UI refinement, and real-world testing.

Road Mode — Production

Final production road layout running in the Lotus Elise with all debugging fixes applied.

▶ Press play and unmute for sound

Track Mode — Production

Final production track layout with calibrated tachometer, shift lights, and zero-lag throttle response.

▶ Press play and unmute for sound