Sharp’s GP2Y1010AU0F is an optical air quality sensor it is designed to sense dust particles. An infrared emitting diode and a phototransistor are diagonally arranged into this device, to allow it to detect the reflected light of dust in air. It is especially effective in detecting very fine particles like cigarette smoke, and is commonly used in air purifier systems.
To interface with this sensor, you need to connect to its 6-pin, 1.5mm pitch connector by using mating connector.
Specifications:
- Low Current Consumption (MAX: 20mA)
- Typical Operating Voltage: 4.5V to 5.5V (MAX: 7V)
- The presence of dust can be detected by the photometry of only one pulse
- Enable to distinguish smoke from house dust
- Dimensions: 1.81 x 1.18 x 0.69” (46.0 x 30.0 x 17.6mm)
Connection
The following connections are used
Sharp pin 1 (V-LED) = 3.3V this is connected via a 150 ohm resistor
Sharp pin 2 (LED-GND) = Wemos GND pin
Sharp pin 3 (LED) = Wemos pin D2
Sharp pin 4 (S-GND) = Wemos GND pin
Sharp pin 5 (Vo) = Wemos A0 pin
Sharp pin 6 (Vcc) = Wemos 3.3V
Refer to this layout diagram
Layout
Resister, R1=150Ω and capacitor, C1=220uF mentioned above is required for pulse drive of the LED of GP2Y1010AU0F. Please use the ones with the above mentioned constants. Without these components, the device does not work.
Code
[codesyntax lang=”cpp”]
int dustPin = A0; // dust sensor - Wemos A0 pin int ledPin = D2; float voltsMeasured = 0; float calcVoltage = 0; float dustDensity = 0; void setup() { Serial.begin(57600); pinMode(ledPin,OUTPUT); } void loop() { digitalWrite(ledPin,LOW); // power on the LED delayMicroseconds(280); voltsMeasured = analogRead(dustPin); // read the dust value delayMicroseconds(40); digitalWrite(ledPin,HIGH); // turn the LED off delayMicroseconds(9680); //measure your 5v and change below calcVoltage = voltsMeasured * (3.3 / 1024.0); dustDensity = 0.17 * calcVoltage - 0.1; Serial.println("GP2Y1010AU0F readings"); Serial.print("Raw Signal Value = "); Serial.println(voltsMeasured); Serial.print("Voltage = "); Serial.println(calcVoltage); Serial.print("Dust Density = "); Serial.println(dustDensity); // mg/m3 Serial.println(""); delay(1000); }
[/codesyntax]
Testing
This is the output that I saw via the serial monitor
GP2Y1010AU0F readings
Raw Signal Value = 6.00
Voltage = 0.03
Dust Density = -0.10
GP2Y1010AU0F readings
Raw Signal Value = 176.00
Voltage = 0.86
Dust Density = 0.05
GP2Y1010AU0F readings
Raw Signal Value = 97.00
Voltage = 0.47
Dust Density = -0.02
GP2Y1010AU0F readings
Raw Signal Value = 7.00
Voltage = 0.03
Dust Density = -0.09
Link
Datasheet – http://www.sharp-world.com/products/device/lineup/data/pdf/datasheet/gp2y1010au_appl_e.pdf
GP2Y1010AU0F Compact Optical Dust Sensor Smoke Particle Sensor With Cable
Hi,
I’ve played around with this sensor using Arduino boards, so it’s interesting to see it used with a Wemos. A few comments…
1 – It’s a 5v device, so running it from a 3.3v supply does have a significant effect on the output. As you have a 5v pin on the Wemos I’d be inclined to use that.
2 – Your diagram shows the sensor output connected to D0, this should be A0
3 – The sensor output range is from about 0.2v up to about 3.6v. but Max input for the Wemos ADC is 1v, so you probably need a voltage divider to scale the sensor output voltage down to under 1.0v
4 – AnalogRead() on and Arduino takes over 100uS, so affects the timing. Not sure how long it takes on a Wemos – perhaps only 10-20uS with at 80MHz clock. Maybe even less if the prescaler for the ADC is different.
The Wemos contains an on-board voltage divider(220k/100k) and can handle a 3.3v signal.
Nick, you right of course… the 1.0v limit is for the esp8266 and the voltage divider is shown on the Wemos schematic. The output of the dust sensor is up to about 3.6v, so perhaps a 47k resistor in series with the A0 input would scale it down so that 3.6v is fractionally under 1.0v at at the ADC.