I've noodled around with Arduino a bit, worked some tutorials. I have an engineering & programming background, but electronics isn't my first language. So apologies if this is a dumb question.

Here's the problem. I've swapped a 2007 GM engine into an older Toyota Land Cruiser. I need to make it compliant with the emissions equipment that was originally on the 2007 vehicle. Most of that is pretty straight forward - catalytic converters, O2 sensors, charcoal canister, purge & vent solenoid valves, a pressure sensor. The one bit I haven't figured out yet is fuel level. The evaporative emissions system requires a fuel level input to the PCM (Powertrain Control Module) so it can figure out when & how to run the fuel system pressure test - the one that turns on your check engine light if your gas cap isn't on tight enough.

One solution would be to put in a GM fuel level sender ... but that involves draining the tank, dropping it, maybe cutting new holes, more wiring, etc. I'm hoping I can fix this in software :)

The GM fuel level sending unit reads 0 ohms empty and 90 ohms full. The existing Toyota sending unit should be 110 ohm empty and 3 ohm full.

So ... is it a feasible thing to build an Arduino based project that reads the resistance from the Toyota sender (without interfering with the Toyota gauge) and translates that to the range expected by the GM PCM?

I'm thinking something like this is the core of it: https://www.arduino.cc/en/Tutorial/LibraryExamples/DigitalPotControl But I don't know what I don't know.

Thanks folks - additional information based on responses:

The Toyota sender is definitely a 12V two terminal unit. Car electrical systems are nominally 12V, but typically are about 13.3V in operation.

The GM sensor is two terminal also. According to the wiring diagram, one terminal goes to a low reference pin on the PCM and the other goes to a pin on the PCM labeled fuel level signal.

But it doesn't tell you the voltage they're applying on that pin - could be just 5V, other stuff coming out of the PCM is. I couldn't find a test procedure either. I'll pin that connector and see what I can measure next time I'm out there.

The fuel level signal is used for two things in the evaporative emissions (evap) system.

  1. The evap vacuum test can only run when the tank is between approximately 1/3 to 2/3 full.
  2. The vacuum test is calibrated against how full the tank is - lower fuel level means more air space in the tank means the pressure will change more slowly then compared to a fuller tank.
  • 1
    we don't have all the details of how each sensor/device "talks" to the other, but in general, yes, that's likely completely feasible to do with Arduino microcontrollers, and maybe a small amount of support hardware like a DAC (or RC filter) if needed. Break the large problem down to small steps and ask for help if you get stuck on one of them.
    – dandavis
    Feb 22 at 21:20

The Toyota sensor may be using 12V instead of 5V, which would mean you'd need to use a voltage divider to get it down to the range that the Arduino analog inputs can read.

You will need to find a digital potentiometer that can handle the voltage range that the GM controller wants to see. This may be 0-12V, which would be a problem since the AD5206 is only good for 5V.

However, as dandavis implies with his RC filter comment, you may be able to simulate the full 0-12V range with PWM, where the Arduino pin drives a transistor to chop up the 12V, and an RC filter smooths the result for the GM control unit. That's probably your best approach.

Alternatively, if the GM controller is only looking for a go/no-go level, you can use the transistor to switch in a simple voltage divider to get the right voltage from 12V.

The sensors are (presumably) just variable resistors (2-terminal) not full 3-terminal potentioneters. They will most likely be using a series resistor to make a voltage divider, and the control unit (or gage in the Toyota) will reading the resulting voltage. You will want to either find out the value of the series resistor or measure the voltage that the gage sees. It might already be in the 0-5V range. The GM control unit may have the series resistor built in (or be using a current source), in which case you should measure the voltage its sensor input sees when you give it the max and min resistance. This will be good to know when you are trying to drive it with your own circuit,

  • Thanks - I've added some more info to the original post based on these responses. There's a decent chance that the GM PCM is only pushing 5V to the sensor, but I haven't been able to find it in the docs so far. Will try to measure it. Feb 23 at 20:02

This site is temporarily in read only mode and not accepting new answers.

Not the answer you're looking for? Browse other questions tagged .