ESP8266-Arduino编程实例-GP2Y1010AU0F灰尘传感器驱动

GP2Y1010AU0F灰尘传感器驱动

1、GP2Y1010AU0F介绍

夏普的 GP2Y1010AU0F 是一种光学空气质量传感器,旨在检测灰尘颗粒。 红外发射二极管和光电晶体管对角排列在该装置中,使其能够检测空气中灰尘的反射光。 它在检测香烟烟雾等非常细小的颗粒方面特别有效,通常用于空气净化器系统。

在这里插入图片描述

GP2Y1010AU0F具有如下特性:

  • 低电流消耗(最大值:20mA)
  • 典型工作电压:4.5V 至 5.5V(最大值:7V)
  • 仅通过一个脉冲的光度测定即可检测到灰尘的存在
  • 能够区分烟雾和室内灰尘

GP2Y1010AU0F的内部功能框图如下:

在这里插入图片描述

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • GP2Y1010AU0F传感器模块一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

GP2Y1010AU0F的LED脉冲驱动需要电阻R1=150Ω和电容C1=220uF。 请使用具有上述常量的那些。 没有这些组件,设备将无法工作。

硬件接线如下:

在这里插入图片描述

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

4、代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// 传感器输出引脚
int dustPin = A0;
// 传感器LED引脚
int ledPin = D2;

float voltsMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;

void setup()
{
Serial.begin(57600);
pinMode(ledPin,OUTPUT);
}


void loop()
{
digitalWrite(ledPin,LOW);
delayMicroseconds(280);

// 读取传感器值
voltsMeasured = analogRead(dustPin);

delayMicroseconds(40);
digitalWrite(ledPin,HIGH);
delayMicroseconds(9680);

// 转换值
calcVoltage = voltsMeasured \* (3.3 / 1024.0);
dustDensity = 0.17 \* calcVoltage - 0.1;
Serial.println("GP2Y1010AU0F readings");
Serial.print("Raw Signal Value = ");
Serial.println(voltsMeasured);
Serial.print("Voltage = ");
Serial.println(calcVoltage);
Serial.print("Dust Density = ");
Serial.println(dustDensity); // mg/m3
Serial.println("");
delay(1000);
}

文章来源: https://iotsmart.blog.csdn.net/article/details/126314826