Progress Blog

Loading screen:

The Wheel:

Due to difficulty with obtaining a Linux driver for our USB steering wheel, we decided to switch to using a phone to control the car. The player tilts the phone to steer the car and uses the slider on the right hand side to control the throttle.

Before disassembling the controller (mostly due to a lack of a long neck screwdriver)
I decided to take a short adventure into figuring out what the mysterious DSC port on
the controller actually did. A quick search of Google yielded only two mentions of DSC
with respect to RC toys; the first being a DSC-to-USB converter so that one could play
their favorite driving simulator using an RC controller. Not exactly what I wanted. The
second was a thread on some RC-enthusiast forum talking about how to use DSC to control
an RC airplane over a wire to debug potential transmitter issues. If hacking the controller
proved to be unsucessful, perhaps we could use a wireless module on the arduino located
on the car and roll our own controller over wifi, while still interfacing with the
existing on-board motor controller.

Fortunately, the DSC port used a standard 3.5mm TRS connection, the same as what is used
by all consumer-grade headphones. Recalling a post that I had seen some months ago that
talked about IR analysis for a TV remote using a simple IR LED attached to an audio plug
which was then captured using Audacity, I decided to
follow in the same vain and connect the controller to the audio input of my computer and
record what happened with Audacity.

As it turns out, the DSC protocol is delightfully simple. As illustrated in the figure below,
a message is simply a set of four 0.38ms pulses with a variable gap between the pulses. The
gap between the first and second pulses indicates the speed, 0.80ms for full forward, 1.30ms
for full reverse. The gap between the second and third pulses determines the directionality,
0.80ms for left and 1.30ms for right. The gap between the third and fourth pulses appears to
be the refernence timing; when the controller is idle the time between the all of the pulses
are equal.

Overview

Herbie was designed for the purposes of recreation—what originated as a simple RC car, meant for enthusiasts with a requisite skill level, is now controllable by more novice operators. Updated from a basic RC remote to something more easily recognizable—holding a cell phone as a controller and turning it like one would a steering wheel, it becomes more intuitive to use.