Board logo

Getting engine temp from ECU via OBD possible ???
balidey - 8/2/11 at 08:49 PM

My car has no water temp gauge, just a 'oops too late' tell tale light.
I have a switch blank that could happily house a 2 digit LED display.
I have an OBD2 port.
What I don't have is the know how to interrogate the ECU and get it to display just the engine temp.

I know there are these kits you can buy *shudder* and display all sorts of info, but I was hoping there was a simple, low cost option for me to get this info out.

I really don't want to add a temp sender when there is already one in the car feeding the temp to the ECU.

And I don't want to spend silly money on the readers that give me whistles and bells.

Anyone got any ideas? Or is it a dead end?


T66 - 8/2/11 at 09:19 PM

The temp senders that slip under the hose clip in your radiator hose and feed a gauge , are not that expensive.



Saabs can be setup to display the obd data, mine was relatively easy to do as the data is displayed on the cars computer.



Im not sure what other cars are diy accessible like the Saab, there has also been car-pc developed to display engine data


http://www.youtube.com/watch?v=tSM51B5mguE


tegwin - 8/2/11 at 09:40 PM

What car are you talking about?

A lot of VAG cars allow you to access raw engine data/temps/voltages etc by pressing a combination of buttons on the climatronic system....


balidey - 8/2/11 at 09:41 PM

Well I don't want to add another sensor.
And for $60 I can get one of these...

http://www.ultra-gauge.com/ultragauge/index.htm

But its too big for me, and its a merkin product so shows temp as some sort of F measurement not a C.

Where as all I want is engine temp.
I bet some clever person out there has done this already and I just need an OBD2 connector, and few resistors an IC chip and an LED display.... I hope.


balidey - 8/2/11 at 09:46 PM

quote:
Originally posted by tegwin
What car are you talking about?

its a Fiat Seicento sporting. The FIRE engine is well known for overheating. My old cinquecento had a temp dial but fiat in their infinite wisdom decided a light was enough for the seicento. But I think adding a temp gauge is a good idea. And there is a blank switch on the dash that a 2 digit LED display would sit in nicely.


britishtrident - 8/2/11 at 11:10 PM

Yeah adding conventional temperature gauges to modern tin tops tends to be awkward, and even on cars with temperature gauges you can't believe them because the ECU is programmed to show the needle on the N if the ECU sees a sensor value it dosen't like.

OBD gauges are accurate but not cheap I have the Autel Maxi Trip which can be found for under £65 inc p&p

However if you want a very cheap option http://www.locostbuilders.co.uk/forum/5/viewthread.php?tid=121137


Madinventions - 8/2/11 at 11:38 PM

Long story short - interrogating OBD for temperature etc is perfectly possible - I did it on my Mojo. I built a custom circuit using a PIC 18F8722 micro, a 128x64 mono LCD with touchscreen, and a SD card slot. I wrote the code using the Swordfish compiler (free version available) and I can send you the code if you'd like? I got one of the cheap OBD readers from eBay, and I just send RS232 commands to it and wait for the responses.
Link (scroll down)

Here's some of the pertinent bits of the code:

Sending commands:

quote:

Select WhichPID
Case 0: USART.Write("01031",13) 'Fuel system status
Case 1: USART.Write("01041",13) 'Engine load
Case 2: USART.Write("01051",13) 'Coolant temp
Case 3: USART.Write("01061",13) 'Short term fuel trim
Case 4: USART.Write("01071",13) 'Long term fuel trim
Case 5: USART.Write("010c1",13) 'Engine RPM
Case 6: USART.Write("010d1",13) 'Engine speed
Case 7: USART.Write("010e1",13) 'Timing advance
Case 8: USART.Write("010f1",13) 'Intake air temp
Case 9: USART.Write("01101",13) 'MAF airflow
Case 10: USART.Write("01111",13) 'Throttle position
End if


Decoding responses:
quote:

'OBD conversion and decoding routines
Private Function GetEngineLoad(A As Byte) As Float
'PID 04, returns %
GetEngineLoad=(A*100)/255
End Function

Private Function GetCoolantTemp(A As Byte) As Float
'PID 05, returns °C
GetCoolantTemp = A-40
End Function

Private Function GetFuelTrim(A As Byte) As Float
'Can be used for short and long term (PID 06 and 07)
'-100% = lean, +99.22% = rich
GetFuelTrim = 0.7812 * (A-128)
End Function

Private Function GetEngineRPM(A As Byte, B As Byte) As Float
'PID 0C, returns RPM
GetEngineRPM = ((A*256)+B)/4
End Function

Private Const WHEEL_FUDGE = 1.1 //To allow for 15" wheels...
Private Function GetSpeed(A As Byte) As Float
'PID 0D, returns MPH
GetSpeed = (A/1.6) * WHEEL_FUDGE
End Function

Private Function GetTimingAdvance(A As Byte) As Float
'PID 0E, returns ° relative to cylinder #1
GetTimingAdvance = A/2-64
End Function

Private Function GetAirIntakeTemp(A As Byte) As Float
'PID 0F, returns °C
GetAirIntakeTemp = A-40
End Function

Private Function GetMAF(A As Byte, B As Byte) As Float
'PID 10, returns grams/second
GetMAF = ((256*a)+B)/100 '0-655.35 grams/second
End Function

Private Function GetThrottlePosition(A As Byte) As Float
'PID 11, returns %
GetThrottlePosition = A*100/255
End Function



It also checks the ECU for any fault codes at start up, gives real-time MPG reading etc etc... These commands are the ones available from my Fiesta and Puma ECUs - your ECu may have more (or less) functions?

U2U me if you need any help.

Ed.


balidey - 8/2/11 at 11:52 PM

Wow Ed, that's err.... just about what I wanted plus more.
All I would want from the ECU is....

Case 2: USART.Write("01051",13) 'Coolant temp

and

Private Function GetCoolantTemp(A As Byte) As Float
'PID 05, returns °C
GetCoolantTemp = A-40
End Function

Which I would then use to drive one of these

http://www.binbin.net/photos/generic/14m/14mm-0.56-inch-double-digit-numeric-display-dd-display-type-c-.jpg

But from what you describe above I would need to use a proprietary OBD2 reader as well as link it to a circuit board with the bits you describe.
Sounds like its getting out of my depth.
I thought, perhaps naively that just getting one temp reading from the OBD2 socket would negate the need for all the hard work you have put in. I could just as easily add a temp sender and wire it to the LED display.


Madinventions - 9/2/11 at 12:24 AM

Like most of my designs, this one did tend to 'evolve' somewhat. I initially started out wanting to read the temperature, but then got carried away with all of the other data that was available!

For just temperature, the circuit and code would be much simpler than I've done, and probably quite a good way to get into microcontroller programming if that's something you want to do? The code would basically be a timer loop running in the background to update the display, and a foreground loop to send the command to the interface and read the response. Probably around 50-100 lines of code? I'd be more than happy to help if you get stuck.

Ed.

[Edited on 9/2/11 by Madinventions]