Reading a wideband oxygen sensor with arduino?

I want to connect my arduino to a WB O2-sensor, but I dont know exactly how to do it.

Found this page, if you look closely, you will find three wiring diagrams (a b and c) .

Also here is a lot of info :

Is it possible to replace the analog circuit here with the arduino? How?


Is it possible to replace the analog circuit here with the arduino?

Hard to say as there are no schematics on those links just how to solder components onto a PCB which actually tells you nothing. My guess is that there is a lot of signal conditioning going on that would be difficult to replicate in software. Remember the arduino needs a 0 - 5V (or 0 - 1.1V) analogue signal to get a full range reading so the sensor needs amplifying at least as much as that.

There is schematics there :

If any of you could have a look at this, and explain whats going on in this circuit, it would be great.


As I thought not much you can do in software to reduce the component count.

The first page is a heater control circuit, this is done by feeding the heater with a variable voltage and taking the feedback from the temperature sensor back to the voltage regulator. You could do this in a software loop but you would need nearly as many components.

Second two pages are a reference voltage generator U4D, A split voltage rail reference generating a false signal ground U4A. An output buffer U4B and a differential amplifier U4C. This last one measures the current from the input of the sensor as the voltage fed into the sensor is ramped between +4V and -4V. U2D controls if the sensor is set to read or not. Finally U2C generating the linear ramp to be fed to the sensor input.

Ok, thanks for the input.

Found a different link :

It tries to explain how to do this, but I'm not getting it.

I understand that the heater must have the voltage slowly rised, so that the sensor will survive.

I understand that the inputs to the sensor is there to keep the output at 450mV.

The rest I don't get.

Maybe someone here could try to do this with an arduino, and as few components as possible, and post it here or on the playground as Open source?

That would have been great! =)

Are you trying to make your own version of the Innovate Motorsports LC-1 controller?

No, I'm simply trying to use the arduino to read the sensor.

I think it would be nice if we could have it as open source here, or on the playground.

Of course, I will use it in my car if I can get it to work.

Well if you have a controller already for the wideband, then you can connect the output to one of Arduino's analog inputs and then use analogRead(). Simple. But everything you posted so far looked controller related.

Heres a link that describes what needs to happen a bit more detailed.

Also if you look at page four, half way down, on this link, it also says what actuallly needs to be done.

I've got a lot of op-ams laying around, but there must be a way of doing the prossesing in the arduino, and just use op-amps(or something) to scale the I/O's...


edit : new text

Found out a bit more with this datasheet :

The voltage on the heater must be ramped up from 7v to 12v @ 0,4v/sec This is conservative voltage. The temperature @ the heater has to be controlled, this is done by meassuring the impedance of the sensor. The impedance should stay at about 80 ohms. I know the voltage(V_one) I apply to the sensor, and therefor I know the expected current(I_one). So to control the impedance(R_goal), I can meassure the current(I_R_ref) through a known R(R_ref) and compare this to the expected current(V_one / 80ohm) ???

The sensor gives out a voltage (V_out), this voltage is supposed to be 450mV relative to virtual fround, And I can adjust this by applying a current(I_one) to the sensor.

I know that the impedance is 80 ohms, so I apply a voltage that is ( I_one / 80ohm)

The Air to Fuel Ratio is proportional to the current I apply.

So If the sensor is in fresh air, I must apply 2,55mA through 80 ohm to keep the V_out @ 450mV, that means that I have to apply a voltage of 80* 0,00255 = 204mV

0,00255A * 8196 = 20,9 % of oxygen

The variable 8196 is found in the datasheet. I'll look around to see if i can find a formula to determin this more exactly.

In practice I may need to amplify the V_out about 50 times to give some precision withe the arduino. Also, the voltage over R_ref I may need to amplify.

and the outputs from the arduino I need to scale down.

This is just what I think, and I'm writing it here so that I can remember it. If anyone wants to check out the links or the schematics, and make a comparison to what I've just written, that would have been great.

Please apologize me if there is bad english here, Its not everyday I get to write it, especially 3 hours before my kid wakes up =)

Thanks all!

I know this is an old tread, but i know that VEMS once got their widebandcotroller and setup “stolen” by a hacker/competitor(thats story anyway),.
Thats apparantly why, you cant buy them as a kit anymore.
Not that i say, it ever has been a real kit, but in the “finish it yourself” version of their Ems’, you used to get all the drivers to the Wbo2, on the side, to solder in by yourself.

Very interresting subject though.

Would be nice to make/have an onboard Wbo2 on eg. a Megasquirt.