使用夏普GP2Y1010AU0F灰尘传感器检测空气质量
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用夏普GP2Y1010AU0F灰尘传感器检测空气质量
夏普灰尘传感器价格较便宜,能检测出室内空气中的灰尘和烟尘含量.
检测原理
其原理如下图,传感器中心有个洞可以让空气自由流过,定向发射LED光,通过检测经过空气中灰尘折射过后的光线来判断灰尘的含量。
电路图
因为数据是通过pin 5的电压模拟信号输出的,而树莓派的引脚不支持模拟信号直接读取(需要增加数模转换芯片),所以先用Arduino来实验。
Arduino 代码
根据电路图,把Arduino和传感器连接起来:
1.Sharp pin 1 (V-LED) => 5V 串联1个150欧姆的电阻(最好在电阻一侧和GND之间再串联一个
220uf的电容)
2.Sharp pin 2 (LED-GND) => GND
3.Sharp pin 3 (LED) => Arduino PIN 2 (开关LED)
4.Sharp pin 4 (S-GND) => GND
5.Sharp pin 5 (Vo) => Arduino A0 pin (空气质量数据通过电压模拟信号输出)
6.Sharp pin 6 (Vcc) => 5V
1./*
2.Interface to Sharp GP2Y1010AU0F Particle Sensor
3.Program by Christopher Nafis
4.Written April 2012
5.
6./pic//datasheets/Sensors/gp2y1010au_e.pdf
7./pic//?p=479
8.
9.Sharp pin 1 (V-LED) => 5V (connected to 150ohm resister)
10.Sharp pin 2 (LED-GND) => Arduino GND pin
11.Sharp pin 3 (LED) => Arduino pin 2
12.Sharp pin 4 (S-GND) => Arduino GND pin
13.Sharp pin 5 (Vo) => Arduino A0 pin
14.Sharp pin 6 (Vcc) => 5V
15.*/
16.#include
17.#include
18.
19.int dustPin=0;
20.int ledPower=2;
21.int delayTime=280;
22.int delayTime2=40;
23.float offTime=9680;
24.
25.int dustVal=0;
26.int i=0;
27.float ppm=0;
28.char s[32];
29.float voltage=0;
30.float dustdensity=0;
31.float ppmpercf=0;
32.
33.void setup(){
34.Serial.begin(9600);
35. pinMode(ledPower,OUTPUT);
36.
37.// give the ethernet module time to boot up:
38. delay(1000);
39.
40. i=0;
41. ppm=0;
42.}
43.
44.void loop(){
45. i=i+1;
46. digitalWrite(ledPower,LOW);// power on the LED
47. delayMicroseconds(delayTime);
48. dustVal=analogRead(dustPin);// read the dust value
49. ppm=ppm+dustVal;
50. delayMicroseconds(delayTime2);
51. digitalWrite(ledPower,HIGH);// turn the LED off
52. delayMicroseconds(offTime);
53.
54. voltage=ppm/i*0.0049;
55. dustdensity=0.17*voltage-0.1;
56. ppmpercf=(voltage-0.0256)*120000;
57.if(ppmpercf<0)
58. ppmpercf=0;
59.if(dustdensity<0)
60. dustdensity=0;
61.if(dustdensity>0.5)
62. dustdensity=0.5;
63.String dataString="";
64. dataString+=dtostrf(voltage,9,4,s);
65. dataString+=",";
66. dataString+=dtostrf(dustdensity,5,2,s);
67. dataString+=",";
68. dataString+=dtostrf(ppmpercf,8,0,s);
69. i=0;
70. ppm=0;
71.Serial.println(dataString);
72. delay(1000);
73.}
把传感器和Ardiuno连接好后,可以连续打印出传感器的输出电压值。输出电压大小和灰尘含量的曲线入下图:
通过电压的波形还可以判断是烟还是尘呢…