Confused by standard and atmospheric pm2.5 value differences from PMS5003

I've hooked up a PMS5003 and the decoded values all look reasonable. But for each particulate size (pm1, pm2.5, and pm10) there are two values, one described as "standard" and one described as "atmospheric". The docs don't provide any further explanation.

I was under the assumption that the "standard" value would just have an adjustment so that the value represented the amount of particulates in 1 m^3 of air at standard temperature and pressure rather than the current "atmospheric" conditions.

But if that's the case, the readings don't make sense because the pm2.5 "standard" and "atmospheric" values will often different by over 30%, but the pm1 and pm10 values usually differ by less than 5%. I also didn't think the PMS5003 includes a temperature or pressure sensor, so I don't know how it would be doing that calculation anyway. Anyone have further insight?

According to various discussions on the Adafruit forum and elsewhere, the "standard" values are not useful, and it is not clear what they are supposed to represent. Use the values labeled as "environmental" in the Adafruit library.

Here is the code I use, and it agrees reasonably well with PM25 readings from other sensors in my area.

  // use pm25_env data, ignore "standard"

Serial.print("PM 2.5: "); Serial.print(data.pm25_env);
Serial.write(',');
  Serial.print(data.particles_03um); Serial.write(',');
  Serial.print(data.particles_05um); Serial.write(',');
  Serial.println(data.particles_10um);

In addition, the PMS5003 cannot even detect particles larger than 3 um. See this research paper:
https://www.researchgate.net/publication/320555036_Particle_Distribution_Dependent_Inaccuracy_of_the_Plantower_PMS5003_low-cost_PM-sensor

1 Like

Thanks @jremington .

One thing I'm wondering is if the uncorrected "environmental" values are used by everyone, why don't they need to be adjusted for temperature and pressure differentials?

For example, if there is 50 ug/m^3 at 20c, isn't that less dangerous to ones health than 50 ug/m^3 at 30c since the increased temperature means one would have to breath in 50% more volume of air (and 50% more particulates) to get the same amount of oxygen.

I don't see how air temperature or pressure can be relevant to particle counts.

As an exercise, you might work out the total volume of particulate matter in a 1 L air sample, for a given count/L of 2.5 um diameter particles.

Say you fill a balloon with 1 liter of air at 20c that your pm2.5 sensor shows has a concentration of 50 ug/m^3. If you increase the temperature to 30c, that same air in the balloon will now take up 1.5 liters, so if you stuck your sensor in there, the reading would be 50/1.5 = 33.3 ug/m^3, which is lower than it measured at 20c.

But someone breathing that air would still need to breathe the entire 1.5 liters to get the same amount (moles) of oxygen as he would when breathing the 1 liter of air at 20c. And in both cases his lungs would inhale the same amount (moles or mass) of particulates and presumably inflict the same amount of damage on his body, despite the sensor showing different values (50 ug/m^3 at 20c and 33.3 ug/m^3 at 30c).

Nonsense. Use Kelvin units of absolute temperature for T in the gas law PV = nRT.

You should do some more reading on the health consequences of inhaling fine particulate matter, like smoke particles.

Opps.. indeed I used the wrong units and got a far greater change in volume. You're right, the changes will be negligible at common temperatures.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.