How a $10K Electric Car Beat a $100K Competitor
A student engineering team. A DIY electric car. A telemetry system nobody could copy. Multiple first-place finishes.
That's the story of Eric Yoon and his team at the University of Waterloo's EV Challenge. A nationwide competition where teams build electric cars from scratch and race them for maximum distance on a fixed battery.
The Problem: Every Car Looked the Same
Eric's team had the best mechanical design. Other teams noticed. They started copying it. Exhibition day became a design showroom. Teams walking around, snapping photos, converging on a mechanical singularity.
The advantage was gone.
So the team pivoted. Instead of optimizing the car, they optimized the strategy. Battery usage, race pacing, pit stop timing. And they built a real-time telemetry system to do it.
The best part? Competitors can't peek under the hood for software.
Version 1: Raspberry Pi, PubNub, and a Lot of Lessons
The first system had four components:
Cycle Analyst: Read voltage, current, amp hours, speed, distance
Raspberry Pi: Compile data, run the racing algorithm
Phone (hotspot + display): Connect to PubNub, show driver dashboard
Pit Crew Laptop: Monitor the PubNub channel in real time
Data flowed from the car to PubNub, and the pit crew could watch and adjust strategy while the car circled the track.
It worked. Mostly.
The cycle analyst spit out comma-separated values. The string got truncated mid-value instead of at the delimiter. Data was getting mangled. Then, during a race, part of the car fell on the dead man switch. The system went down.
But because everything was published through PubNub, the crew could manually adjust values and recover. Not a total loss.
Version 2: Threads, Buffers, and a Clean Architecture
The team rebuilt everything.
Hardware changes:
- Swapped the cycle analyst for an AllTrax controller: better data, more accuracy, onboard storage
- Replaced the Raspberry Pi with a Windows laptop (AllTrax only had a Windows toolkit at the time)
- Stripped back cables: the track was bumpy, connectors kept shaking loose
Software changes:
- Switched the driver dashboard from an app to a website reading directly from PubNub
- Built a multi-threaded Python architecture with three threads:
Intake: Read sensor data continuously
Main: Run the algorithm, analyze the buffer
Upload: Publish results to PubNub
Buffering solved the truncation problem. No more lost data. The main thread filled up, handed off to upload, and kept going.
Simple. Reliable. Fast.
The Result
Multiple first-place victories 🎉 Both 12-volt and 24-volt races. Plus the Dennis Weishar Engineering Design Award, specifically for the telemetry system.
One detail worth noting: a new team showed up that year. FRC (First Robotics Competition) veterans. Hundreds of thousands of dollars in funding. Eric's team had about $10,000.
They still won.
The Hidden Battery Trick
The telemetry data revealed something no other team figured out. Battery performance isn’t fixed. When handled correctly, it can evolve in your favour, but only if you know what you’re looking for.
Most teams never had the time.
Every other team was scrambling to finish their car the week before competition. Same battery model, worse performance.
Eric's team had the data to prove it. And the time to exploit it.
What's Next
The team is exploring AI-driven modeling with PyTorch. Feeding in load profiles, temperature, humidity, and environmental conditions to predict battery drain curves more accurately.
They're also optimizing pit stop strategy. Batteries recover voltage when you cut the load temporarily. Time your pit stops right, and you squeeze out more usable energy from the same pack.
Small optimizations. They add up. That's how you win with a fraction of the budget.
Real-time data, published through PubNub, analyzed on the fly, invisible to the competition. The team's ingenuity, intelligence and execution led them to victory. That's the edge.
Post submitted by: Eric Yoon
"I'm an undergraduate Computer Engineering student attending the University of Waterloo! I'm a full stack developer with a deep passion for continuous learning and am familiar with C++, Next.js, Python, and a variety of other languages/frameworks. When I'm not tinkering away on my computer, I like to spend my time reading, keeping fit, and learning new languages!"