I did not yet mount the sensor. I believe the best approach is to drill and tap a new hole on an open area
facet that is on the passenger side of the manifold. However I don't want to drill in this area unless I remove
the thermostat housing and can see that it is a safe place to drill into.
I have a new thermostat I want to install, but I did not have the rubber gasket. So this gets delayed until I can get
Meanwhile I had re-kindled an old idea that I had. This idea does away with the troublesome temperature gauge sensor entirely.
In this less intrusive approach, a special circuit is created that instead reads the ECT sensor (the one that the ECCIV uses)
and then drives the dash gauge.
What would be in this black box? One way would be to use something like an Arduino Pro-Mini
Run the ECT output to one of the ProMini's a/d inputs. The unit then uses pulse width modulation to drive a big MOSFET
that connects the temp gauge to ground. There are a few advantages to this approach. One is that you can now
calibrate the gauge. You could make certain letters in "NORMAL" displayed on the gauge correspond to specific temperatures.
Another aspect is that if the ECT sensor should ever fail you will instantly be made aware of the situation.
It sounds complicated but it really isn't too bad and I sure like the idea of soldering and writing a few lines of code
compared to drilling and tapping the manifold.
I did a little experiment tonight that has convinced me of the "alternative" solution.
I happen to have one of these...
On useful function this unit has is a PWM output. I wired this to an IRL540 MOSFET and hooked it up to the
temp sender wire on the Scorpio. I then turned on the ign key on to the run position and then ran the through the PWM percentage ranges to see how I could influence the temp gauge.
The real good news is the FET does not even get warm, even deflecting the meter to the full hot position.
That means no heat sink will be required.
Once I saw that things were working, I then mapped the pwm % time to various locations on the temperature gauge.
Feature on Gauge PWM on time
Red Line at top 60%
White border top 50%
Center of "N" 38%
Center of "O" 33%
Center of "R" 27%
Center of "M" 22%
White border bot. 12%
White line bottom 8%
I intend to map each of these locations with a specific temperature as measured from the ECT.
It is easy to find an ECT voltage vs. temperature chart on the web. I will probably make "O"
indicate 195F and make "R" 180F and extrapolate outward from there. This way if you are running
a 180F or 195F thermostat the gauge will read close to center for both cases.
The code for the little arduino board will be quite simple. It will loop endlessly reading the ECT voltage
and will take that reading and generate (via lookup table) the appropriate PWM output to drive the FET.
As described here: https://www.arduino.cc/en/Reference/AnalogWrite
Every 10 seconds or so I will have the code flash the built in LED on the arduino board to indicate the temperature.
This way you can look at the unit from the engine bay an know what the temp is while you are
working on the car! Pretty slick huh?
There will just be 4 wires to the unit. One to the existing sensor wire (no longer plugged on the old temp gauge sensor),
one wire to one side of the ECT, one wire to an IGN hot +12V, and one wire to ground. The whole thing will fit into a relay case that I can mount on the firewall or fender well.
This is not a costly solution BTW. These little arduino boards on ebay go for around $2-$3
IRL540 MOSFETS are also cheap on ebay.
Everything worked out perfectly! I will post all the relevant project files as a zip file for the benefit of any other ambitious Scorpio owners. Including schematics, code, wiring connections, etc.
Bye bye lousy temperature sender!
Right now I have this little controller mounted on the sheet metal plate that holds the harness against the fire wall.
It gets a little warm at that location, so I think I will relocate it near the battery where things are a bit cooler.
After I had determined everything was working, I decided to pot everything in the relay case with epoxy. I made it so that serial connection for the arduino board protrudes outside the relay case so I can still re-program the unit it if i need to make adjustments.
What I have noticed is that the temp gauge will climb a little higher (maybe to about 200F) until the thermostat opens then it will drop to 195F. This is very repeatable.
It's awesome. I can now "trust" the Scorpio temp gauge! The ability to watch the unit flash the temperature on the LED in engine bay is also very useful.
After I got this working this morning I proceeded to make the modification where the a/c clutch turns on the electric cooling fan, so it was nice to see what the temp impact was.
Worth all the trouble!
Ford Temperature gauge sensor replacement.
This code developed on a Arduino Pro-Micro 16mhz 5V variant
(must be 5V version)
The intended purpose is to eliminate the need for the large
NTC thermistor sensor used with the stock Ford temperature gauges.
These sensors have a high failure rate. For some reason
the one in the Merkur Scorpio is particularly unreliable.
Instead this controller reads the ECT sensor voltage (the temp
sensor that the EECIV uses) and then PWM drives a connected
IRL540 MOSFET which in turn drives the temperature gauge.
This is better for several reasons:
The ECT is a more precise thermistor.
The ECT is reliable.
Driving the gauge with a MOSFET should be more reliable.
We can now calibrate the gauge.
This code has been calibrated for a Ford Scorpio gauge but I suspect
it would work fine for other vehicles like the Ranger or Aerostar.
With this unit in place the temperature gauge range swings from
150F-230F. The center of the scale being about 190F
Presumably this unit would be mounted in the engine bay area.
It flashes a temperature code every 10 seconds on the Arduino LED.
This can be convenient while working on the engine.
12v power comes in the RAW input. It is advised to place an
inductive choke on the incoming power (100uH). In addition, a 15v
protection Zener diode should be placed between ground
and the raw input voltage. See Intel app note AP-125
"Designing Microcontroller Systems for Electrically
Naturally the 12V souce should be switched with the ignition run
The line from the ECT back to this unit should not route near any
A ground shielded wire might be advantageous. A .1uf capacitor to
ground on the wire will help reduce any noise it might pick up.
I have found that an old auto relay case makes a suitable housing.
We are hardly scratching the surface here. There is plenty more that could
be done with this code and we are barely utilizing this arduino.
How about a temperature logging feature?
Store in eeprom or output on serial to a connected laptop?
Tickle a Piezo buzzer if the temp gets too high?
Connect a another FET to turn on electric fan at a certain temp?
Downloadable temperature profile?
Up down buttons to adjust temperature profile/calibration?
Use at your own risk. This code and all mentioned here
is not suitable for anything in particular. If you overheat your engine
or damage you car's ECU then it was all by your own hand.
int LEDPin = 13; // LED connected to digital pin 9
int FETDrivePin = 5; // MOSFET connected to 5
int ECTInputPin = 3; // ECT connected to analog pin 3
unsigned int val = 0; // variable to store the read value
unsigned int aval;
unsigned int tic;
unsigned int sum;
unsigned int a2dcircbuf; //circular buffer to average samples.
//lookup table for pwm output value, indexed from a2d read value of ECT sensor.
//only covers the range 150-230F
/* ECT temp/voltages were taken from published charts on the web
and converted to a 0-255 a/d value that we expect to read.
Testing was performed to find the PWM % needed to make the guage
point to specific areas on the dial. Values in between key
points are interpolated
The end result is to be able to read the ECT voltage and do a table lookup
to get the PWM value needed to drive the gauge to desired position.
Temp ECT Read ECT V PWM% AnalogWrite8bit Feature on Scorpio Gauge
230 18 .35 60% 153 Red Line
220 21 .40 50% 128 White Bracket Top
200 28 .55 38% 97 "N"
195 30 .59 33% 85 "O"
180 36 .71 27% 69 "R"
175 42 .75 22% 56 "M"
160 50 .98 12% 34 White Bracket bottom
150 58 1.13 8% 21 White thick line bottom
//Every so often we blink the arduino' built in LED to provide a visual
//indication of temperature that is easily viewed from the engine compartment.
//Pretty handy if you are working on the cooling system.
if ((aval >= 18) && (aval <= 21))
blink=8; // 8 blinks temp 220-230
if ((aval > 21) && (aval <= 28))
blink=7; // 7 blinks temp 200-220
if ((aval > 28) && (aval <= 30))
blink=6; // 6 blinks temp 195-200
if ((aval > 30) && (aval <= 36))
blink=5; // 5 blinks temp 180-195
if ((aval > 36) && (aval <= 42))
blink=4; // 4 blinks temp 175-180
if ((aval > 42) && (aval <= 50))
blink=3; // 3 blinks temp 160-175
if ((aval > 50) && (aval <= 57))
blink=2; // 2 blinks temp 150-160
if (aval > 57)
blink=1; // 1 blink temp < 150
digitalWrite(LEDPin, HIGH); // turn the LED on (HIGH is the voltage level)
delay(200); // wait for a bit
digitalWrite(LEDPin, LOW); // turn the LED off by making the voltage LOW
delay(200); // wait for a bit
pinMode(LEDPin, OUTPUT); // sets the pin as output
//Serial.begin(9600); // open the serial port at 9600 bps:
//I've intentional made it so that upon startup the pointer moves
//to the thick white bar at the bottom of the gauge (150F). This small
//movement of the needle provides a visual cue that things are operational.
//fill the history buffer with the coldest setting on boot.
unsigned int pwmval;
delay(1000); // wait for a second
val = analogRead(ECTInputPin); //read the input pin analogRead values go from 0 to 1023
val = val >> 2; //make it an 8 bit value
//limit the range, as pwm table only stores pwm values for the limited range (150-230F) of interest
if (val < 18)
val = 18;
if (val > 58)
val = 58;
a2dcircbuf[(tic % 5)]=val; //last 5 samples stored in circular buffer
//average a 5 sample history. Just in case there is noise
sum=a2dcircbuf+a2dcircbuf+a2dcircbuf+a2dcircbuf+a2dcircbuf; //average them
analogWrite(FETDrivePin, pwmval); // analogWrite values from 0 to 255
if ((tic % 10)==0) //every 10 seconds blink the temperature on the led
To test it on the bench - connect a potentiometer between 0-5v with the center wiper going to the ECT input.
Connect one side of a car light bulb to 12 volts and other side to the gauge connection on the FET.
Hook up 12v power and ground to the bench power supply.
You should find that there is a narrow range of the potentiometer that will alter the brightness of the bulb.
You should be able to see the different blink counts for the temperature ranges as you move the pot.
The inductor is a noise suppression coil. Probably could be safely omitted.
The zener should be used. It protects things from voltage surges from the alternator.
Now that I look at the picture I realize I am missing a diode.
You should also have a big diode for the +12v power coming in. Just in case you connect power backwards.
For the gauge wire connection I soldered the wire to a small brass bolt (that I cut the head off of) that would fit into the "socket cap" where the original sensor is. I put shrink tube over this. You can have this shorts here.
You can access the green/red ECT wire by tapping into the harness on the passenger side of the manifold.
Just cut some insulation back to expose some copper and tack the sense wire on.
I got my 12v accessory wire from the ignition switch as I had recently installed a remote start kit previously.
Make sure you have the battery disconnected while you are hooking everything up.
Solder everything, no twisting wires together. Double check your connections.
The whole circuit can fit into a gutted relay housing. After I confirmed operation I filled the housing with epoxy.
I then mounted the unit on sheet metal by the battery. two holes were drilled in the housing so the arduino LED's could be seen.
Usual disclaimers apply. I am not responsible for whatever you destroy...
I had the car PA inspected over the weekend. Drove it around quite a bit and the gauge is working fine.
As I had indicated previously (and something of a little concern) that I have noticed is the temp gauge swings up to around 200-205F before the thermostat opens. Then it drops to the 195 point. This is no issue with this module but I think it's time to replace my thermostat.
I'm going to put in a 180F unit and drill a few 1/8" bypass holes in it.
- ECT_TEMP_SPLICE.jpg (104.72 KiB) Viewed 1844 times
In addition, I am not sure I mentioned that the board is "potted" into the relay case. The board was placed into the gutted relay case, and all openings were sealed with tape. These openings were the slot to allow the arduino serial pins to exit and two holes the were centered over the LEDs on the board. The board was inserted to the case along with all the extra bits and the bottom bladed connector of the original relay. Flowable epoxy was then poured into the case, filling it entirely.
This is how you make electronics survive the under hood environment.
I made a thorough check of everything cookant-related (including the fan clutch which was relatively new and the temp sensor); installed a new Motorcraft T-stat and on operation the temp gauge returned to typical indications from cold to fully warmed up.
Scorpio temp gauges obviously can fail but in my experience wrenching on Merks and other engines the T-stat is the prime suspect when the gauge begins to read atypically.
Lijewski: "Sum Ergo Drive-O. Mucho!
Usually when they fail the gauge shows and incorrect low reading and then does not move at all.
But thermostats fail too.
After discovering that the stock sensor completely different in size from the larger replacement everybody seems to carry, I thought that skinny sensor looked familiar. Looks like one of the 1988-92 Ford 1.6L ones, except for the blade vs. post connector. Then I remembered it is probably the same size as the AutoMeter temp sensor I put in the 5.0L XR. That one works very well.
I realize the calibration would be different, but has anyone tried using one of the Hi-Perf sensors from VDO, Autometer? Like this:
https://www.vdo-gauges.com/sensors/temp ... 8nptf.html