>>> Join Us in the Fight Against Air Pollution

AirGradient Forum

Accuracy comparison of PMS5003 with large interval values

The default Arduino code gets a sensor reading from the PMS5003 device every 5 seconds.
ESPHome out of the box gets a reading every second.
Others have proposed increasing the update_interval to 2-5 minutes or more to extend the life of the sensor (Mentioned here as possibly be 8000 hours although I didn’t see that in the Datasheet)
PMSX003 Particulate Matter Sensor — ESPHome

There has also been some question about if the higher intervals would impact the accuracy of readings from the sensor of it only spins up the fans every 2 minutes for a reading and then stops them again.
I’m also not sure if the lack of the fan spinning would have any impact on readings of other sensors in the AirGradient (heat convection, or general air movement)

It would be interesting to see some comparisons of readings as far as overall accuracy is concerned between a device with 1-10 second readings, 2 minute readings, and 5+ minute readings.

If there is no significant change in accuracy, only in number of measurements, then I have no problem with the longer intervals, but don’t want unforeseen impacts of that change.

There are studies that indicate that the more often you read, the more accurate the sensors are. However I believe for normal use, you do not need that level of accuracy and could probably optimize for energy savings.

However please note that most PM modules that break are due to insects getting in. I believe they are more likely to get in if the fan does not spin. So these life extensions of the sensor could be offset by more insects breaking them.

I wonder if that’s something reasonably testable….

At what point do you get the best balance of lifetime vs accuracy indoors?

Warmup for 30 seconds, read for 30 seconds, pause for 1-5 minutes

Continuously reading.

My guess is 1-2 minutes will substantially improve lifetime with minimal accuracy impacts provided you are indoors and observe a warmup period to get air flowing steady first.

Would also be interesting to learn if averaging makes sense or not.

In the ESPHome config, there is a setting for update_interval but no idea how long it spins up the fan first, and it only does one reading and then waits until the next interval.

PMSX003 Particulate Matter Sensor — ESPHome
It says if it is longer than 30 seconds, then the fan will spin down, but not sure when it spins up vs when it does the reading.

Says 30 seconds:

Which I believe is also what plantower recommends.

Looked that up before switching from my own implementation of that powerdown.

But what I really want to know is how to optimally utilize that. Is reading for 5 seconds just as accurate as reading for a minute then pausing? What if I average for 30 seconds or 1 minute.

I think a good balance could be to do a couple of measurements in a short time and then sleep, e.g.

Do 10 seperate measurements within 10 seconds. Average them and send to server.
Sleep for 120 seconds.
Repeat

2 Likes

I’ve also experimented with this. As noted, esphome claims a sensor lifetime of 8000, but that is not in the datasheet. Where did 8000 come from? Does anyone have any real numbers on sensor lifetime when run continuously?

I never saw 8000h in any official specs. We have Plantower 5003s happily running since 2019. We do not see any systematic failures. The most common failure is insects getting into it which the sleep mode might make more attractive because the fan is not spinning.

I’ve ran 2 devices in the same room for a while, 1 with your sensor_pms5003_extended_life.yaml, the other with the standard sensor_pms5003.yaml. The one with the extended life consistently gives a lower value than the other, and has more noise. If they have the same standard file, they give about the same value.

I think in the case where you put the device to sleep you need to wait a while before the value becomes good.