前面几篇文章分别测试了火焰传感器、烟雾传感器(MQ-2)和温湿度传感器,对这几类传感器的使用方法和输出规律有了基本认识。这三类传感器监测的都是环境中的一些数据,包括可燃气体、火焰、温度及湿度,本文及后续相关文章想基于这三类传感器实现周期性的检测、反馈、记录及分析周围环境中的可燃气体、火焰、温度及湿度信息。
本文实现第一步功能,即设置好Arduino与火焰传感器、烟雾传感器(MQ-2)和温湿度传感器的连接关系、定义信息反馈格式、编写并测试Arduino代码。
本文使用的硬件如下图所示:Arduino UNO R3、面包板、火焰传感器、烟雾传感器(MQ-2)和温湿度传感器。
硬件连接实物图如下所示:
硬件连接完成后,还需要定义反馈数据的格式,便于上位机接收、解析和处理。这里就简单地定义如下:
温湿度(1,错误信息|0,湿度,温度);火焰(int);烟雾(int);
接着编写Arduino程序,主要是将三类传感器的处理程序合并到一起,并将结果整理为上述数据格式。详细的代码如下所示:
//温湿度
#include <dht11.h>
#define DHT11PIN 2
dht11 DHT11;
int dhtResult=0;//记录温湿度读取结果,0为正常,1为错误
String errorMsg="";
//火焰传感器
const int flameAnalogPin = A0; //定义火焰传感器接口
int flameValue=0;
//烟雾传感器
const int mqAnalogPin=A1;
int mqValue=0;
String result="";
void setup()
{
Serial.begin(9600);
}
void loop()
{
result="";
// 读取温湿度数据
int chk = DHT11.read(DHT11PIN);
dhtResult=1;
switch (chk)
{
case DHTLIB_OK:
dhtResult=0;
break;
case DHTLIB_ERROR_CHECKSUM:
errorMsg="Checksum error";
break;
case DHTLIB_ERROR_TIMEOUT:
errorMsg="Time out error";
break;
default:
errorMsg="Unknown error";
break;
}
result+=dhtResult;
result+=",";
if(dhtResult==0)
{
result+=DHT11.humidity;
result+=",";
result+=DHT11.temperature;
}
else
{
result+=errorMsg;
}
result+=";";
//读取火焰传感器
int flameValue=analogRead(flameAnalogPin);
result+=flameValue;
result+=";";
//烟雾传感器
mqValue=analogRead(mqAnalogPin);
result+=mqValue;
result+=";";
Serial.println(result);
delay(2000);
}
程序下载到Arduino后进行测试,测试结果如下所示。从下面的数据可以看出程序正常运转,当打火机打火后,火焰传感器的检测值急剧减小,其它传感器的检测值比较稳定,而当打火机的火被吹灭,打火机释放可燃气体时,烟雾传感器的检测值快速增加,此时温湿度传感器和火焰传感器则保持稳定。
后续会使用C#语言编写上位机程序接收并处理Arduino上传的检测值。
参考文献
[1]基于传感器开发套件玩转Arduino编程