制作一个基于物联网的尘埃密度监测器

物联网

775人已加入

描述

  使用 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

#include

#include

根据传感器数据表,首先必须打开 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
#include
#include

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();
}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分