OpenXC Retro Gauge
The Retro Gauge is a mechanical vehicle gauge that displays data received over a serial communication line. One possible use of the gauge is to display vehicle data from the OpenXC Platform.
The design intent was to keep the gauge as open and accessible as possible so that the community could contribute and benefit from the design.
For more details on the project, visit the project page on the OpenXC website.
For an instructional lab on how to build the gauge, see the Retro Gauge Lab.
Retro Gauge Android Driver App
The Gauge Driver is the Android side of the Retro Gauge. It supplies the gauge with a rounded two digit data value, percent (derived from previously set bounds), and color data.
This Android app uses the OpenXC library. The
instructions for how to use the library, but it is automatically included in
the GaugeDriver dependencies. Check the app's
The Gauge Driver also requires the FTDriver by
ksksue. This dependecy is also
automatically included in the
build.gradle file and is made available by an
Android package manager called
The Gauge Driver connects to the OpenXC Vehicle Interface via Bluetooth to get access to vehicle data. The Gauge Driver connects to the Retro Gauge hardware via USB controlled by FTDriver, a serial connection library.
The Retro Gauge can receive two types of data packet.
- Color data is delivered with three digits within angle brackets.
<###>Valid values are between 0 and 259.
- Value data is delivered with two digits each of value and percentage. The
numbers are separated by a comma and enclosed in parentheses.
After startup, the user has the following options:
- Start Updates/Stop Updates – This switch toggles the updates to the Retro Gauge. When off, no information is sent to the gauge.
- Exit - Exits the application. Note that if the user navigates away from this activity via the home or back buttons, updates will continue in the background. The Exit button ceases all USB communication with the gauge.
- Data Source Selection - The large buttons labeled "Vehicle Speed", "Miles per Gallon", and "Steering Wheel Angle" select those data sources for the application. When a data source is selected, a hard coded color pallet is set. Hard coded bounds are also set for computing a percentage. All this happens in the button handlers.
- Color control slider - The user can use this slider to manually change the color of the gauge.
- Map Color To Value - If this is checked, the app ignores the slider and instead sets the color by the percentage value. Each data source uses a different color scheme. Vehicle Speed data sets colors ranging from green at zero to red at 80mph. Miles Per Gallon data sweeps through red at zero to green at 50 miles per gallon and above. Steering Wheel data sweeps through the entire spectrum.
- Manual Data Entry - This is a debugging tool. Text entered in the text box is sent to the Retro Gauge when the Send button is tapped.
Under the Hood
In the Gauge Driver, the serial connection to the Retro Gauge is set up in
OnCreate function only if the app is not returning
from running in the background. Vendor and product IDs do not need to be set,
they are hard coded in the FTDriver code to connect to the FTDI chip.
In preparation for a lack of permission, an Intent
created to receive the intent
registered to handle this incoming intent. Once all this is in place, the
mSerialPort is created, its permission intent is set to
mPermissionIntent, and the app attempts to start the port. If the user has not
yet granted permission, the start fails.
Down in the definition of
mBroadcastReceiver, we handle the user's granting or
denial of permission to use the port.
Once we've successfully started the port, we start updates with
The duration of the timer is hard coded as
The timer created is
mReceiveTimer. It is created as
null and when it is
onTimerToggle, it is set to
null again. It can therefore be
used to determine whether or not it's currently running. If it's
The timer task,
ReceiveTimerMethod, polls incoming data,
converts/scales/rounds the data as needed, calculates a percentage on hard coded
parameters, and sends the value and percentage to the virtual serial port.
If the user has selected that the color of the gauge should be controlled by the data, the color is calculated and sent to the gauge in this method as well.
The Gauge Driver is set up to use three data sources:
steering_wheel_angle. When the user selects a data source,
mDataUsed is set.
ReceiveTimerMethod determines which data and parameters to
use via the
mGaugeRange are also set.
These as used for the computation of a percentage. All this happens in the
button handler for each data set.
This repository is one of 4 repositories listed below:
Mechanical Enclosure Design - The retro-gauge-enclosure repository contains .STL and STEP files for the 3D printable gauge housing.
Hardware - The retro-gauge-hardware repository contains Eagle schematics and PCB layouts for the gauge's embedded hardware.
Firmware - The retro-gauge-firmware repository contains Arduino source code to run on the Retro Gauge.
The firmware source code is available under the BSD open source license.