Measuring the Pickle Jr. – a modified PPD42 with an attached fan.

In the previous post I talked about how I built Pickle Jr – which is my name for the networked air pollution monitor that comprises the Shinyei PPD42 with a small Sunon fan fused to the 42. I first built the Pickle described earlier which was the networked air pollution monitor that comprised the PPD60PV-T2 (aka T2) with a small fan fused to it and an Arduino Ethernet.

I decided to do make the Pickle Jr.  hoping that the same improvement in noise and sensitivity I got with the Pickle (T2) would also apply to the 42.

For those who have worked with the 42 or one of its cousins (the DSM501 and the Sharp GP2Y thingy) know that the data gives many many zeros. As in this blog post from Darrell Tan in Singapore., and in this blog from David Holstius

That is even when there is known air pollution, the sensor reads zero. If you wait long enough or average over a long time then there is some data. But waiting for an hour, or in some cases the entire day is not that great so I wanted to see results with a minute or so. So I added the fan to the 42 and measured it against the 42 without the fan, and the T2 and the AES-1, the zeros improved, but unfortunately I still got many of them (this is with PM2.5 less than approx 25 ug/m3.). The issue with the zeros is that the data cannot be scaled because a zero is a zero 🙂 So I have seen other folks use a previous non-zero value to guess what that zero should have been. But what if you could reduce the number of zeros significantly in the first place ?

So how do I reduce the number of zeros ?? The 42 has two controls on the board that are set at the Shinyei factory for calibration. I did not want to mess with those if I could help it because it would be impossible to know precisely what I had set them to in case I (or others) wanted to do the same thing. Then I found this brilliant note by Tracy Allen and he has figured out how the 42 works!

After reading and re-reading the note (with help from others), I understood that P1 is what most of us measure and that P2 is less sensitive. But, we can make P2 more sensitive by decreasing the threshold voltage at Pin5. I did not know quite how to do that right away but after some trial and error, I attached a 10 KΩ resistor between Pin5 and Ground and then measured the voltage at that Pin. Why 10 KΩ ? Because I wanted to reduce the threshold to half from what it was for the P1. I measured 1.35V as the threshold for P1 and with the 10 KΩ resistor I measured 0.491V at Pin5. Without the resistor I measured 2.48V at Pin5.

So now with the fan and with the resistor I measured both P1 and P2.

Screen Shot 2014-12-14 at 3.15.25 PM

The sensor 42:00012 is the 42 with Fan and resistor and 42:00004 is the vanilla 42. As before I store all the data in tempoiq and make all the plots with plotly. I have written the code to store and extract info from tempoiq and then post process in plotly. The y-axis is just the P1 and P2 voltages scaled by a straight line curve from the Shinyei data sheet measured every minute. The x-axis is the date. So now the number of zeros has gone down dramatically! But obviously the calibration would be quite off. However, since I did not muck around with the two controls, if all of us used the same resistor value then we could come up with a *new* calibration curve (more on this later).

Now how good is this 42 with fan and resistor, let me call this 42FR compared to the T2 with fan or the Dylos ? I wanted to do this with the AES-1 as well, but the windows computer it is connected to has some issues. So here is the 42FR, 42 and Dylos with measurements every minute:

Screen Shot 2014-12-14 at 3.41.25 PM

The 42FR is still quite noisy but has a response that generally traces the Dylos over this per minute interval. Changing the interval to 10 minutes  results in

Screen Shot 2014-12-14 at 3.42.57 PM

Now the respond of the 42FR vs the 42 is much clearer wrt the Dylos. Adding the T2 with fan to the mix for 1 minute intervals gives:

Screen Shot 2014-12-14 at 4.00.03 PM

Since I used the left y-axis for both the T2 and 42’s, the latter look “compressed” and, of course, the T2 with fan tracks quite closely to the Dylos. BTW, this is not the calibrated particle counts, I have not done that yet as I said before. Here is the same data over 10 minute intervals

Screen Shot 2014-12-14 at 4.10.10 PM

Interestingly the vanilla 42 can barely be seen wrt the 42FR. And now the proof of the pudding, that is how is the regression of the 42FR and the vanilla 42 vs the T2 with fan and the Dylos. First the comparisons with the T2

Screen Shot 2014-12-14 at 3.56.47 PM

That is a pretty decent R2 of 0.62 for the 42FR compared to an R2 of 0.02 for the vanilla 42! Across 10 minutes it becomes better

Screen Shot 2014-12-14 at 4.07.03 PM

R2 of 0.81 for the 42Fr compared to an R2 of 0.19 for the vanilla 42. But the number of points are not enough, I need to continue this for a longer period. Next is the comparisons to the Dylos, first the per minute

Screen Shot 2014-12-14 at 3.52.55 PM

A lower R2 than for the T2 but still oodles better than the vanilla 42. And finally the same over 10 minute intervals

Screen Shot 2014-12-14 at 4.07.18 PM

A decent R2 of 0.55 for the 42FR vs 0.21 for the vanilla 42.

I absolutely love tempoiq and plotly. I am so thankful to the tempoiq guys who have just rocked for this project! And the plotly tool is the greatest too.

Work still to be done (likely in the holiday break): compare with much higher PM2.5 concentrations, and then produce a calibration curve of the 42FR vs Dylos and T2 that anyone can use if they want to modify their 42’s. As a summary, the mods are to add a fan to the plastic housing and the resistor to the threshold pin Pin5.

This entry was posted in Uncategorized. Bookmark the permalink.

22 Responses to Measuring the Pickle Jr. – a modified PPD42 with an attached fan.

  1. Alex says:

    Thanks a lot for sharing your test! 😉

  2. Yanaki Yordanov says:

    Nice blog and tests. I am glad to see how many people are trying to get such a project going. I (like probably a lot of people) am trying to make a DIY low-cost air sensor, but with the sharp sensor unit. I haven’t had much luck and I want to turn my efforts to shinyei. Can you share some info on how much the different sensors cost you and where did you get them from. If you prefer you can answer me on

  3. Jan says:

    Nice test. I would like to see even more!
    By the way, I’ve read the paper “Enabling Low-Cost Particulate Matter Measurement for Participatory Sensing Scenarios” which talks about different sensor – Sharp GP2Y1010 and the issue it is having with de-calibration – offset between real concentrations and calculated concentrations calculated from particles count changes over time. I wonder if Shinyei PPD42 has the same issue or not, and in general which sensor is now more suitable as a low-cost sensor.

  4. Hello A.J.
    One question/proposition : you have put a resistor to raise P2 readings. You could consider putting a couple of potentiometers, one on P2 but one on P1 as well. By raising the sensitivity on both (slightly), you might improve overall reading. And by playing with both potentiometer you could reduce the difference between the curves of the 42FR and the dylos (considered as reference) … I mean the shape. (On your third graph you can see at oct 23,8:30 the 42FR readings are way high above dylos’ whereas oct 24 11am the readings are below.

    • A.J. says:


      The only available pins externally are +5V, P1, P2 and Threshold(P2). There is no threshold pin available for P1, so its comparison voltage is set. However, I could add a potentiometer for P2 instead of a fixed resistor. That would change the calibration curve yet again for every setting of the pot. Yes, there are some unexplained anomalies in the readings. I tried the put the monitors very close to one another, but I suspect there are times when one monitor reads something different from the other.

  5. That might sound stupid but on your first graph you talk about 42:00012, 42:00004, P1 and P2 … I am guessing you add P1 and P2 reading to plot 42:00012 ?

    • A.J. says:

      Actually not. Those two sensors (monitors) are separate. I measured P2 on the 42:00012 and P1 on the 42:00004. I could have measured both on the same monitor but I wanted to remove any impact of the resistor on P1 in monitor 42:00012.

  6. Mark says:

    I have some problems with my PPD42. Sometimes I just no data. Someone have the same problems? And it is possible to see the LED? Because I see no light its is IR? But also with a camera I see nothing.

    • A.J. says:

      Hey Mark,

      One possible reason as to why you may be receiving zeroes in your data set is that there is too much light entering the system. Thus, try putting some black electrical tape or a likewise device on top of the triangle shaped opening in order to minimize the amount of light that enters. Also, make sure that the sensor is vertically oriented, you can make use of the alignment holes they provide to put a nail or screw into it and pin it to a surface. Have you added the resistor to increase the sensitivity? This should reduce the number of zeroes. Finally, you can’t see the LED with the naked eye, because it is infrared. Most of the phone cameras these days (like the one on your phone) have IR filters so you won’t be able to see it through that either, however you should be able to find an old camera or another method of detecting the infrared radiation.

      Hope this helps,

  7. did a really great job!
    did you solder directly on the pcb the resistor? could i have please a picture of the ‘hacked’ sensor? Thanks again for sharing..i am interested in pm2.5 readings and mine are too low to be true..then i will try your hack:).

  8. Stefano says:

    Hello A.J. could you please explain how to put the 10kohm resistor? Tjhanks a lot for any help!

  9. guest says:

    Thanks for sharing!
    Check out these cheap laser dust sensor modules: I’d love to see these compared against the other ones!

  10. hammillbr says:

    Thanks for your great site. I stole/borrowed your idea for the 10k resistor. It really helps. I built my own sensor using a photon to make it web enabled and cheap.

    • A.J. says:

      Very cool. I am glad the 10K resistor helped. I would suggest using a black non reflecting tape for covering the opening on the PPD42 instead of the metallic looking tape you used. Cheers.

      • zanydev says:

        I tried to add a 10k resistor, but it really messed up my values, they went way too high (around 900). Does the formula has to be changed? or does it just make sense with a fan?

      • A.J. says:

        What are your LPO values ? That is the low pulse occupancy ? For quick calibration, divide the particle per 100 of a cuft by between 2 and 3 to get the approx calibrated value. Hope this helps. AJ

      • zanydev says:

        Thanks, for the answer, I will have a look into this tonight. 900 was the calculated pm2.5 value using the "standard" formula. What do you mean by "divide the particle per 100 of a cuft"? Could you give an example. based on low pulse occupancy ratio?



        Gesendet: Montag, 11. Juli 2016 um 12:48 Uhr Von: indiaairquality <> An: Betreff: [New comment] Measuring the Pickle Jr. – a modified PPD42 with an attached fan.

        A.J. commented: "What are your LPO values ? That is the low pulse occupancy ? For quick calibration, divide the particle per 100 of a cuft by between 2 and 3 to get the approx calibrated value. Hope this helps. AJ"

      • A.J. says:

        if you look at the PPD42NS data sheet, the curve converts the LPO to a number of particles in 0.01 cu ft. With the 10K resistor added, the sensitivity goes up, so the LPO also goes up. To arrive at the same number of particles per cuft, the new LPO needs to be divided by a factor which I have found to be somewhere between 2 and 3. BTW, what is the “standard” formula that you are using ?
        Another way to do this is to calibrate your PPD42NS with another instrument and use those values – I use both the Dylos and the AES to calibrate. Cheers.

      • zanydev says:

        Hey, just tested the suggested formula, but now it seems too high (around 200). So the lpo is around 15%

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s