It was very little remaining effort, so I have now done so. To quickly recap, a proper air velocity sensor costs €55 inc VAT delivered each, so I had been wondering if I could misuse a cheaper sensor to estimate approximate air flow instead. The obvious candidate is a pressure sensor, as static pressure roughly correlates with air velocity squared. To that end, in that last post, I sellotaped a cheap BMP280 temperature + pressure + humidity sensor onto the boost fan, and took some measurements for various fan speeds.
I found that 50% and 100% forward fan speed turned into a -5 and -22 Pa pressure difference, and that 50% and 100% backwards fan speed turned into a +12 and +16 Pa pressure difference. As perhaps already obvious, the problem was the amount of noise in the readings – the BME280 is only specced for a +/- 12 Pa relative accuracy, and I found the sensor saw a 6 Pa steady state pressure reading difference just by leaving it for a few minutes – all within spec, but not useful for the air speeds I want to measure.
The BMP390 sensor is specced to have a relative accuracy of +/- 3 Pa, four times better. It costs approximately 10x more than the BMP280 sensor, but that is still only €4 inc VAT delivered. To recap the sensor spec table from that last post:
Noise | Relative accuracy | Absolute accuracy | Cost incl delivery | |
---|---|---|---|---|
BMP280 | 3 Pa | +/- 12 Pa | +/- 100 Pa | €0.56 |
BMP390 | 2 Pa | +/- 3 Pa | +/- 50 Pa | €4 |
BMP581 | 0.1 Pa | +/- 6 Pa | +/- 50 Pa | €53 |
This time I sellotaped both the BME280 and BMP390 sensors to the fan, and I once again ran the fan at 50% and 100% speeds both backwards and forwards, turning it off in between to establish how much drift there might be:
Difference 100% backwards (percent) | Difference 50% backwards (percent) | Difference stopped to stopped (percent) | Difference 50% forwards (percent) | Difference 100% forwards (percent) | |
---|---|---|---|---|---|
BMP280 Pressure | +38.23 Pa (+0.0384%) | +8.686 Pa (+0.0087%) | +2.469 Pa (+0.0025%) | -2.856 Pa (-0.0029%) | -18.56 Pa (-0.0186%) |
BMP390 Pressure | +18.66 Pa (+0.0187%) | +4.2302 Pa (+0.0043%) | +1.036 Pa (+0.001%) | -3.082 Pa (-0.0031%) | -19.73 Pa (-0.0198%) |
Sqrt pressure (static pressure ~= square of velocity) | +4.24 | +2.02 | 0 | -2.02 | -4.24 |
Both this test and the testing last October found that the BMP280 sensor has a strong bias to air direction. The BMP390 does not. In fact, I’d say that the BMP390 is looking very good so far, only a little drift between stop-forwards-backwards-stop.
How stable is it over time? I took a reading per second for one minute, and over that time I found:
BMP280 Humidity | BMP280 Temperature | BMP390 Temperature | BMP280 Pressure | BMP390 Pressure | |
---|---|---|---|---|---|
Maximum difference between readings | 0.29 %RH | 0.036 C | 0.038 C | 8.057 Pa | 3.833 Pa |
As percent of mean | 0.503% | 0.183% | 0.182% | 0.0081% | 0.0038% |
From its datasheet, the BMP280 could be up to +/- 12 Pa out per reading and the BMP390 could be up to +/- 3 Pa out per reading as worst cases (we assume that the oversampling we configured removes the noise). Which is, theoretically, 24 Pa and 6 Pa max-min differences respectively. For our one minute of samples, we are 33% and 64% of worst case for the BMP280 and BMP390, so within spec.
The next obvious thing to do was to calculate a 99% confidence interval, but it turns out that (surprisingly) the variance of the values read is not Gaussian i.e. not normally distributed. They are in fact linearly distributed for the BMP390 and have a power law distribution for the BMP280:

That is an unusual distribution. It made me wonder if it’s a random walk of first order difference:

Which it is. It would appear that for any given oversampled reading from the BMP390, the reading will be a linearly distributed random +/- 2 Pa from the true value. That should be easily removed with a basic low pass filter, perhaps with a ten sample history.
I also think I misread the spec sheet – when it said +/- 2 Pa due to noise, I had assumed that the oversampling would filter it out. It would appear that they really did mean +/- 2 Pa.
Remind me why you’re not using a differential pressure sensor again?
Barometric pressure sensors are absolutely the wrong thing to use to detect air flow. What I should use (as the October post pointed out) is a hot wire mass air flow sensor, which I can’t as it is too expensive on power and won’t work in varying temperature air anyway. Failing that, I should use a differential not barometric pressure sensor.
I mentioned in the October post that a differential pressure sensor costs about €45 inc VAT. That was for a CFSensor XGZP6897D with the I2C interface and 3.3v power supply. Much to my surprise, that exact same sensor can now be had for €9.50 inc VAT delivered only six months later (tariffs? Potential slowdown?). That brings it into the realm of possibility, so I ordered some along with solderable breadboards to attach them to – I guess that makes them actually €10.44 inc VAT each delivered, more than twice the cost of the BMP390 sensor.
The XGZP6897D (and note the ’D’ at the end, the ‘A’ variant is considerably cheaper but emits an analogue signal) can be purchased with varying pressure ranges. I chose the smallest available, which measures between -500 Pa and +500 Pa, and for which its datasheet claims an accuracy of +/- 2.5% with a potential +/- 0.5% drift over months. This is +/- 12.5 Pa, which is no better than the BMP280.
I honestly won’t know until testing – I suspect fitting one BMP390 barometric pressure sensor on the exit of the fan will be the ideal bang for the buck solution. The poor absolute accuracy can be solved by stopping the ventilation completely every few hours, and figuring out the absolute pressure offset for each sensor. Thereafter relative accuracy should be quite good, we should be able to reverse the fan to reduce the airflow to within 40% of max fan speed at 12v (which I have no idea what that is, but to my hand in front of it it is a slow breeze, which I think will be ‘good enough’).
In any case, I was going to need a differential pressure sensor anyway to ensure that the MVHR outlet and inlet don’t exceed a 200 Pa difference, which the MVHR documentation says will otherwise cause excess wear and tear. As we adjust boost fans some to increase flow in some places and reduce it in others, the back pressure to the MVHR will need to be kept balanced.
I still think something good enough for cheap to detect air flow is doable here. Worst comes to worst I can just fit the expensive FS3000 sensor and measure the air velocity directly. It is only accurate to 5%, however because static pressure relates to air velocity squared, our pressure sensors will never do well with low air velocities. A proper air flow sensor should be able to get the net air flow much lower.
Finally, now I’ve bought ten of the differential pressure sensors to amortise shipping costs down, I’m finding myself thinking of several other possible use cases. One is to ensure that the house is kept at neither positive nor negative pressure between the inside and the outside. For normal timber frame (and arguably block) houses, you would want a slight negative pressure to prevent indoor humidity penetrating your building fabric when outdoor RH is less than indoor RH, and a slight positive pressure if indoor RH is less than outdoor RH. However, thanks to the superb air tightness of Passive House, one can usually run a constant slight positive pressure safely. I’ll likely run my system to be neutral with a slight bias towards positive pressure, so only very slightly off neutral. Maybe 2.5 Pa, something close to the error bar interval for the sensor.
There are other potential use cases – within a building there is a stack effect from hot air rising above cold air. For every meter of altitude, there is 11.65 Pa of pressure change at 20 C. If the pressure change is more or less than that, it is probably stack effect.
One thing this particular sensor model can’t do is measure water tank depth unfortunately – 0.1 metres of water exerts 1000 Pa of pressure amazingly enough. So these sensors would exceed their range after 5 cm of water!
Go to previous entry | Go back to the archive index | Go back to the latest entries |