物联网
使用 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();
}
全部0条评论
快来发表一下你的评论吧 !