夏普 GP2Y1010AU0F 灰尘传感器
来自Jack's Lab
(版本间的差异)
(→程序) |
(→值判读) |
||
(未显示1个用户的12个中间版本) | |||
第2行: | 第2行: | ||
GP2Y1010 Datasheet: https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf | GP2Y1010 Datasheet: https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf | ||
+ | |||
+ | [http://wiki.jackslab.org/images/GP2Y1010AU_%E8%AE%BE%E8%AE%A1%E5%8F%82%E8%80%83%E6%8C%87%E5%8D%97%E5%8F%8A%E5%8E%9F%E7%90%86.pdf 夏普 GP2Y1010AU 设计参考] | ||
<br><br> | <br><br> | ||
第39行: | 第41行: | ||
Sharp pin 1 (V-LED) => 5V (connected to 150ohm resister) | Sharp pin 1 (V-LED) => 5V (connected to 150ohm resister) | ||
Sharp pin 2 (LED-GND) => Arduino GND pin | Sharp pin 2 (LED-GND) => Arduino GND pin | ||
− | Sharp pin 3 (LED) => Arduino pin | + | Sharp pin 3 (LED) => Arduino pin 4 |
Sharp pin 4 (S-GND) => Arduino GND pin | Sharp pin 4 (S-GND) => Arduino GND pin | ||
− | Sharp pin 5 (Vo) => Arduino | + | Sharp pin 5 (Vo) => Arduino A4 pin |
Sharp pin 6 (Vcc) => 5V | Sharp pin 6 (Vcc) => 5V | ||
*/ | */ | ||
#include <stdlib.h> | #include <stdlib.h> | ||
− | long lastConnectionTime = 0; // last time you | + | long lastConnectionTime = 0; // last time you update to the server, in milliseconds |
− | const int postingInterval = 10000; //delay between updates | + | const int postingInterval = 10000; // delay between two updates |
− | int dustPin= | + | int dustPin = 4; |
− | int ledPower= | + | int ledPower = 4; |
− | int delayTime=280; | + | int delayTime = 280; |
− | int delayTime2=40; | + | int delayTime2 = 40; |
− | float offTime=9680; | + | float offTime = 9680; |
− | int dustVal=0; | + | int dustVal = 0; |
− | int i=0; | + | int i = 0; |
− | float ppm=0; | + | float ppm = 0; |
char s[32]; | char s[32]; | ||
float voltage = 0; | float voltage = 0; | ||
第68行: | 第70行: | ||
delay(1000); | delay(1000); | ||
− | i=0; | + | i = 0; |
ppm =0; | ppm =0; | ||
} | } | ||
void loop(){ | void loop(){ | ||
− | i=i+1; | + | i = i + 1; |
digitalWrite(ledPower,LOW); // power on the LED | digitalWrite(ledPower,LOW); // power on the LED | ||
delayMicroseconds(delayTime); | delayMicroseconds(delayTime); | ||
dustVal = analogRead(dustPin); // read the dust value | dustVal = analogRead(dustPin); // read the dust value | ||
− | ppm = ppm+dustVal; | + | ppm = ppm + dustVal; |
delayMicroseconds(delayTime2); | delayMicroseconds(delayTime2); | ||
digitalWrite(ledPower,HIGH); // turn the LED off | digitalWrite(ledPower,HIGH); // turn the LED off | ||
第98行: | 第100行: | ||
dataString += ","; | dataString += ","; | ||
dataString += dtostrf(ppmpercf, 8, 0, s); | dataString += dtostrf(ppmpercf, 8, 0, s); | ||
+ | |||
i=0; | i=0; | ||
ppm=0; | ppm=0; | ||
+ | |||
Serial.println(dataString); | Serial.println(dataString); | ||
− | + | lastConnectionTime = millis(); | |
} | } | ||
+ | |||
+ | delay(3000); | ||
} | } | ||
</source> | </source> | ||
+ | |||
+ | <br><br> | ||
+ | |||
+ | == 简化版程序 == | ||
+ | |||
+ | <source lang=cpp> | ||
+ | int dustPin=4; | ||
+ | int dustVal=0; | ||
+ | |||
+ | int ledPower=4; | ||
+ | int delayTime=280; | ||
+ | int delayTime2=40; | ||
+ | float offTime=9680; | ||
+ | void setup(){ | ||
+ | Serial.begin(9600); | ||
+ | pinMode(ledPower,OUTPUT); | ||
+ | } | ||
+ | |||
+ | void loop(){ | ||
+ | // ledPower is any digital pin on the arduino connected to Pin 3 on the sensor | ||
+ | digitalWrite(ledPower,LOW); // power on the LED | ||
+ | delayMicroseconds(delayTime); | ||
+ | dustVal=analogRead(dustPin); // read the dust value via pin 5 on the sensor | ||
+ | delayMicroseconds(delayTime2); | ||
+ | digitalWrite(ledPower,HIGH); // turn the LED off | ||
+ | delayMicroseconds(offTime); | ||
+ | |||
+ | delay(3000); | ||
+ | Serial.println(dustVal); | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | <br><br> | ||
+ | |||
+ | == 值判读 == | ||
+ | |||
+ | > https://www.airnow.gov/index.cfm?action=airnow.calculator | ||
+ | |||
+ | Air Quality Chart - Small Count Reading (0.5 micron)+ | ||
+ | |||
+ | <pre> | ||
+ | 3000 + = VERY POOR | ||
+ | 1050-3000 = POOR | ||
+ | 300-1050 = FAIR | ||
+ | 150-300 = GOOD | ||
+ | 75-150 = VERY GOOD | ||
+ | 0-75 = EXCELLENT | ||
+ | </pre> | ||
<br><br> | <br><br> | ||
第114行: | 第168行: | ||
* http://sensorapp.net/sharp-dust-sensor-and-arduino/ | * http://sensorapp.net/sharp-dust-sensor-and-arduino/ | ||
* https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf | * https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf | ||
− | |||
<br><br> | <br><br> |
2018年11月19日 (一) 19:35的最后版本
目录 |
[编辑] 1 概述
GP2Y1010 Datasheet: https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf
[编辑] 2 PIN
Sharp pin 1 (V-LED) => 5V (connected to 150ohm resister) Sharp pin 2 (LED-GND) => Arduino GND pin Sharp pin 3 (LED) => Arduino pin 2 Sharp pin 4 (S-GND) => Arduino GND pin Sharp pin 5 (Vo) => Arduino A0 pin Sharp pin 6 (Vcc) => 5V
[编辑] 3 电路
[编辑] 4 程序
/* Interface to Sharp GP2Y1010AU0F Particle Sensor Program by Christopher Nafis Written April 2012 http://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf http://sensorapp.net/?p=479 Sharp pin 1 (V-LED) => 5V (connected to 150ohm resister) Sharp pin 2 (LED-GND) => Arduino GND pin Sharp pin 3 (LED) => Arduino pin 4 Sharp pin 4 (S-GND) => Arduino GND pin Sharp pin 5 (Vo) => Arduino A4 pin Sharp pin 6 (Vcc) => 5V */ #include <stdlib.h> long lastConnectionTime = 0; // last time you update to the server, in milliseconds const int postingInterval = 10000; // delay between two updates int dustPin = 4; int ledPower = 4; int delayTime = 280; int delayTime2 = 40; float offTime = 9680; int dustVal = 0; int i = 0; float ppm = 0; char s[32]; float voltage = 0; float dustdensity = 0; float ppmpercf = 0; void setup(){ Serial.begin(9600); pinMode(ledPower,OUTPUT); delay(1000); i = 0; ppm =0; } void loop(){ i = i + 1; digitalWrite(ledPower,LOW); // power on the LED delayMicroseconds(delayTime); dustVal = analogRead(dustPin); // read the dust value ppm = ppm + dustVal; delayMicroseconds(delayTime2); digitalWrite(ledPower,HIGH); // turn the LED off delayMicroseconds(offTime); if((millis() - lastConnectionTime > postingInterval)) { voltage = ppm/i*0.0049; dustdensity = 0.17*voltage-0.1; ppmpercf = (voltage-0.0256)*120000; if (ppmpercf < 0) ppmpercf = 0; if (dustdensity < 0 ) dustdensity = 0; if (dustdensity > 0.5) dustdensity = 0.5; String dataString = ""; dataString += dtostrf(voltage, 9, 4, s); dataString += ","; dataString += dtostrf(dustdensity, 5, 2, s); dataString += ","; dataString += dtostrf(ppmpercf, 8, 0, s); i=0; ppm=0; Serial.println(dataString); lastConnectionTime = millis(); } delay(3000); }
[编辑] 5 简化版程序
int dustPin=4; int dustVal=0; int ledPower=4; int delayTime=280; int delayTime2=40; float offTime=9680; void setup(){ Serial.begin(9600); pinMode(ledPower,OUTPUT); } void loop(){ // ledPower is any digital pin on the arduino connected to Pin 3 on the sensor digitalWrite(ledPower,LOW); // power on the LED delayMicroseconds(delayTime); dustVal=analogRead(dustPin); // read the dust value via pin 5 on the sensor delayMicroseconds(delayTime2); digitalWrite(ledPower,HIGH); // turn the LED off delayMicroseconds(offTime); delay(3000); Serial.println(dustVal); }
[编辑] 6 值判读
> https://www.airnow.gov/index.cfm?action=airnow.calculator
Air Quality Chart - Small Count Reading (0.5 micron)+
3000 + = VERY POOR 1050-3000 = POOR 300-1050 = FAIR 150-300 = GOOD 75-150 = VERY GOOD 0-75 = EXCELLENT
[编辑] 7 参考
- http://www.howmuchsnow.com/arduino/airquality/
- http://sensorapp.net/sharp-dust-sensor-and-arduino/
- https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf