AirGradient Forum

Update on PMS5003 Calibrations

In late 2024, we discovered a calibration issue with the Plantower PMS5003 sensors in AirGradient ONE indoor air quality monitors. These sensors read significantly lower PM levels than previously, which often results in these sensors consistently showing zero at low concentrations. We found this issue quite widespread, impacting many batches of PMS5003 sensors.


This is a companion discussion topic for the original entry at https://www.airgradient.com/blog/update-on-pms5003-calibration/

Thanks for sharing the update Ethan! I would like to purchase a monitor once you have the individual unit calibration set up. Will you communicate this in another blog post once units youā€™re shipping are individually calibrated?

Yes we will inform once this is up and running. We are already working on it.

Thanks for the update!

Perhaps most importantly, we believe this was not an issue at Plantower (or faulty sensors) but rather a change to its default calibration method.

Has Plantower confirmed this directly? It seems odd that they would change their calibration methodology without notifying customers and providing documentation. It also seems odd that different batches would have noticeably different calibration points if the change was intentional. Are you seeing consistency among recent batches?

We are having a phone call with their engineers on Friday and this is one of the things we want to find out.

Got my unit today. Confirm the issue.
I have 3 PM2.5 monitors, All of them shows around similar values (~26-28ug/m3) when airgradient shows 12ug/m3 and I see no option to calibrate it

I just recieved an indoor unit I purchased from you guys a few weeks ago.

Is it recommended to change this?
image

We are in the last stretch to roll out a feature that will show a banner on the dashboard with an easy click to opt into the calibration setting with a simple mouse click.

1 Like

I guess my confusion is you guys have been hard at work calibrating these sensors and youā€™ve made several blog posts about the progress in identifying the problem and how you are fixing. Iā€™m just confused whether a batch specific curve, the EPA curve, or something new coming later is the recommendation.

Here are some interesting graphs, extending on my previous posts about this.

For context, I have

  • One Outdoor unit with the PMS5003T sensor

  • Three ā€˜Newā€™ indoor AirGradients with the (needs a correction algorithm) PMS5003 sensor (Labelled ā€˜Newā€™)

  • Two older indoor units I purchased in June 2024 that happen to have the (supposed to be used in the Outdoor version) PMS5003T - these are called ā€˜Juneā€™/ā€˜Oldā€™

I have one ā€˜Newā€™ and one ā€˜Juneā€™ unit in each location - Kitchen, and Lounge - which are about 3 meters away from each other. Lounge is near a window which may get some leakage from outside, and Kitchen happens to be near the slit system aircon (for context)

These graphs are for the past 24 hours:

PM2.5 measurements

The PM0.3 count (which Iā€™m told is not accurate, but is what the PM2.5 algorithm is based on?)

Humidity

Temperature

You can see that humidity and temperature for the units - especially each pair - are closely correlated.
As well as the PM0.3 count for the two June units.

Iā€™m wondering if in fact the new sensors are the accurate ones in relation to PM2.5. Thereā€™s obviously still some discrepancy between the old and new units, but some elements of the data have caused me to consider ā€˜Which model is accurate?ā€™ - look at this graph for the past 3 hours for example.

You can see here that Kitchen (June), 3 meters away from the window that I think lets some outside air in, is consistently near zero. Lounge (June), next to that window, bounces from 0 up to 1 now and then.

Yet Lounge (New) consistently shows that benchmark of about 1 ug/m3 - with the old sensor ā€˜agreeingā€™ with that measurement now and then.

Is this a case of the old sensor only finding some PM2.5 particles to measure sporadically, where the new sensor - more accurately measuring PM0.3 and using this as a basis for PM2.5 measurement - consistently finds the particles and can extrapolate the correct PM2.5 measurement from that?

Here is the PM0.3 graph from the last 3 hours

The Kitchen (new) sensor (Yellow) sometimes reports no PM0.3 measurement, which is likely why the PM2.5 measurement also is sporadic. Iā€™d suggest this is to be expected where the unit is located because itā€™s nearer the air filters and further from the window, but that isnā€™t reflected in the ā€˜June/Oldā€™ sensor measurementsā€¦

The reason why Iā€™m trying to understand the accuracy of the sensors is because Iā€™m building a filter system that is capable of this performance - whilst being cost effective, repairable, and quiet:

Hence why Iā€™m trying to measure itā€™s performance, especially during days like yesterday when we had significant bushfire smoke haze.

Even though this Plantower issue creates some questions, I really value the discussion weā€™re having on it. I think itā€™s far more transparent and constructive than buying a ā€˜name brandā€™ unit and simply hoping/trusting that the number it reports is somewhat correct.

Iā€™ve done that before, and now I leave that unit to simply control my airconditionerā€¦

Thanks to everyone whoā€™s putting time into this!

1 Like

:heart_eyes:
Wow! Thank you for sharing.

Hereā€™s a good example of what Iā€™m talking about:

The ā€˜Newā€™ sensors are reporting PM0.3 counts of just 1 and 5, and are extrapolating that into a PM2.5 measurement where the ā€˜Oldā€™ sensors are reporting PM2.5 of Zero.

Also, to prove Iā€™m just a measurement-hack and not a data scientist :wink: That sensor called ā€˜Outside PMS5003 (New)ā€™ was in my Bedroom - I just realised I could put that outside instead, to see how itā€™s readings correlated with the PMS5003T sensor in the Outdoor AirGradient. Theyā€™re about a meter from each other but should still provide some interesting observations.

EDIT: And the reason why that correlation makes more sense outside, is because thereā€™s pollution outside. Iā€™m working hard to filter inside down to as low as I can make it, which is why the four inside sensors will be useful for very low-reading correlation. Iā€™m now kicking myself I didnā€™t have that indoor sensor outside yesterday when the haze had PM2.5 up to near 60!

Thanks for sharing this. A quick update from my side:

We have currently four people (2 scientists, 2 developers) from our team working on making the calibration more user friendly and to tightly integrate it with our test chamber where we have a Palas Fidas 200, an EU approved PM reference instrument, as comparison.

I expect another update coming out this week that will already make the calibration selection more user friendly. Once we completed all of this, I am very confident that we have one of the highest accuracies of all low-cost sensors out there.

Can you share an update about what the Plantower folks said about this? I still find it odd that thereā€™s no official explanation from them about whatā€™s happened.

Plantower confirmed that they update their calibration process from time to time but there is no official notification of documentation about the changes. This obviously is not ideal.

On the positive side, they confirmed that our approach to recalibrate the sensors via the particle count is a solid approach and that we can continue doing this.

In order to be 100% sure one of our in-house scientists is currently going through a large amount of our co-location data with the aim to verify our approach with the reference data and ensure that it works globally and in different climate zones. We will make this analysis public in form of a blog post.

I am confident that we are on the right track.

Is there any alternative sensor that makes more sense in terms of transparency and reliable measurements?

@Kieran ā€¦mostly in response to your last post.
Here comes the freight train!

I could be incorrect in my understanding here, someone smarter can correct me if I am wrong.

The principle by which this sensor is operating is actually fairly simple. Visually, you can actually see dust particles when light relfects/refracts off of them when the sun is shining really brightly through blinds, or when you turn your phoneā€™s flashlight on in a dark room.
image

The Plantower device uses this same principle to identify PM at a smaller scale. Itā€™s really nothing more than a laser beam and an optical sensor. The reading is where it gets complicated. Based on how much of the lasers light is ā€œblockedā€ alone, we are somehow able to extropolate the volumetric density in Ī¼g/m3ā€¦MICRO grams per meter cubed.
Remember, PM2.5 is very very smallā€¦and the DENSITY of the individual particles has be ASSUMED so thereā€™s going to be wiggle room for margin of error, on top of the fact that weā€™re talking about particles that are exceptionally small in diameter.

Finding 2 or 3 micrograms of particles in a meter cubed is like the proverbial needle in a haystack. Except, its worse. Its more like a single grain of sand lost in an empty warehouse the size of a football field.

This sensor is a 20 dollar device. I say itā€™s doing a great job. Expecting much more isā€¦unreasonable. You cannot get blood from a stone - Idioms by The Free Dictionary

Surely there are sensors which operate based on different principles, maybe they would do a better job, but you can also be sure they will cost exponentially more than 20 dollars.

1 Like

Hmmmm, fair points Nick. Thanks for helping to wind back my expectations of a $20 device that a few years back would have likely cost hundreds or more.
Itā€™s the difficulty of drawing a line between having a measurement, vs having an indication :thinking:

1 Like

@Kieran Yes! I agree. BTW Where did your graphs come from?

I am a bit frustrated with this situation too.
Plantower says this in their spec sheet

Soā€¦really they are saying a reading of 10 can actually be 0 or 20 and thatā€™s in spec. And +/- 10% at 500 is the differance of a reading of 450 or 550ā€¦a range of 100 is obviously unfortunate. They donā€™t say this in their spec sheet, but Iā€™d imagine itā€™s far less accurate with readings over 500.
It makes sense tho, when there are more and more partcles to count and they are moving very fast.

My assumption is that the work by the AirGradient team is primarily focused on this part of the problem:

@Achim_AirGradient says:

By comparing pm02 data between known ā€œgoodā€ and ā€œbadā€ sensor batches in a lab envitonment (with controlled/consistent pm003Count) they can extroplate out better assumptions for calculating density. I think?
It sounds like they are piling through a mountain of data right now trying to come up with a good one-size-fits-all correction algorithm using math thatā€™s way above my head.

I do have a suggestion that I believe has helped in my situation which also may help you. My ā€œwork aroundā€ comes at this problem from a completely differant angle, but it is also outside of the AirGradient App solution, so it may not fit your needs.

I am writing all of my sensor data to a CSV and then graphing it with Grafana.
Hereā€™s an example of what my data looks like from around 11PM last night to around 1PM this afternoon.

Heres the same time period but in the air gradient app

I think my data looks ā€œmore correctā€ because I believe I have many more sample data points than the cloud does, and these sensor values can change very very rapidly.

Some examples:

=== DEBUG: pm02Compensated Samples and Calculation ===
Collected Samples (Timestamp and Value):
  2025-02-11T13:59:44.053981: 44.69
  2025-02-11T13:59:47.179969: 41.01
  2025-02-11T13:59:50.254322: 31.51
  2025-02-11T13:59:53.326942: 23.54
  2025-02-11T13:59:56.400643: 20.03
  2025-02-11T13:59:59.474897: 15.74
  2025-02-11T14:00:02.541830: 13.9
  2025-02-11T14:00:05.612419: 10.67
  2025-02-11T14:00:08.684507: 9.45
  2025-02-11T14:00:11.719674: 8.4
  2025-02-11T14:00:14.826479: 6.66
  2025-02-11T14:00:17.899040: 6.05

Processing 12 numeric samples:
Sorted Values: [6.05, 6.66, 8.4, 9.45, 10.67, 13.9, 15.74, 20.03, 23.54, 31.51, 41.01, 44.69]
Trimming highest and lowest: [6.66, 8.4, 9.45, 10.67, 13.9, 15.74, 20.03, 23.54, 31.51, 41.01]
Average: 18.090999999999998 => Rounded: 18.09
Final pm02Compensated value stored: 18.09

Data logged at 2025-02-11T14:01:21.296463

Are you using Home Assistant?
I have a ticket open there on this topic where I proposed a change to the integration. Right now it samples a single datapoint each interval, which I think can be vastly improved.