OBDuino
Contact : info@obduino.ca


Hardware

Details

The name OBDuino comes from OBD, which means On Board Diagnostics and from the development board which was an Arduino (a clone, in fact). Some technical info: it was based on an Atmel AVR ATMEGA168 chip that contains 16K of flash, 1K of RAM and 512bytes of EEPROM (now I am using a 328P), an LCD display, 3 buttons and others electronics components. Firmware has evolved so much that nothing from the Arduino/Wiring API is left.
The OBDuino connects to the car on its OBD-II plug which is, in general, under the dash. A lot of signals are on this plug as well as battery voltage and ground.
The interface to the car is made with a pair of Microchip 2515/2551 for CAN only protocol.

Third version of PCB

I re-arranged the connector for the buttons, removed a useless resistor, added a placeholder for a resistor for LCD backlight if needed (else I strap it), and added a trimmer potentiometer for LCD contrast because I had problem driving it via PWM with some Chinese LCD.

Populated:
OBDuino

OBDuino

Second version of PCB

OBDuino
I reduced the size especially for the height which is now less than 2" so it can fit in a 1 DIN size empty tray slot for instance.
The 3 buttons are on the side and can be separated from the main PCB, they are connected with wires so they can be put anywhere on the dash or even the steering wheel, being creative.
Schematic and PCB designed with Cadsoft EAGLE.
Full schematic:


Populated:
OBDuino

OBDuino

Cable

A CAN only cable, small and thin, use a 4P4C telephone handset plug:

4P4COBDII
1 (black)5 (Signal ground)
2 (red)14 (CAN Low)
3 (green)6 (CAN High)
4 (yellow)16 (Battery)

source: http://www.controllerareanetwork.com/CANcables.htm.

Example cable I made:
OBDuino

First version of PCB

OBDuino

Populated:
OBDuino

OBDuino

OBDuino

DIY Interface

hacker emblem
For development, the interface connects to the Arduino on a few pins as well as the LCD and the buttons, and to the OBD-II plug with a serial cable. It looks like a rats' nest as is but this is what I used to develop!

Whole setup with Arduino board, interface, LCD, buttons:
OBDuino

CAN Interface that also takes the +12V from the OBD2 plug, it also includes a voltage divider and a on/off switch:
CAN Interface

You want to test it with an Arduino? You need to make a small daughterboard with the CAN chips and a few components, an LCD display, 3 buttons.

Connect like this:

Arduino
0 (RXD/PD0)  - nothing
1 (TXD/PD1)  - nothing
2 (INT0/PD2) - LCD VCC (pin 2)
3 (INT1/PD3) - MCP2515/INT (pin 12)
4 (T0/PD4)   - LCD Register Select (pin 4)
5 (T1/PD5)   - LCD Brightness (pin 15) 
6 (AIN0/PD6) - LCD Contrast (pin 3) 
7 (AIN1/PD7) - Button Right
8 (ICP/PB0)  - Button Middle         
9 (OC1/PB1)  - Button Left          
10 (SS/PB2)   - MCP2515/CS (pin 16)
11 (MOSI/PB3) - MCP2515/SI (pin 14)
12 (MISO/PB4) - MCP2515/SO (pin 15)
13 (SCK/PB5)  - MCP2515/SCK (pin 13)

14 (ADC0/PC0) - voltage divider input
15 (ADC1/PC1) - LCD Enable Strobe (pin 6)    
16 (ADC2/PC2) - LCD Data4 (pin 11)        
17 (ADC3/PC3) - LCD Data5 (pin 12)
18 (ADC4/PC4) - LCD Data6 (pin 13)
19 (ADC5/PC5) - LCD Data7 (pin 14)
You can use something like the CANSPI Extra Development Board from mikroElektronika to help you.
Here is a limited firmware to test, it is functionnal but removes some features.
OBDuino Lite
For a 16MHz ATMEGA168, set your fuses to E:0x01 H:0xD4 L:0xDF. For the 328 use E:0x04 H:0xD7 L:0xFF.


CAN library courtesy of Fabian Greif, see http://www.kreatives-chaos.com/artikel/universelle-can-bibliothek for more details
/*
* Copyright (c) 2007 Fabian Greif, Roboterclub Aachen e.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: mcp2515.c 6927 2008-12-03 22:42:59Z fabian $
*/