Enviro+ Oxide Level slow climb

Back to the oxide sensor topic I now have full day of results without any interruptions.

The huge peak that is well over 100K is from cooking four rhubarb and ginger cakes in a gas oven.

One curious pattern I have noticed is all three gas sensors drift up over night and then fall in the morning when the central heating comes on for about 1/2 an hour. While I know temperature affects them it should affect the oxide sensor in the opposite direction. I.e. when it is cold its resistance gets lower. This is apparent when the program is stopped for a short time, oxide drops and the other two rise.

The other things that are changing is relative humidity and light. The gas sensors seem very sensitive to relative humidity but the two step response in the morning seems to indicate a strange combination of temperature and humidity.

The other odd thing is I can see why the temperature rise causes a fall in relative humidity but why does it rise again shortly afterwards? And why does it fall over night when temperature is actually falling. Is it in fact my presence in the room that is raising the humidity when I arrive with my morning coffee?

It is had to separate real physical changes from senor instability!

I’m seeing odd behaviours with the gas sensors too.
First, my outdoor system has been running since June - initially feeding Luftdaten, but no longer doing that since they banned me because the Pimoroni software was sending data too often. Here’s the plot for the last week

Note that I’ve changed some of the axis values to accommodate the very high readings for ammonia and oxidising - especially with the outdoor one.

There’s some variation throughout the day, but the gas results are very odd to say the least!

And here’s the indoor one, as I’m only allowed one image per post.

Yes I think the dramatic spikes in the gas readings are just a reflection of the temperature or humidity or both. It is hard to tell because temperature and relative humidity are so closely related.

I think there needs to be some compensation. It would also be interesting to display absolute humidity rather than relative.

My oxide sensor continues to climb and I will need to re-scale the axis because it goes above 100K.

I wonder if it will ever stop climbing. I probably need a years worth of data to see if it is seasonal variation of pollution or the sensor wearing out.

I have set up a second Enviro+ in the same room. Although the gas sensors show the same variations their starting values are a long way apart, particularly the oxide sensor which has started its slow climb from about 3K and only got to 40K so far.

I haven’t got a fan on the second board so its temperature and humidity are off. I placed it near an open window where there is a cold breeze this morning and the humidity goes up and down. The other two gas sensors mirror it very closely.

My next task is to make a 3D printed cases for them both and place them next to each other to see how close they match. They are not really portable at the moment.

So I took one of my Enviro+ sensors to Tenerife and was surprised to find the oxide and nh3 readings went off the scale. I am sure that there is less NO2 pollution here as I don’t have a runny nose, whereas I always do in the UK when I go outside. There is sometimes a smell of bad eggs here, so there must be some H2S.

Oxide is approaching 400K when it is supposed to be 20K max. Obviously it is much hotter here and by turning the fan off I can show that the gas sensors are greatly affected by temperature.

I also think they are affected by air pressure and humidity.

Here is a second unit I left at home in the garage:

Not sure what the odd dips in all the gas sensors are on Sat Nov 2 but pressure was very low then.

The first particle peak is the taxi that took us to the airport. The big peak in the middle was a bunch of cars leaving an event in the museum the other side of our garden fence. The peak on the right was the next door neighbour returning home. The garage is integral to the house and the door is sealed but the brick work needs a bit of pointing in one corner. Seems to let in a lot of traffic pollution!

I don’t think the gas sensors can be correlated with absolute readings because they are so affected by other things. I think they need temperature stabilisation and / or compensation for temperature. humidity and air pressure.

That was one of my conclusions… temperature has a massive impact on the readings for gas. I was getting resistance levels far out of tolerance. I started to think that maybe for the gas readings to be useful you might need to enclose the device and control environmentals. You could pass the air through it and then get better gas level readings? That was the reasoning I had for poking around the heater crawling up in temp and thereby making my gas levels climb with it.

I wonder if the heater has a significant temperature coefficient. If it does one could measure the voltage across it with the ADC channel and use PWM on the heater to regulate the temperature.

Great idea, obviously you wouldn’t want to adjust airflow since the airspeed would impact the gas readings.

Apologies for coming into this discussion late and I don’t know if you’re still interested in this topic, but I’ve made some progress understanding the gas sensors’ sensitivity to temperature, humidity and air pressure changes, as well as drift over time.

I logged many hours of the gas sensors’ resistance (Rs) against the BME280’s temperature, humidity and air pressure readings. I then undertook regression analysis to determine how each Rs is impacted by those factors.

I found that:

The Red Rs varies by -9000 ohms per degree Celsius (relative to the 23 degrees C baseline referenced in the sensor’s spec) and it varies by -1750 ohms per % relative humidity (relative to the 50% baseline referenced in the sensor’s spec). I found that air pressure changes have negligible impact.

The Oxi Rs varies by -10000 ohms per degree Celsius (relative to the 23 degrees C baseline referenced in the sensor’s spec), it varies by -646 ohms per % relative humidity (relative to the 50% baseline referenced in the sensor’s spec and it varies by 2639 ohms per hPa of air pressure, relative to a 1013 Hpa baseline.

The NH3 Rs varies by -16000 ohms per degree Celsius (relative to the 23 degrees C baseline referenced in the sensor’s spec), it had negligible impact from relative humidity changes and it varies by 1526 ohms per hPa of air pressure, relative to a 1013 Hpa baseline.

There was significant Rs drift during warmup (the 6814’s application note advise 100 minutes warmup time) and a lesser level of drift after warmup. I addressed the warmup drift by doing a calibration reading of each Rs after the warmup period in clean air and placing that reading into an updated R0 for each sensor. The issue is that you need to ensure that the sensors aren’t exposed to abnormal gas levels at the time of the 100 minute calibration. I addressed the longer term drift by triggering a recalibration at a set time each day (in my case, I choose to do it at 3am when the outside air is likely to be clean), add it to a list of the daily readings for the previous week and update each sensor’s R0 based on the average of the calibration readings for that past week. Not perfect, but much better that leaving the sensors without calibration.

I also noted in this topic’s post that there were concerns that the Oxidising sensor’s resistance approached 400k, when it should be 20k max. My understanding is that the 20k figure is for R0 (i.e. resistance in air at 23 degrees C and 50% RH) and the Rs figure (i.e. what the Enviro+ measures) will be higher as the sensor is exposed to oxidising gases and time/temperature/humidity/air pressure changes. During my analysis, I was getting Oxi Rs readings between 21k and 215k.

I’ve coded the above compensation into my environment monitor https://github.com/roscoe81/enviro-monitor, which also includes algorithms to convert Rs/R0 into approximate ppm levels for each sensor, using the graphs in 6814’s datasheet.

Hope that helps.

Thanks, I will try to compensate for temperature and humidity with your figures.

I’ve done some more work on this issue and have made some progress. The bad news is that the original compensation figures that I posted turned out to be incorrect because I didn’t take a sufficient number of samples for the regression analysis. I’ve now done a total of more than 15,000 readings on two different Enviro+ devices and found the following results:

The Red Rs varied by 632 ohms per degree Celsius (relative to the 23 degrees C baseline referenced in the sensor’s spec), it varied by 118 ohms per % relative humidity (relative to the 50% baseline referenced in the sensor’s spec) and it varied by -431 ohms per hPa relative to the 1013 hPa baseline.

The Oxi Rs varied by 6660 ohms per degree Celsius (relative to the 23 degrees C baseline referenced in the sensor’s spec), it varied by -2041 ohms per % relative humidity (relative to the 50% baseline referenced in the sensor’s spec and it varied by -3031 ohms per hPa of air pressure, relative to a 1013 hPa baseline.

The NH3 Rs varied by 9580 ohms per degree Celsius (relative to the 23 degrees C baseline referenced in the sensor’s spec), it varied by -3784 ohms per % relative humidity (relative to the 50% baseline referenced in the sensor’s spec) and it varied by -3287 ohms per hPa of air pressure, relative to a 1013 hPa baseline.

So overall, the Red Rs was not greatly impacted by changes in temp/hum/pressure but Oxi and NH3 were impacted to a greater extent. I also found that there were variations in these compensation factors from device to device and that’s where I’m going to direct my next analysis.

I’ve updated my code with these new compensation factors but I don’t apply them until after the 100 minute warmup period. I set three R0 levels and measure temp/hum/pressure at the 100 minute mark. Subsequent Rs readings are then compensated relative to that temp/hum/pressure baseline.

R0 levels and the temp/hum/pressure baseline are then adjusted each day using 7 day rolling averages to compensate for sensor drift over time.

I’ve now used these new compensation factors for a few days and the results look encouraging. As stated above, I now need to find out the degree of variation from device to device.

1 Like