Be a Mechanic...with Android and Linux!
"Check Engine Soon"—that little orange light on your car's instrument panel is possibly one of the more annoying things about modern automobiles. Ever had it pop on during a trip and wonder whether it was just something mundane, like your gas cap being loose, or whether it's something deathly serious and a piston could come shooting out the side of your engine block at any time? Well, thanks to an inexpensive little piece of hardware and an Android tablet, I'll help you decode that little orange light in your car.
The human race has had automobiles for more than 100 years now, but we've had computer monitors and control engine operation only for around 30 years or so. The first computer controls were primitive, hard to work with and expensive. Each automotive manufacturer had its own computer systems, protocols, connectors and trouble-code definitions. I worked as a mechanic during the late 1980s and early 1990s, and I remember those systems well—not fondly, of course, but well. Some of those systems required you to do crazy things like jump a connector with a piece of wire, then turn the key on and off three times and observe the Check Engine light as it flashed on and off. You'd have to count the number of flashes accurately and then look up the "trouble code" that flashed in a service manual, and you might get a clue as to what was wrong with the vehicle. Those early diagnostic systems made seasoned mechanics who were used to troubleshooting the machinery of an engine rather than its electronics shudder with trepidation. Over time, the manufacturers made the systems better. The Society of Automotive Engineers made the connector, protocol and trouble codes a standard in 1996, and with that, we've got the system in place today: OBD-II (Onboard Diagnostics, 2nd revision).
Any car sold in the United States after 1996 uses the OBD-II computer system, so the majority of cars on the road today have this system. Thanks to OBD-II's standardization and age, lots of tools have been released to work with the system. Because OBD-II defines the connector and protocol, that means you need both a hardware device to interface with the connector and some software to speak the protocol.
The hardware I use is the Soliport ELM327 Bluetooth OBD-II Scanner (see the Amazon link in the Resources section of this article). It's a very inexpensive (less than $20) dongle that plugs in to the OBD-II port under your dashboard, draws its power directly from the car and converts the OBD-II-specific signals to serial-over-Bluetooth. There are other OBD-II scan tools on the market. Some are just plain-old cables to hook straight into a computer's RS-232 serial port, and others are as fancy as full-on bridges to a Wi-Fi network. And, there are other manufacturers of Bluetooth OBD-II scan tools, but just make sure whatever you get is based on the ELM327 chipset.
Another piece of hardware you'll need is a computer of some kind. Any Linux-powered laptop with Bluetooth will suffice, but the form factor is kind of clunky when you're dealing with a cramped automotive cockpit. (See the Using a Laptop to Scan Your OBD-II System sidebar if you want to use a laptop.) My personal preference is to use an Android device to interpret the signals coming from the OBD-II system in the car. I use a Nexus 7 tablet for this, but any Android device should work. I've used a Motorola Droid RAZR and the very first HTC G1 Android phone for this as well.
Figure 1. Tools of the Trade: a Nexus 7 Tablet and a Soliport Bluetooth OBD-II Scanner
Software-wise, my choice for this on Android is Torque, an excellent app that not only can collect all the OBD-II stats, but also graph and log them in myriad ways. (There's also a free version, Torque Lite, that has a fair deal of the functionality of the full version.) Grab either one from the Google Play store.
Note that this solution is for read-only access to the OBD-II system in the car. You can't modify the running parameters of the vehicle with this adapter, unfortunately (or fortunately, perhaps, as it's very easy to make a mess of things). Flashing your car's computer with a new fuel curve or ignition timing map is a nontrivial exercise that requires an adapter with different voltage levels and different software. So, don't worry about breaking your car with this solution—you're just "peeking under the hood".
Bill Childers is the Virtual Editor for Linux Journal. No one really knows what that means.
- Tech Tip: Really Simple HTTP Server with Python
- My Childhood in a Cigar Box
- Papa's Got a Brand New NAS
- Applied Expert Systems, Inc.'s CleverView for TCP/IP on Linux
- Returning Values from Bash Functions
- Rogue Wave Software's TotalView for HPC and CodeDynamics
- Panther MPC, Inc.'s Panther Alpha
- Simplenote, Simply Awesome!
- NethServer: Linux without All That Linux Stuff