My home-brew Arduino OBD-II connection kit

After many researches and attempts to connect an Arduino with my car through the OBD-II connector and having some successful works of car dashboard gadget, I’ve finally made a kit which enables those who want to playing with Arduino and their cars to jump start quicky.

I am maintaining an arduino library for the adapteras an open-source project. It provides Arduino developers an easy-to-use APIs to connect to and retrieve realtime data from a vehicle, which include:

  • Vehicle speed
  • Engine RPM
  • Throttle position
  • Calculated/absolute Engine load
  • Engine coolant temperature
  • Intake temperature
  • Intake pressure
  • MAF flow pressure
  • Fuel pressure
  • Barometric pressure
  • Ignition timing advance
  • Engine running time
  • Vehicle running distance

The adapter can be easily used with Arduino or other MCU boards, providing 5V power supply (up to 500mhA current, with reverse protection), so a wire getting power from somewhere else is not needed. This helps to make the gadget you made looks tidy. The only interface to the car of the adapter is the OBD-II connector.

By having access to these data, the Arduino can compute, store or show the realtime vehicle status in any unique way.
Here is a fancy dashboard gadget I made for my car (with video).

If you are interested in my Arduino OBD-II connection kit, please see here for more details.

Familiar with this site - OBD-Codes OBD-II Trouble Codes - DTC Codes Car Repair ?

still on my wish list :slight_smile:

Does the kit come with an Arduino board? I have an Arduino Uno and it doesn't look like the harness will work with it. I guess I would just have to take the 4 wires out of the harness and wire them to the appropriate pins? What board is best to use with your adapter?

Looks like it's plugged into an Iteaduino. A Uno would be fine. Yes, you'd need to connect to VCC, GND, TX, and RX on your Uno, which aren't located in a 4-dip row as you see in the Iteaduino.

i am going to buy one for my wife's car. it will hopefuly prove how bad she drives. :astonished:

Hi Stanley!
I would really like to buy your adapter but had a few questions about it.

  1. It supports all protocols? And has the ELM327 autosearch mode (for non-CAN compliant cars)?
  2. I want to add to your library by adding more AT commands - So does the adapter support all AT commands?
  3. Can you let the power line be at 12v instead of 5v? I'd like the 12v to power other components on my arduino shields and let arduino's power converter deal with the 12v.


I'm writing a similar application. I want to display the gear number in which the car is in but i'm having problem to get the pid or any relevant pids.
Can you provide me any formulas and any material or links which will help me. how where are you getting the gear number ?


Stanly's website is down ...
I have bought the adapter, and I just got it ... and I can't find any documentation on how to connect it!!

Anyone used his adapter?

I did not see any problems with his web site.

The library itself is hosted on Sourceforge: OBD-II for Arduino download |

Where did you find the enclosure?

I think this is awesome.

I've always used an OBDII reader on my car but always hassle with having to drag my laptop around or using up my phone, which also means I have to plan ahead and didn't have a seamless way with out sitting in the car getting everything started before driving. Should record everything even on quick trips around town without me doing anything or watching a screen.

I hope to give this a shot!

Hi, I'm looking to do the opposite, I have an aftermarket ECU which I can get data out of from via a serial cable but I'd like to make this available to the ODB port for the ELM to read so a standard ODB code reader/ODB software will work, is this likely to be possible with the experience you've gained from doing your project?


This looks like a great project and could be very useful.

As matter of interest, where do you find the different codes / commands for the car, if you for instance want to "check all the systems", or adjust the CO2, or something like that?

First of all, download and read the ELM327 docs at the Elm Electronics site.

They made the Industry Standard decoder firmware for a PIC18 microcontroller that they called ELM327. It can talk to a car's ECU computer over most of the protocols in use, and convert them into a common ASCII form. OBD is the standard connector, with different car makes and models using different protocols over different pins on the connector. Software vendors then created allegedly specialized monitoring packages using the ELM327 for this or that car, at hefty prices. Companies in Asia then copied the ELM327 firmware and started selling clones using the PIC18 or other microcontrollers, presented through various interfaces: USB, Bluetooth, Serial, WiFi. These are available on e-bay at low prices. Some are better than others. I just got a working $15 unit with a USB plug that can be used with any computer that can virtualize a device USB connection as a COM port. There are many teaser PC programs available that allow you to read a handful of parameters (so you buy their full package), but a terminal program works too.

What Stanley is offering is an ELM327-compatible OBD-II interface, with a cable bearing TTL compatible serial data, so it can be directly connected to e.g. Arduino I/O pins. It's then a simple serial connection that any Arduino buff can use to query, store and display the desired car parameters, with Stanley providing some useful example code.

The place to start is understanding the base AT commands to control the ELM327, and then the deeper OBD "PID"s that can be used to request this or that specific parameter from the engine. OBD is mostly a "read-only" monitoring system, but not entirely. One of the clearer PID lists is on Wikipedia:

You can use a terminal program to get your bearings. For Instance typing the ATI command (followed by Carriage Return) will probably evoke a reply like "ELM327 v1.5", though ELM never made a version 1.5. Once the interface is mated with the OBD connector on the car, you can type ATRV and read the battery voltage. Yes, there is a simple command to clear the annoying Engine Warning Light and wipe ALL the associated logs and diagnostic data, in one fell swoop, so I won't tell you what that is.

@DaveyRavey's request is more difficult. The ELM327s convert some quite knarly protocols into clear ASCII. To mimic an ECU talking from the car side of the OBD connector entails fully understanding and then emulating one of these protocols, complete with its specific modulations scheme, handshakes and error handling. Many of these protocols use the old annoying (and ineffective) "security through NDA and obfuscation" technique to waste your time.

Hi, i'm looking at getting into a project like this.
I own a japanese import car which is not obd2 compliant.
It uses some jobd protocol.

I'm just curious will this connection help me to read information coming from the ecu.
Also how with a obtain information coming from the ecu, would i just use the tx and rx pins?


congratulations for a job well done!
Also I have created a dashboard OBDII but I used another microcontroller, the NXP LPC1768.
I'd like to have your opinion, HERE you can find the video demo! :slight_smile:
Hello and congratulations again!

I have ordered one. How long it takes for shipping to U.S.? Thanks.

@Dario Gogliandolo
looks pretty good!

Really nice product, I think....

I've purchased two of these things thinking the first might be defective as I couldn't get any sort of clear readings out of it even when I connected the UART lines to an oscilloscope.

I'm an electronics engineer and I don't see any issues on my end, I can't even get the simple LED program to work for engine RPM over 2000.

I've tried it on a 1999 and a 2000 Firebird with no results. But cars OBD ports work fine with all other scanners.

Really is a shame, would love to figure it out finally

Any news on this?

1 Like