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:
Calculated/absolute Engine load
Engine coolant temperature
MAF flow 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.
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?
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 ?
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.
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?
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.
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!
Hello and congratulations again!