基于stm32的PM2.5传感器程序 GP2Y粉尘传感器
下面是我在网上翻阅资料拷贝的
淘宝上好像有
夏普光学灰尘传感器(GP2Y1010AU0F)在检测非常细的颗粒,如香烟烟雾,是特别有效的,
并且是常用的空气净化器系统。
该装置中,一个红外发光二极管和光电晶体管,对角布置成允许其检测到在空气中的灰尘反射光。
该传感器具有极低的电流消耗(最大20mA,11毫安典型的),可以搭载高达7VDC的传感器。输出的是一个模拟电压正比于所测得的粉尘浓度,敏感性为0.5V/0.1mg/m3。
电源电压:5-7V
工作温度:-10-65摄氏度
消耗电流:20mA最大
最小粒子检出值:0.8微米
灵敏度:0.5V/(0.1mg/m3)
清洁空气中电压:0.9V 典型值
工作温度:-10~65℃
存储温度:-20~80℃
使用寿命:5年
尺寸大小:46mm×30mm×17.6mm
重量大小:15g
检测原理
其原理如下图,传感器中心有个洞可以让空气自由流过,定向发射LED光,通过检测经过空气中灰尘折射过后的光线来判断灰尘的含量。
使用测试代码:
int dustPin=0;
float dustVal=0;
int ledPower=2;
int delayTime=280;
int delayTime2=40;
float offTime=9680;
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);
if (dustVal>36.455)
Serial.println((float(dustVal/1024)-0.0356)*120000*0.035);
}
测试得到的数据和空气质量对照:
3000 + = 很差
1050-3000 = 差
300-1050 = 一般
150-300 = 好
75-150 = 很好
0-75 = 非常好
通过看手册
有一个重要的关系就是输出电压和浓度的关系
在电压小于3.5v大于0.5的情况下 ,电压和浓度成一个线型比例的。
浓度N= K* V;
K=N/V.约等于0.13;
当我们用stm32的12位的ADC采集数值后先变成电压,让value*3300/4096便是电压值,然后乘以0.13便得到mg/m3了