本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于ESP8266的长期粉尘监测系统

发布时间:2022-09-15
分享到:

基于ESP8266的长期粉尘监测系统

发布时间:2022-09-15
分享到:

使用 Blynk IOT 长时间监测周围的灰尘和大颗粒 (>0.5µm) 并绘制数据以供进一步研究。

在这个项目中,我制作了一个基于物联网的尘埃密度监测器,它可以测量周围的尘埃并通过互联网发送数据,我可以以图形方式监测一个地方尘埃密度的长期值。这可以帮助制定未来的项目,如改善空气污染和许多其他项目。

关于传感器(夏普 gp2y1014au0f)

夏普 gp2y1014au0f 是一款使用 IR LED 的微粒传感器,当空气中的微粒进入传感器时,光线会向光电探测器反弹。这种技术称为激光散射。散射(反弹)光的强度取决于灰尘颗粒。尘埃颗粒越多,弹跳或散射就越严重。光检测器上的这种光强度变化会改变传感器的输出电压。我们可以读取输出电压并测量空气中的灰尘密度。

我将传感器作为套件购买。该套件包括:

  • 1x GP2Y1014AU0F 传感器
  • 1 x 6 针尾纤电缆,用于轻松连接传感器
  • 1 x 150 欧姆电阻
  • 1 x 220uF 电容

因为它有 6 个连接器,我必须添加电阻器和电容器,所以我用它制作了一个模块。

制作项目
这个项目基于物联网,所以我使用 Arduino UNO 微控制器和 ESP8266 (ESP01) Wi-Fi 模块来连接互联网。我还使用 Blynk(物联网平台)应用程序来可视化 Arduino 发送的数据。

Arduino 和 ESP01

要将 Wi-Fi 添加到 Arduino UNO,我连接了一个 ESP-01 模块。在此之前,您可能需要更新 ESP8266 模块的固件。

连接:

  • Arduino RX - ESP01 TX
  • Arduino TX - ESP01 RX
  • Arduino 3.3V - ESP01 VCC 和芯片选择引脚
  • Arduino GND - ESP01 GND

Arduino 和 GP2Y1014AU0F

GP2Y1014AU0F中的红外发射器必须通过 Arduino 的脉冲进行控制才能运行。传感器的输出是模拟信号,所以它应该连接到 Arduino 的模拟引脚。所以我相应地连接传感器和Arduino。

连接:

  • Arduino D7 - 传感器 LED
  • Arduino A5 - 传感器 VOUT

编码
首先,我们必须使用一些库

  • #include <ESP8266_Lib.h>
  • #include <BlynkSimpleShieldEsp8266.h>
  • #include <SimpleTimer.h>

根据传感器数据表,首先必须打开 IR LED 并等待 280µs 才能读取读数。然后从模拟引脚读取电压值。这个操作大约需要 50µs,所以给一个 50µs 的延迟,然后关闭 IR led。根据数据表,IR LED 应每 10ms 开启和关闭一次脉冲,因此它必须等待剩余的 (10000-280-50)µs = 9670µs。

 digitalWrite(led,LOW);
 delayMicroseconds(280);
 SensorOut = analogRead(SensorPin);
 delayMicroseconds(50);
 digitalWrite(led,HIGH);
 delayMicroseconds(9670);

然后要计算灰尘密度,我们需要数据表中的一些值,K 是传感器的灵敏度,它是 0.5V/100µgm/m^3。Voltage_noDust是空气中没有灰尘时的电压。这个电压从0.1V-1V变化。您可能需要调整此值。

之后使用一些简单的计算,我们可以测量灰尘密度

 SensorVo = SensorOut*(5.0/1024);
 Dust = (SensorVo-Voltage_noDust)*100/K;

然后使用 Blynk.virtualWrite(V1,Dust); 函数将灰尘密度值发送到云端。该值每秒发送一次。

其余代码由注释解释。

Blynk 应用程序设置
按照步骤

上传代码后检查一切是否正常。

之后您可以从应用程序中导出 Excel 数据,并将其发送到您的电子邮件地址,然后使用该数据进行进一步分析。

Dust_density monitor:

#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <SimpleTimer.h>

char auth[] = "fI1Hhyw20XUE7WmUhcJhJ_QAFHVYkPxQ";  //The authentication token send to your email 
//Your WIFI credentials
char ssid[] = "ABID";                             
char pass[] = "8901234567";

#define ESP8266_BAUD 115200    
ESP8266 wifi(&Serial);

int SensorPin = A5;
int led = 7;  
float SensorOut = 0;
float SensorVo = 0;
float Dust = 0;
float Voltage_noDust = 0.12;      //calibrate by changing this
float K = 0.5;                    //Sensitivity from the datasheet 0.5V/ugm/m^3
SimpleTimer timer;

void sendSensor(){  
  digitalWrite(led,LOW);                     //turning on the led
  delayMicroseconds(280);                    //wait for 0.28ms
  SensorOut = analogRead(SensorPin);         //read the sensor output voltage
  delayMicroseconds(50);                     //wait for 50us
  digitalWrite(led,HIGH);                    //turning off the led
  delayMicroseconds(9670);                   //wait for (10000-280-50)=9670us
  SensorVo = SensorOut*(5.0/1024);           //calculating sensor output voltage
  Dust = (SensorVo-Voltage_noDust)*100/K;    //calculating Dust density(ugm)/m^3
 
  if ( Dust < 0)
  {
    Dust = 0.00;
  }
  Blynk.virtualWrite(V1,Dust);  //sending data to the cloud
}

void setup()
{
 pinMode(led,OUTPUT);
 Serial.begin(115200);
 delay(10);
 Serial.begin(ESP8266_BAUD);
 delay(10);
 Blynk.begin(auth, wifi, ssid, pass);
 timer.setInterval(1000L, sendSensor);     //set timer interval of 1s
}

void loop()
{
 Blynk.run();
 timer.run();
}

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:Abid hossain,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论