Ok this is more and more seeming like a heat issue to me now. The difference in our setups tells me even more. I’m mounted directly above, maybe I can start by getting a right angle adapter and then see if I can’t get better readings. .
It looks like the heaters are switched with a couple of transistors. If so perhaps they could be PWMed to compensate for the PCB temperature so that the chips runs at its desired temperature if that makes a big difference.
I also haven’t got the screen running at the moments as that probably adds some heat.
I did order out a right angle header. Hopefully when I get those in I can do more. Things are just too tight now. I also don’t have my screen running. I just take readings and http dump them into an ElasticSearch instance and make dashboards on Kibana. I brought it all down for now because the readings are nonsensical. Once I get a grasp on any hardware issues then I’ll stand it all back up again. I’ll check back in if I find anything new.
The other two gas sensors seem to have the opposite behaviour. They start off high resistance and get lower over a few hours of use.
I am writing a flask server on the RPI to show the results. Here is graph over the first 24 hours from around midday yesterday.
I read all the sensors once a second but I average 300 samples and write results to a file every 5 minutes. The day graph shows 288 5 minute samples.
You can see nightfall in the yellow lux line. The board is on my desk pointing roughly towards a north facing window in an upstairs room. The peaks and troughs are caused by clouds moving past.
The massive increase in particle counts just after sundown were caused by cooking a fritatta, which involved frying potatoes and courgettes over gas and then grilling cheese with an electric grill. We should probably turn the hob extraction on! The second peak this morning was grilling toast
Humidity also goes up when cooking due to the steam given off and possibly also from the combustion of gas.
The oxi sensor is the bright cyan line. The sharp drops are where I restarted the software. Even a few seconds pause in readings seems to let the temperature drop and then it rises asymptotically back to thermal equilibrium. This is how an open loop heater well above ambient temperature would behave. The other two gas sensors seem to have the opposite temperature coefficient.
Oddly the oxi sensor resistance goes way up to 45K with the cooking pollution and drifts back down over night and then rises again as the room temperature drops a few degrees over night. When the central heating came on for 20 minutes this morning the gas sensors all dropped. I don’t know if that means the gas boiler is leaking fumes or simply because the temperature rises a few degrees
Particles are on the rise again and I can smell food as my wife is cooking lunch!
Another sharp peak on the oxi sensor where it got close to 50K. This time cooking curried apple and carrot soup for lunch.
Notice how the how the oxi resistance peak precedes the particle peak a little bit.
Looking at the data sheet it seems the OX sensor does move in the opposite direction to the other two, so its resistance increases in the presence of oxidising gasses. So the max of 20K on the datasheet is only the max starting point in pure air. It will go way up from that in the presence of gas.
With some more cooking mine got to well over 50K. So I think it is detecting NO2, which is a combustion product of burning natural gas. It seems very sensitive as the hob is on the floor below and not directly underneath. When not cooking the level seems to be about 38K. Much higher than the datasheet but maybe the air in my house is that polluted.
I opened the windows expecting the NO2 level from cooking to fall but instead it got to well over 60K. So it looks like there is more pollution from outside. I live in small village about 1/4 mile from a busy dual carriageway. @ibivibiv, what sort of environment do you live in?
I am near a major metropolitan city. NO2 is my primary pollutant I am sure. My readings have been consistently in the 50k-60k but the odd thing was the slow climb over weeks and weeks. I can check the national EPA reports and my area isn’t in line with those numbers, but my hardware setup isn’t as sophisticated as yours. I’m waiting on a right angle header to arrive and then I can replicate your configuration and get better heat control and access to the resistors. I’m thinking that will help my situation greatly and then we can do better comparisons. In addition to your averaging you might want to toss outliers that are way outside the deviation of other readings. I have found occasionally I get weird spikes on all readings. I am guessing a problem with interrupts or something? Pi’s aren’t always the most reliable in that arena and honestly now that I think about it this application might have been better suited for an Arduino lol. But the convenience of the linux kernel is just so tempting.
I also have a 5 minute view that shows every point and that doesn’t have any weird values. I don’t think interrupts etc would have any effect because I don’t think any of the interfaces require real time polling.
Having said that I just saw this: -
which does have a strange blip in humidity and the gas reading. Probably something to do with cooking again as we just lit the oven. A friend of mine that used to work for a company that made gas sensors for mines said they had to compensate for temperature and humidity. The data sheet doesn’t give any hints on how to do that though.
The only data I can find for my area is 1-25 t/1x1km for NO2 but I don’t know how to convert that to ppm. Is t metric tonnes? And how is it per area and not per volume? It is one below the highest catagory, which is > 25 and there is some of that not far away, which seems to originate from a rubbish tip. A wooded area close to the tip is only 0.03-0.1, so the trees must clean the air.
So with the window open I get readings as high as yours but closed its about 40K until we start cooking. I am starting to realise I live in a very polluted area, being only 10 miles from Manchester and gas cooking is not great either. NO2 is a respiratory irritant and I do always have a runny nose in the UK. In the winter we spend a lot of time in Teneriffe and I noticed I have a dry nose there. Perhaps this is why.
Oh I get very wild swings sometimes 600% value jumps for a single reading across all of them on occasion. Something is very foul with my setup or my unit I think. I’ll isolate it more when I get that right angle and have a chance to do a better setup.
This huge peak in particles has a rise time of only a few seconds and has a half life of several hours.
It was caused by making the bed in another room with newly washed bedclothes!
This looks fascinating - is your code available for others to try? I’m trying to get Luftdaten to remove the ban on my Enviro+ for sending data too often, but they’re not replying to me. So I’m looking for something else to do with my two systems - one indoor and one outdoor - and had thought of trying to set this sort of thing up, but not got round to it.
It is very much a work in progress as I want to add week, month and year views but I need to let it gather more data as it has only been running for three days so far.
I can put it up on github in a few days, when it is a bit more complete.
Thanks - that’d be great.
One thing that has become apparent with the graphs is that if I stop the program for a few minutes the gas sensor cools down and it takes around 6 hours for it to reach equilibrium again. That seems a crazily long time for something so small. I wonder if the heater resistance varies enough with temperature to be able to apply feedback to stabilise the temperature.
Here is an example where the missing hour ordinate indicates where I was messing about rebooting the RPI this morning.
As promised, I have put a version on GitHub, see EnviroPlus Assistance
Now that I have a week of data I think I am seeing a slow climb like you.
The level is very erratic and this is mainly due to stopping the program for a few minutes. Other peaks are from gas cooking but the general trend seems to have gone from about 30K to 60K.
The gas sensors do seem to be very sensitive to temperature, humidity and perhaps pressure.
That’s great - I’ve got it up and running on both my EnviroPlus systems.
Good to hear as starting up with an empty data directory hasn’t really been tested because the program was very different a week ago.
It is a bit fussy at startup, in that it has a tendency to complain about ‘Particle read failed’ for a while. Sometimes that goes away on its own, but other times it needs exiting and re-running. I’ve also not worked out how to get it to reliably autostart on booting - which is possibly related to the startup problem.
However, so far so good.
Yes I initially had big problems with particle read and it turned out that if you have
use_reloader = True then Flask runs your program twice and that obviously goes wrong with serial protocol. Setting it to False made it behave. Then after a lot more development I have started to see the odd failure again but I have no idea why. I think the code has a 5ms timeout, so perhaps the web sever main thread holds it up that long.