what is the best way to get fuel consumption (MPG) using OBD2 parameters.
Below formula is simple but not most accurate,anyother formula to get somemore 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.
Thank you.
Some links which might be useful for those who are looking into same topic.
Very useful info from other forum
MAP- and MAF-Based Air/Fuel Flow Calculator
AVR-Based Fuel Consumption Gauge by by Bruce D. Lightner
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
- including the readings from all six O2 sensors to verify optimal combustion took place,
- factoring in engine temperature (cooler engines allow better combustion because it allows denser oxygen into the intake manifold),
- whether or not timing advance is set properly or not (which you'll have to check against a datasheet).
- 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:
- Natural gas: 17.2
- Gasoline: 14.7
- Propane: 15.5
- Ethanol: 9
- Methanol: 6.4
- Hydrogen: 34
- 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.