ELM323 Car OBDII

Has anyone tried to interface an ELM323 (or any ELM chip) with the arduino to read information from a car's OBDII port. I have one and I have tried the two software serial libraries as well as the hardware serial connection but, I am getting nothing out of it.

When connected to the computer, I get the ELM startup output (ELM323 V2.0) over the serial connection but, when I setup the arduino to just listen for anything over the serial, I get nothing.

I plan on doing something with one of those chips this year, if I can ever get some other projects out of the way... I think the ELM323 speaks actual, computer-type RS232 serial -- based on +/- 12v. The Arduino does TTL serial, based on 0/+5v. You need something like a MAX232 to convert the ELM323 RS232 interface to 5v TTL serial. You can get free samples of the MAX232 chip from Maxim (maxim-ic.com).

Let us know how you make out!

That makes sense, I ordered a MAX232 sample and am just waiting on it to come in for me to get to work on this.

One thing I was doing was, sending commands to it ("ATI" to get it to describe the chip version) while I had the ELM's transmit connected to an LCD. The LCD was outputting my command ("ATI") because the ELM was set to echo back the command. Well, I took that as an indication that it was receiving my command ok. However, I now suspect that the levels were not high enough to register with the ELM but, it would spit out whatever levels it received (which was what the LCD wanted). However, it did this blindly and couldn't read the command and do anything with it.

I will let you know how it works out.

I looked into this some more and, the ELM uses +-5 volt levels (at least that is what I gathered from http://www.elmelectronics.com/DSheets/ELM323DS.pdf) if I am correct, the Arduino uses +-5V also so, these should work when directly connected.

Here is the schematic for my ELM interface http://www.scantool.net/download/elmiso11.pdf. I bought it pre-assembled.

Any other ideas? or, am I wrong?

I looked into this some more and, the ELM uses +-5 volt levels (at least that is what I gathered from http://www.elmelectronics.com/DSheets/ELM323DS.pdf) if I am correct, the Arduino uses +-5V also so, these should work when directly connected.

Here is the schematic for my ELM interface http://www.scantool.net/download/elmiso11.pdf. I bought it pre-assembled.

Any other ideas? or, am I wrong?

I think I'm completely wrong about the voltage, but right about the +/- bit. :slight_smile: TTL serial (what the Arduino uses) is based on 0v (low) and +5v (high). RS232 uses negative voltage for low and positive voltage for high, and it's the MAX232 (or similar) that does that conversion. The ELM323 seems to be very much designed for working with computers, not other integrated circuits. I could still be wrong about needing the MAX232 (it's been a couple of months since I last did any research on my project) but it sticks in my head as a required component.

According to the datasheet, the ELM323 communicates with a 5V signal, but the circuit you linked to converts the 5V signal to a 12V signal. What part of that circuit is your Arduino/LCD connected to?

Neat idea, now you have me wanting to pick up one of these :slight_smile:

I recently put together an AllPro ODBII interface from AllPro Adapter. It works great with the free ScanTool.net software and my laptop. I can get live data on RPMs, throttle position, air intake, and many other things. The AllPro supports all of the ODBII communication protocols (J1850 PWM, J1850 VPW, ISO9141/14230, ISO15765 CAN) and emulates the ELM323 chip with a PIC.

I'd like use an Arduino instead of my laptop and output some things to an LCD.

The Arduino and AllPro both have B USB ports. It seems like I could just plug the two together, but I can't find any USB-b to USB-b cables, which makes me think such a connection is not possible for some reason. How I can interface these two devices together? I'm happy to read and work things out, I'm just not sure where to start.

-Jon

According to the datasheet, the ELM323 communicates with a 5V signal, but the circuit you linked to converts the 5V signal to a 12V signal. What part of that circuit is your Arduino/LCD connected to?

Neat idea, now you have me wanting to pick up one of these :slight_smile:

The Arduino connects to the right side of the schematic. (not the K and L lines) This is what normally would connect to a computer's RS232 port.

The 12 volts comes from the OBDII port itself, that is how the thing is powered, it brings that down to 5V and uses that to power the ELM and, I am planning on powering the Arduino off of that too.

The Arduino connects to the right side of the schematic. (not the K and L lines) This is what normally would connect to a computer's RS232 port.

The 12 volts comes from the OBDII port itself, that is how the thing is powered, it brings that down to 5V and uses that to power the ELM and, I am planning on powering the Arduino off of that too.

Ah, I see now. I was assuming the DB9 was the RS232 and the DB25 was the OBDII but I had it backwards. Realizing that, I don't think that a MAX232 is what you need since the signal already appears to be at 5V to be compatible with the arduino. I look forward to seeing how your project progresses!

The Arduino connects to the right side of the schematic. (not the K and L lines) This is what normally would connect to a computer's RS232 port.

The 12 volts comes from the OBDII port itself, that is how the thing is powered, it brings that down to 5V and uses that to power the ELM and, I am planning on powering the Arduino off of that too.

Ah, I see now. I was assuming the DB9 was the RS232 and the DB25 was the OBDII but I had it backwards. Realizing that, I don't think that a MAX232 is what you need since the signal already appears to be at 5V to be compatible with the arduino. I look forward to seeing how your project progresses!

But, I think you are right about the +/- 5V and 5V/0V issue for what is High and Low. The MAX232 should convert those I think. Even if the voltages are the same, RS-232 and TTL levels are not the same. If I am wrong, someone please correct me, if I am right, someone please confirm this.

I got a MAX232 in the mail today and I picked up some parts at a local electronics store to get everything going. While I have not had enough time to go hook everything up the the car and read real data, the initial boot text that is sent over the serial connection displays on the LCD I have, just fine now.

The next step is to hook it up the the Arduino, start reading data and, calculate MPG from the data I have available.

Thanks for the help getting the RS-232 to TTL issue figured out.

I can communicate with the ELM323 just fine now (at least it looks fine)

I can send ELM specific commands (ATFD, ATI, ATZ) and I get the correct output from the ELM ("OK>")

However, when I issue a command like "010c" which should retrieve engine RPM, I get "BUS INIT: ...>" and no real response then upon issuing the second command, it does the same thing.

When I connect the ELM with a serial adapter and use hyperterminal, it works just fine. Is anyone aware of differences between sending something with Hyperterminal and just sending something with Serial.println("");

Thanks

Not sure if im 100% correct.

But when you send somthing over hyperterminal it sends the ASCII characters, not what you acutally typed.

If you try sending the ASCII values of the commands, that might work?

It has been a few months, but has anyone gotten any farther with this setup?

I am too tall for my new car and the steering wheel blocks the speedo.. I'd love to put my limited Arduino knowledge to work and make a little digital speedo I can mount over to the side.

-tim