Oddly worked with MacLaren McCann, GMC, and Race Haven Hobbies to put sensors, cameras, computers, tablets, and batteries together with Node.js for one of Chevrolet's attractions at the 2015 Toronto PanAm games, and our largest installation project yet.

MacLaren McCann had a very big idea for showcasing reuse of the Chevrolet Volt’s batteries - a 1,038 long 6 lane bicycle-powered slot car track with its own video recording system. Could it be built?


This project had many new technical challenges for us. We faced questions like:

  • How do we get power out of the car batteries?
  • How do we know how fast players are pedaling their bikes?
  • How do we let that influence the car’s speed on the track?
  • How to we regulate voltage over thousands of feet of copper?
  • How do we monitor where cars are on the track?
  • How do know which car is winning?
  • How much info do we convey to users, and how do we do it?
  • How do we record video of action spread out over 1000 feet of track?

No one had built a track with this many features before. We built and trashed numerous prototypes for track sensors, voltage controllers, and video recording solutions along the way to figuring out a solution.


Cars on the track 3, 2, 1, GO!

Chevrolet Volt batteries powered 6 cars around a xxxxx long track. Our software and hardware helped make it possible.

GMC’s Volt Batteries powered the entire installation and we built everything on top of that. We created a network with dozens of computers, phones, tablets, Arduinos, and RaspberryPIs running software we created.

Track Integration

Race Haven Hobbies built us a short track to test our ideas in the weeks before the installation went live. We experimented with different types of sensors for monitoring the positions of the cars, different methods of changing car speeds by adjusting the voltage on the track, and how staff would interact with the track to run races.

After trying several ideas, we found a reliable sensor that could alert a RaspberryPI of car going by, and built several bars of them to watch the 6 lanes of track. We found Arduino motor shields worked best for controlling the voltage of the track, and figured out simple ways for the staff to start, stop, and monitor races.

Bike Integration

GMC’s engineers delivered a realtime stream of performance data from the bikes that charged the Volt battery. Our central server received the stream of info and broadcasted it to other parts of the system that needed the info, such as the speed controllers on the track and the heads-up displays.

Video Recording

We placed several RaspberryPIs with cameras around the track to provide video streams of cars to the Heads-up Displays. We used FFMPEG and nginx to broadcast the video streams to the Flash-based heads-up displays in front of each player.

Track Remote

We gave control of the races to the in-house race commentators with a simple web application that ran on a cell phone. With the touch of a finger, the commentator started races and triggered sound effects in the installation’s sound system.

iPad Integration

Each user could request a recording of their race using an iPad mounted to their bike. We made a web application that ran on the iPad and let users sign up to receive their video. A web socket connection with the central server pushed changes in the track’s state to the web application to ensure players could only sign up in between races, and not during them.

Heads-up Displays

Each player had a big TV screen in front of them displaying info from the central server (the countdown to start the race, each rider’s lap times), info from the bike (power output), and video of their car as it went around the track, and final ranking in the race. We used Flash for its ability to connect to RTMP video streams and overlay animation with sharp looking vector graphics. Behind the scenes, a each screen had desktop PC running the Flash player and an application we designed and developed.

Race Video Recording

We used scriptable screen capturing software on each PC powering a heads-up display. At the start of the race, the central server would tell all 6 PCs to start recording their heads-up display output, and to stop recording at the end of the race. Each PC then sent its screen capture to the central server for processing.

Race Video Sharing

We wrote another application to automate sandwiching the videos from the heads-up displays between Chevrolet branding and adding music using FFMPEG. Then the application uploaded each video to YouTube under Chevrolet’s account, and notified the rider who signed up to receive it.


Crowds lined up to play 1000s of happy players

The track ran 1000s of races on our software and network. We were on site and able to improve the software running the track over the 2 weeks of the games.

The track received media attention from blogs (1, 2, 3) and local TV stations. It set a Guiness World Record for most people generating electricity in a week. Over 5000 people had fun competing with each other, and thousands of them allowed their race videos to be uploaded to YouTube.