Air Fuel Ratio or Lambda
Posted: Tue Sep 18, 2018 5:19 am
Dear All,
I use a freematcs OBD-II UART Adaptor with a Arduino mega and with the telematics shield and it's works fine for indicate the temperature of the coolant, the speed, the rpm...
My car is a BMW 523i, N53B30 engine and this engine use lean phase (with Air Fuel Ratio (or lambda) > 1 to reduce consumption) alternate with phase with lambda = 1.
But I didn't succeed to display the value of the lambda. To do it, I add in the file OBD.h, the lines:
#define PID_OXYGEN_SENSOR_1 0x38
I try several addresses like 0x34, 0x38, 0x24…
And I add in the file OBD.cpp:
case PID_OXYGEN_SENSOR_1:
result = (long int)getLargeValue(data) * 2 / 65536;
break;
In the program.ino, I added:
int AFR; //Unit: Ratio
if (obd.readPID(PID_OXYGEN_SENSOR_1, AFR)){
lcd.print("LAMBDA : ");
lcd.printInt(AFR, 6);
}
On Wikipedia, the lambda is determined with the relation 2/65536(256A+B). I think that the instruction getLargeValue calculate 256A+B.
So the calculation should be correct but on the screen It's display 0 or 1 !!
Do you know how to fix the problem?
One solution could be to use the mode 6. I have a software OBDfacile and I could see the value of lambda on the PC. But I don’t know how to add a PID on the mode 6.
Do you know how to add a PID on the mode 6?
Thanks and Best regards,
Patrick
I use a freematcs OBD-II UART Adaptor with a Arduino mega and with the telematics shield and it's works fine for indicate the temperature of the coolant, the speed, the rpm...
My car is a BMW 523i, N53B30 engine and this engine use lean phase (with Air Fuel Ratio (or lambda) > 1 to reduce consumption) alternate with phase with lambda = 1.
But I didn't succeed to display the value of the lambda. To do it, I add in the file OBD.h, the lines:
#define PID_OXYGEN_SENSOR_1 0x38
I try several addresses like 0x34, 0x38, 0x24…
And I add in the file OBD.cpp:
case PID_OXYGEN_SENSOR_1:
result = (long int)getLargeValue(data) * 2 / 65536;
break;
In the program.ino, I added:
int AFR; //Unit: Ratio
if (obd.readPID(PID_OXYGEN_SENSOR_1, AFR)){
lcd.print("LAMBDA : ");
lcd.printInt(AFR, 6);
}
On Wikipedia, the lambda is determined with the relation 2/65536(256A+B). I think that the instruction getLargeValue calculate 256A+B.
So the calculation should be correct but on the screen It's display 0 or 1 !!
Do you know how to fix the problem?
One solution could be to use the mode 6. I have a software OBDfacile and I could see the value of lambda on the PC. But I don’t know how to add a PID on the mode 6.
Do you know how to add a PID on the mode 6?
Thanks and Best regards,
Patrick