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?
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
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....
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.
quote:
Originally posted by tegwin
What car are you talking about?
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
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
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
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.
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]