golioth / reference-design-air-quality

Apache License 2.0
7 stars 0 forks source link

Mass concentration values for PM4.0 & PM10.0 are identical to PM2.5 #7

Closed cdwilson closed 1 year ago

cdwilson commented 1 year ago

After the SPS30 sensor has been in measurement mode for >30s (minimum startup time from SPS30 datasheet), the reported PM4.0 & PM10.0 mass concentration measurement values are identical (or very similar) to the PM2.5.

Here's a CSV example of 30 samples measured in 1s intervals:

MC1.0, MC2.5, MC4.0, MC10.0, NC0.5, NC1.0, NC2.5, NC4.0, NC10.0, TPS
8.468917, 8.955562, 8.955564, 8.955564, 57.219364, 67.368965, 67.589127, 67.604401, 67.617844, 0.473953
8.530173, 9.020338, 9.020341, 9.020341, 57.633236, 67.856255, 68.078003, 68.093384, 68.106926, 0.468535
8.569812, 9.062254, 9.062258, 9.062258, 57.901051, 68.171570, 68.394356, 68.409805, 68.423416, 0.465256
8.597820, 9.091872, 9.091875, 9.091875, 58.090286, 68.394371, 68.617882, 68.633392, 68.647041, 0.467921
8.660067, 9.157696, 9.157699, 9.157699, 58.510849, 68.889534, 69.114662, 69.130280, 69.144028, 0.471705
8.699208, 9.199086, 9.199089, 9.199089, 58.775303, 69.200897, 69.427040, 69.442734, 69.456543, 0.471417
8.763182, 9.266735, 9.266739, 9.266739, 59.207535, 69.709801, 69.937607, 69.953407, 69.967323, 0.473853
8.827798, 9.335065, 9.335068, 9.335068, 59.644108, 70.223808, 70.453300, 70.469223, 70.483238, 0.477316
8.867182, 9.376712, 9.376715, 9.376715, 59.910198, 70.537102, 70.767616, 70.783607, 70.797684, 0.471940
8.879457, 9.389692, 9.389695, 9.389695, 59.993134, 70.634750, 70.865578, 70.881592, 70.895691, 0.475073
8.901034, 9.412510, 9.412514, 9.412514, 60.138924, 70.806404, 71.037788, 71.053841, 71.067978, 0.476399
8.929933, 9.443069, 9.443072, 9.443072, 60.334171, 71.036278, 71.268425, 71.284523, 71.298706, 0.474273
9.002132, 9.519417, 9.519421, 9.519421, 60.821980, 71.610619, 71.844635, 71.860870, 71.875160, 0.475192
9.064746, 9.585629, 9.585631, 9.585631, 61.245022, 72.108696, 72.344345, 72.360687, 72.375084, 0.475502
9.144076, 9.669517, 9.669520, 9.669520, 61.781006, 72.739754, 72.977463, 72.993958, 73.008476, 0.474518
9.198492, 9.727060, 9.727063, 9.727063, 62.148663, 73.172630, 73.411751, 73.428337, 73.442947, 0.473326
9.244738, 9.775963, 9.775967, 9.775967, 62.461117, 73.540504, 73.780830, 73.797501, 73.812180, 0.474991
9.265072, 9.797465, 9.797469, 9.797469, 62.598503, 73.702263, 73.943115, 73.959824, 73.974533, 0.473508
9.301875, 9.836384, 9.836388, 9.836388, 62.847164, 73.995026, 74.236839, 74.253616, 74.268387, 0.474004
9.339098, 9.875745, 9.875749, 9.875749, 63.098652, 74.291122, 74.533905, 74.550743, 74.565575, 0.470323
9.357456, 9.895159, 9.895163, 9.895163, 63.222691, 74.437164, 74.680420, 74.697296, 74.712158, 0.469453
9.366629, 9.904858, 9.904861, 9.904861, 63.284660, 74.510124, 74.753624, 74.770515, 74.785385, 0.469694
9.368268, 9.906591, 9.906595, 9.906595, 63.295738, 74.523170, 74.766708, 74.783600, 74.798477, 0.470113
9.338682, 9.875306, 9.875309, 9.875309, 63.095844, 74.287819, 74.530586, 74.547432, 74.562256, 0.470857
9.277822, 9.810949, 9.810953, 9.810953, 62.684654, 73.803688, 74.044876, 74.061607, 74.076340, 0.472067
9.217347, 9.746999, 9.747003, 9.747003, 62.276058, 73.322624, 73.562233, 73.578857, 73.593491, 0.471556
9.145235, 9.670742, 9.670746, 9.670746, 61.788837, 72.748978, 72.986717, 73.003204, 73.017731, 0.467244
9.102078, 9.625107, 9.625110, 9.625110, 61.497257, 72.405670, 72.642288, 72.658707, 72.673157, 0.471595
9.020040, 9.538353, 9.538356, 9.538356, 60.942966, 71.753059, 71.987549, 72.003815, 72.018135, 0.471475

According to the datasheet, the PM4.0 and PM10.0 values are not actually measured by the sensor but are calculated from other measured values:

PM4 and PM10 output values are calculated based on distribution profile of all measured particles.

In addition, this paper seems to conclude that the SPS30 is pretty much inaccurate for particles larger than PM2.5:

The results of this test showed that the SPS30 sensors had very low cross-unit variability (~1, 1.3, and 2.4 % for PM1, PM2.5, and PM10, respectively) and, more importantly, the accuracies for the measurement of PM1, PM2.5 and PM10 decreased from R2 ~ 0.91 to 0.83 and further down to 0.12, respectively.

This appears to be a limitation of the way the sensor is designed and the algorithms running on the internal MCU in the SPS30.

References:

cdwilson commented 1 year ago

Closing because this isn't a firmware bug and there isn't anything we can do to change how the sensor behaves.