【Arduino教程】GP2Y1014AU粉尘传感器原理分析及使用

 

一.概述

GP2Y1014AU粉尘传感器是夏普开发的一款光学灰尘监测传感器模块,在其中间有一个大洞,空气可以自由流过,它里面对角位置放着红外发光二极管和光电晶体管,红外发光二极管定向发送红外,当空气中有微粒阻碍红外时,光电晶体管接收到的红外产生变化,所以信号输出引脚电压发送变化。其属性值如下;

供电电压;5-7V

工作温度;-10-65℃

监测最小直径;0.8μm

灵敏度;0.5V/(0.1mg/m3)灰尘浓度每变化0.1mg/m3,输出电压变化0.5V。

二.硬件连接

需要连接1个150欧的电阻,和1个220μF的电容,具体位置如图所示。(实物图片是直接在淘宝上随便找的一家)

三.程序编写

根据产品说明书,我们可以得到输出电压Vout和灰尘浓度M的表达式(供电电压5V情况下);M=(5Vout-3)/29*1000 单位为;μg/m3。

紧接着根据说明书中的对LED的时序要求

检测周期为10ms,红外从发射到接收需要一定时间,那么在什么时候检测才是有效的呢?这个要看说明书中的输出信号图,如下图所示,将采样时间设置为0.28ms可以得到一个稳定值。

故程序如下;

#define measurePin A0//输出引脚连接模拟口A0
#define ledPin 9 //LED引脚连接数字口9
unsigned int samplingTime = 280;//根据前面分析采样时间为280,所以这里为280
unsigned int deltaTime = 40;//测量完后脉冲需要继续保持,保持时间为320-280=40
unsigned int sleepTime = 9680;//LED脉冲周期为10毫秒,故此处为10000-320=9680
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;

void setup() {
    pinMode(ledPin, OUTPUT);
    pinMode(A0, INPUT);
    Serial.begin(9600);
}
void loop() {
    digitalWrite(ledPin, LOW);

    delayMicroseconds(samplingTime);
    voMeasured = analogRead(measurePin);

    delayMicroseconds(deltaTime);
    digitalWrite(ledPin, HIGH);

    delayMicroseconds(sleepTime);
    calcVoltage = voMeasured * (5.0 / 1024);
    dustDensity = 5000*calcVoltage/29 - 3000/29;

    if (dustDensity < 0) {
        dustDensity = 0.00;
    }
    Serial.println(dustDensity);
    delay(2 * 1000);
}

猜你喜欢

转载自blog.csdn.net/WALRE_HUNTER_RICO/article/details/85284837