What is the best way to get fuel consumption (MPG) using OBD2 parameters?

StackOverflow https://stackoverflow.com/questions/17170646

  •  01-06-2022
  •  | 
  •  

سؤال

What is the best way to get fuel consumption (MPG) using OBD2 parameters.

Below formula is simple but not most accurate, any other formula to get an accurate estimation. The value for vehicle speed is delivered in Km/Hr, to convert to miles multiply by 0.621317. To calculate MPG divide the MPH by GPH. The final math expression for MPG will be:

For Gasoline Engine

MPG =VSS * 7.718/MAF

I would like to know for Diesel Engine to calculate instant consumption. Also I am trying to calculate it independent of car model from parameter available from obd2 standard.


Some links which might be useful for those who are looking into same topic.

هل كانت مفيدة؟

المحلول

That's the formula for instant consumption.

If you want to work out average consumption, work out the total volume of fuel used over time and divide by the total distance traveled over the same period.

UPDATE: That is what the ratio SHOULD be. unless you want to melt pistons or lose power. The air/fuel ratio isn't supposed to change unless you change the type of fuel, e.g. to 102 octane Petrol or Ethanol. That calculation is probably the most accurate you'll get unless you want to make it horribly complex by

  1. including the readings from all six O2 sensors to verify optimal combustion took place,
  2. factoring in engine temperature (cooler engines allow better combustion because it allows denser oxygen into the intake manifold),
  3. whether or not timing advance is set properly or not (which you'll have to check against a datasheet).
  4. and whatever else I left out.

Mind you, on the off-chance you're working on a Toyota: Toyota has an extra sensor that actually measures how much fuel is being injected into the engine. So you can just read that PID. But for other cars, the given formula is the standard.

UPDATE 2: some common Air/Fuel Ratios:

  1. Natural gas: 17.2
  2. Gasoline: 14.7
  3. Propane: 15.5
  4. Ethanol: 9
  5. Methanol: 6.4
  6. Hydrogen: 34
  7. Diesel: 14.6

You'll also need to consider that when the engine is under high loads, the Air/Fuel ratio changes downward.

نصائح أخرى

If you can read injector pulsewidth and divide by speed you can get the instant consumption. If you have the total fuel used and a distance, you can get the average. Getting injector pulsewidth is the direct way to get fuel consumption. It is the actual amount of fuel injected (well, it's the time the injector is open, but calculating how much is injected is easy at that point).

There is an OBDII command (01 5E) that will give you fuel consumption rate per hour. I have it working with C#/Xamarin client, not sure about Java?

If that is not available then you can use the VSS and MAF values to calculate l/100km: (3600 * MAF)/(9069.90 * VSS). MPG will need further adjustment, but that's simple enough.

Additionally to make the speed value universal, implement speed as a class and expose imperial and metric properties, like so (C#):

public Class VehicleSpeed 
{
public int MetricSpeed
{
    get
    {
        return metricSpeed;
    }
}

/// <summary>
/// <para>getImperialSpeed.</para>
/// </summary>
/// <returns> the speed in imperial units. </returns>
public float ImperialSpeed
{
    get
    {
        return ImperialUnit;
    }
}

/// <summary>
/// Convert from km/h to mph
/// </summary>
/// <returns> a float. </returns>
public float ImperialUnit
{
    get
    {
        return metricSpeed * 0.621371192F;
    }
}

If you want to calculate this value over time why not just store each immediate calculation and then get average?

Hope it helps.

More detailed derivation of specific fuel consumption (speed over fuel flow):

SFC equation

Then, assuming a fuel density of 0.75kg/l:

enter image description here

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top