GP2Y1010AU0F灰尘传感器在STM32平台下使用夏普GP2Y1010AU0F灰尘传感器测量PM2.5空气污染指数中已经详细介绍过,本文使用Arduino连接GP2Y1010AU0F灰尘传感器,打造一个低成本的PM2.5测量仪,实时检测空气质量。以下是教程。
一、GP2Y1010AU0F灰尘传感器原理介绍
本文再详细介绍下这个传感器的测量原理。
这是传感器内部电路图
再看下脉冲波形:
这个表示传感器工作时需要一个驱动电平波,时间周期为10ms,其中低电平占时0.32ms(是低电平,没有写错)。
再看看电压取样脉冲:
根据上图可以得到传感器采样的时机,即要在低电平持续0.28ms后,马上取样(这时脉冲的高度最高,为最准确的输出值)。因为低电平长0.32ms,所以采样后再保持低电平0.04ms,然后将电平拉到高电平,持续9.68ms后完成一个工作周期(因为前文说过,一个工作周期为10ms)。
再看下传感器输出电压和粉尘浓度的关系。
选取电压和浓度关系图上斜线的两点,(0,0.6)、(0.4,3),根据“两点式”得到,浓度转化公式为:
浓度=[传感器输出模拟电压 * 0.1667 - 0.1] * 1000;
二、灰尘浓度与PM2.5指数转换
首先要说的是,PM2.5即细颗粒物是指直径在2.5微米以下的颗粒物,能长时间的悬浮在空气中。而夏普的GP2Y1010AU0F灰尘传感器只是用于检测特别细微的颗粒,如香烟颗粒、细微灰尘,并不能准确测量PM2.5数值,仅仅作为一个参考。
但是这里还将其对照中国的PM2.5指数标准进行转换。
首先看下PM2.5标准。
所以,我们通过传感器获得灰尘浓度后,按照PM2.5指数对应的浓度进行相应转换即可。参考来源:PM2.5指数的中美标准差异
三、传感器控制原理
传感器原理图:
从图中可以看到:
传感器的3号管脚要接单片机的数字输出脚。
当LED=0的时候,传感器内部的PNP三极管导通,红外光二极管发光。
当LED=1的时候,传感器内部的PNP三极管截止,红外光二极管停止发光
Vo需要接到单片机的ADC引脚,测试Vo的电压,就可以根据电压和灰尘浓度的比例图,得到灰尘浓度。
四、GP2Y1010AU0F灰尘传感器与Arduino连接
传感器和Arduino硬件连接:
Sharp pin 1 (V-LED) =>连接在 150欧姆电阻 和 220uf电容的中间
Sharp pin 2 (LED-GND) => GND 接地
Sharp pin 3 (LED) => Arduino PIN 2 (开关LED)
Sharp pin 4 (S-GND) => GND 接地
Sharp pin 5 (Vo) => Arduino A0 pin (空气质量数据通过电压模拟信号输出)
Sharp pin 6 (Vcc) => 5V
实物图:
五、Arduino程序
代码如下:
int dustPin=0; int ledPower=2; int delayTime=280; int delayTime2=40; float offTime=9680; float dustVal=0; float dustVot=0; float dustDensity=0; int Pm2_5 = 0; void setup(){ Serial.begin(9600); pinMode(ledPower,OUTPUT); pinMode(dustPin, INPUT); } void loop(){ // ledPower is any digital pin on the arduino connected to Pin 3 on the sensor digitalWrite(ledPower,LOW); delayMicroseconds(delayTime); dustVal=analogRead(dustPin); delayMicroseconds(delayTime2); digitalWrite(ledPower,HIGH); delayMicroseconds(offTime); delay(1000); // 将ADC输出值转换为模拟电压值 dustVot = dustVal*0.0049; /* * 将采集到的电压值转换为粉尘浓度 * 公式:浓度=[传感器输出模拟电压 * 0.1667 - 0.1] * 1000; * 公式根据根据官方规格书中的《Fig. 3 Output Voltage vs. Dust Density》图表计算得出 * 公式未经过校准,仅为理论计算值 * 得出粉尘的浓度,单位为微克每立方米 */ dustDensity = ((dustVot*0.1667)-0.1)*1000; // 将粉尘的浓度转换为PM2.5指数 // 参考标准为PM2.5中国标准 if (dustDensity < 35) { Pm2_5 = dustDensity * 1.4286; } else if (dustDensity < 150) { Pm2_5 = (dustDensity - 35)* 1.25 + 50 ; } else if (dustDensity < 250) { Pm2_5 = (dustDensity - 150)* 1 + 200 ; } else Pm2_5 = (dustDensity - 250)* 0.8 + 300 ; Serial.println(Pm2_5); }
将程序编译后上传,打开串口,即可看到测量到的PM2.5数值。
六、参考资料
1.规格书:https://www.sparkfun.com/datasheets/Sensors/gp2y1010au_e.pdf
2.夏普GP2Y1010AU0F灰尘传感器规格书本地免费下载:夏普原版灰尘传感器GP2yY1010au规格书gp2y1010au_e
3.Arduino ADC转换(将测量值转换为模拟电压值):https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/
4.STM32平台下使用夏普GP2Y1010AU0F灰尘传感器测量PM2.5空气污染指数
5.PM2.5指数分级:PM2.5指数的中美标准差异
6.传感器说明书:灰尘传感器GP2Y1010AU0F使用说明.pdf
原创文章,转载请注明: 转载自科技爱好者博客
本文链接地址: Arduino制作PM2.5测量仪(使用GP2Y1010AU0F灰尘传感器) (https://www.tujing.site/4536)
如果博客对您有帮助,请给我 赞助