This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TIDA-00378: PM 2.5 Sensor design

Part Number: TIDA-00378


I built the PM2.5/PM10 Analog front-end sensor, using the pdf available online as a guide. I finished assembling the device, however, I am not getting a reasonable output. When I place an object inside of the sensing area, there is no apparent change in the signal. I am wondering if I might get some help troubleshooting the output of the sensor to figure out where I may have made an error in the assembly process.

Thank you.

  • Hi Shruti,

    Yes, we can try to help out.  Perhaps we could start by reviewing your schematic?  Or, does it exactly match what is published in our reference material?  What are you using as an optical chamber?  How about the ADC?  Are you able to verify that the ADC readings vary when increasing particle density?  If not then maybe we could take a closer look at the analog front end (transimpedance amplifier and filter/gain stages).  If the ADC codes match expectation then the issue may be more on the software/algorithm side.


  • Hi Max,

    Thanks for the reply. The schematic is exactly the same as that provided in the preference. The chamber is the old sharp GP2Y sensor chamber.

    Actually, I do not see any significant difference and any pattern if I increase the particle density. 

    I am using an Arduino Uno board to interface the sensor. 

    Please let me know, I can share the algo if incase you can find any bug.



  • I am sorry for the typo! its reference (not preference)


  • Shruti,

    What are you seeing output from the ADC - is it a constant code or do you see some noise from sample to sample within a small range of codes?  What is your reference voltage and what percentage of full scale is the ADC reporting?

    Are you sure the IR LED is illuminated?  J1 pin 3 must be high for this.  If so, perhaps you could increase the illumination via R15 and then force a high concentration of large particles?  With this you should see some kind of output.  If the ADC still doesn't give any pulses above the noise level in this case then you may want to double-check its input on an oscilloscope to see whether or not there is a signal there.  If the analog input looks OK then you would know to debug the ADC configuration and the rest of the firmware.  If the analog output isn't doing anything then you may have some more fundamental issue with your hardware and you may want to go through and probe various portions of the signal chain and verify connections.


  • Hi Max,

    The sample data is like:

    15:39:06.356 -> 283.00
    15:39:07.364 -> 242.00
    15:39:08.365 -> 264.00
    15:39:09.381 -> 267.00
    15:39:10.389 -> 236.00
    15:39:11.394 -> 272.00
    15:39:12.394 -> 254.00
    15:39:13.402 -> 251.00
    15:39:14.433 -> 307.00
    15:39:15.440 -> 260.00
    15:39:16.440 -> 263.00
    15:39:17.471 -> 265.00
    15:39:18.463 -> 22.00
    15:39:19.471 -> 181.00
    15:39:20.504 -> 181.00
    15:39:21.512 -> 203.00
    15:39:22.504 -> 228.00
    15:39:23.522 -> 263.00
    15:39:24.522 -> 277.00
    15:39:25.553 -> 261.00
    15:39:26.562 -> 302.00
    15:39:27.554 -> 334.00
    15:39:28.594 -> 327.00
    15:39:29.586 -> 339.00
    15:39:30.619 -> 328.00
    15:39:31.610 -> 281.00
    15:39:32.608 -> 306.00
    15:39:33.640 -> 289.00
    15:39:34.637 -> 243.00
    15:39:35.671 -> 427.00
    15:39:36.679 -> 127.00
    15:39:37.672 -> 176.00
    15:39:38.671 -> 270.00
    15:39:39.687 -> 116.00
    15:39:40.717 -> 32.00
    15:39:41.718 -> 171.00
    15:39:42.725 -> 214.00
    15:39:43.742 -> 224.00
    15:39:44.749 -> 245.00
    15:39:45.780 -> 254.00
    15:39:46.779 -> 284.00
    15:39:47.787 -> 159.00
    15:39:48.781 -> 188.00

    (The highlighted one is the one, when I was passing high concentration of particles)

    The reference voltage used is 5v.Even If I make changes in R15 I do not see any significant difference. I could not locate J1 Pin 3.



  • Hi Shruti,

    From the time stamps it looks like you may be sampling about once per second - is that correct?  If so could you try faster sampling?  This is helpful since the duration of the pulses can be fairly short.  For example, the reference design samples the AFE every 1 ms and computes an 8-sample moving average in order to reduce noise.

    Pin 3 is the middle pin of the J1 connector.  It connects to Q1 (the NPN used to enable the LED) via R18.  This net should be driven high to make sure the LED is illuminated.


  • Hi Max,

    Thanks for the reply. I see we need to keep the led ON every time, many online resources show a square wave pulse.

    As per your suggestion, I made the delay for 1ms. (Yes, initially I was sampling for once per second)

    I have attached the code that I was using, please have a look.

    int analogPin = A0;
    int led = 7;

    float vout_analog= 0;

    void setup(){

    void loop()

    digitalWrite(led,HIGH);// step 1: Turn source ON
    delayMicroseconds(1000); // step 2: Wait for 1000 us
    vout_analog = analogRead(analogPin); // step 3:Read the analog signal



    Also, could you please tell me how can I be sure that my source and detector module is working absolutely fine and that I am not getting any random data?

    Can I use a red led source instead of the Infrared source?

  • Shruti,

    It should be possible to use a red LED rather than infrared as long as the photodiode is sensitive to the wavelength used.  Note that the signal chain gain may need to scale a bit depending on the particle size since the scattered light intensity tends to vary inversely with light wavelength.

    In terms of verifying the system is working, I'd recommend dividing things up into a few major components.  First, you could double-check that the LED is working.  A straightforward way to do this would be to confirm you see the expected forward current and forward voltage drop across the diode when it should be illuminated.  Then you could check the receive circuitry by taking a series of codes with the LED off to measure noise levels, turn the LED on to see if there is any change, and then force larger changes in the received light intensity either by manually reflecting the LED (not sure if this is possible with your mechanical design) or forcing a high concentration of particles.  For high particle concentrations you may see ADC outputs similar to what is shown in the reference design guide - e.g., periodic spikes of various amplitudes depending on particle diameter.  I am not a firmware expert, but it seems the code you copied above would be suitable for this.


  • Hi Max,

    Thanks for the response. Yes, I checked them out, turns out both LED and the diode are working fine. However, I am not sure why my 3.3 V pin and 5V pin have the same 5V Voltage, Could you explain the connection between 3.3 V and 5v and then what does VCC_TIA mean, how much should be its value?

    We tried many things, there is no short no damage to any component on PCB, but still could not get the desired output, by any chance is it possible for TI to manufacture one for us.



  • Shruti,

    The board has three power rails:

     - VCC_3V3 powers the filtering/gain stage (U4)

     - VCC_TIA power the transimpedance amplifier (U2 and U3)

     - VCC_LED powers the LED.

    By default all three rails are tied together so that only a single 3.3-V source is required.  Which 5-V pin are you referring to?

    Have you tried looking at the VOUT (signal going to the ADC) on an oscilloscope?  Do you see any activity there when particles are flowing, and do you see correlation between the observed voltages and what is being reported by the Arduino ADC?