OBDuino
Contact : info@obduino.ca

OBDuino is a device that connects to the OBD-II plug of your CAN enabled car, and displays various information about your car (RPM, speed, etc). It can also display custom information for 3 trips: the current trip which reset each time the engine is started, a user resettable general trip and the user resettable tank trip too.
Each trip can display average fuel consumption, quantity of fuel used, quantity of fuel wasted at idle (when speed is 0) and distance travelled. Remaining distance, calculated using the tank average and the tank size, can also be displayed.
It displays 4 pieces of information at a time and has 3 virtual displays so it can display up to12 different pieces of data. Each display screen can be configured, as well as the use of the metric system (kilometers, liters, etc.) or the US imperial system (miles, gallons, etc.).
It also detects Diagnostic Trouble Codes (DTC) that turn on your Check Engine Light, as well as the pending DTC that were detected during last driving cycle, and provides the ability to clear these codes (fault ones only, by choice) when finished.
It detects the CAN speed and identification of your car the first time it is plugged in. When the engine is turned off, it shuts itself down after a few seconds and goes into sleep mode, until you turn the key back on. It can also be locked to the car, meaning if it's stolen it will not work on others cars.
Values of the various PIDs are outputed from the device and can be recorded with a serial port adapter (using a MAX232) on a laptop or directly on a SD card using a small daughterboard.
Active device consumes about 35mA. Eventually it will consume as little as 0.5mA in sleep mode (goal, will be tested with the all-in-one PCB final device).

ISO support

I released the ISO version of the OBDuino under GPL, it's hosted on the Google Code service site here: OBDuino.

CAN bus support

So far I have tested it on:
OK: 2007 Hyundai Elantra, 2008 Pontiac G5, 2008 Saturn Vue, 2008 Chevrolet Cobalt, 2006 Honda Civic, 2008 Dodge Caravan
Not OK: Jeep Patriot 2008, Honda Odyssey 2007, I will retest those soon

It is sometimes hard to know if your car supports CAN bus protocol or not, surfing the web I found information on:
2003+ Ford, Mazda, GM
2004+ Chrysler, Lexus, Toyota, Volvo
2005+ Audi, Mercedes
2006+ Honda, Saab, Mitsubishi, Volkswagen
2007+ BMW, Subaru, Hyundai
It may or not work if your car is 2007- but all 2008+ cars sold in North America shall support it.
For European market cars (Renault, Peugeot, Citroën, Fiat, Seat, Skoda, Alfa Romeo, Lancia, etc.) I have no information :-/

Hardware

see this page.

Configuration

see this page.

Logging capabilities

Everytime a PID is queried to the ECU, answers are outputted on the TX pin of the device, it's actually configured as 38400,7,N,1 and output as csv text like "109121,0D,29" which is the time in ms since startup, the PID (0D = speed), the value (29h = 41km/h). Using a small script to keep RPM and speed for instance and output in a .csv, you can then use Excel to do some graphics as this one when I drove around a parking lot.
OBDuino
Instead of using a laptop and a special cable (either a FTDI usb one or a serial one with a max232), I also made a small daughterboard with an SD card slot so I can log all my trip without having a bulky laptop in the car, more about this soon.

Transparent mode

The device can be put in a transparent mode, meaning that after the CAN bus initialization is done, it waits for your command. After the '>' prompt, enter a command followed by a pid, for instance to ask for the PID01-20 support, enter as below:

>01 00‹enter key›
41 00 BE 1F A8 12


The RPM pid is 0C, so to ask RPM just enter 01 0C:

>01 0C‹enter key›
41 0C 1F D8


41 is 40+command, 0C is the PID, then the result 1F D8 means (0x1f*256+0xd8)/4=2038 RPM
A list of PIDs and how to interpret their results is on wikipedia here: OBD-II PIDs

Some Screenshots

Here is various screenshots of almost everything you can see on the screen.

Metric Imperial
Instant cons:
At idle so it displays per hour, when a certain speed
is reached, display change to l/100
OBDuino
OBDuino
Average cons:
The car has not moved yet so it displays the maximum,
if it's lesser than 10.0 it will display 2 decimals e.g. 6.57
OBDuino
If it's greater than 99.9 it will remove the decimal e.g. 123
OBDuino
Screen 1:
OBDuino
OBDuino
Screen 2:
When you change screen, the two lefts PIDs and description
are showned for a second, followed by the 2 rigths ones.
I didn't had time to shot the second one!
OBDuino
OBDuino
OBDuino
Screen 3:
OBDuino
OBDuino

Display configuration
Select yes or no to enter the config
OBDuino
OBDuino
OBDuino OBDuino

Settings configuration
OBDuino OBDuino
OBDuino OBDuino
OBDuino

Screen configuration
OBDuino From screen 1 corner 1
OBDuino
Display toggles every second between the description and
the value
OBDuino
To screen 3 corner 4
OBDuino
OBDuino

Others Screenshots

These are some screens I used at a time.

At startup

When the ignition key is turned to the ON position, device starts up and displays:



While driving

Here is some screenshots of the device while driving:



Before shutdown

Here is the three different screen before shutdown, compare with the three firsts above.