亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

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

室内大气监测系统

发布时间:2021-05-07
分享到:

室内大气监测系统

发布时间:2021-05-07
分享到:

室内大气监测系统是一个由可变传感器和控制板组成的系统,用于监测多个房间/位置的温度、湿度和空气质量。信息管理系统的目标是解决缺乏房间当前状态信息的问题,并以非侵入性的方式提供这些信息。该系统包含一个钟面,以及在空气中有危险污染时发出铃声的能力,类似于火警,这使得其成为一种多功能设备,真正提高了它的新颖性。

创建三个版本的温度、湿度和空气质量传感器系统,每个传感器系统都放置在房子的不同房间中,并显示LED灯。当空气中没有有毒气体的威胁时,传感器系统将相互独立工作,并通过LED灯显示房间的温度和湿度。当其中一个传感器系统检测到有毒气体的威胁时,它们都会进行通信,并开始闪烁所有红色的发光二极管,以通知所有房间有危险。

硬件组件:

传感器板电路图:

 

传感器板布局图:

代码:

1)传感器板代码(将数据传输至接收器代码和板)

//物联网项目I.A.M.S室内空气质量监测仪
//Nate Hardy - 2021 

#include <Adafruit_DHT.h>   //包括Afruit DHT库

#define DHTPIN 5            //DHT11传感器针脚
#define DHTTYPE DHT11        //设置正确的DHT传感器类型

DHT dht(DHTPIN, DHTTYPE);   //使用指定的DHT销和类型使DHT传感器小型化

const int TMP36Pin = A1;    //TMP-36温度传感器引脚
const int MQ2 = A5;          //MQ-2 CO2传感器引脚

double voltage, TMP36F, TMP36C, h, t, f, MQ2value;
int reading = 0;

void setup() {
    //启动串行并打印消息!
    Serial.begin(9600); 
    Serial.println("IOT PROJECT IAMS Serial Test OKAY");
    
    pinMode(TMP36Pin, INPUT);   //在输入模式下启动TMP36的引脚
    pinMode(MQ2, INPUT);        //在输入模式下启动MQ-2的引脚
    
    dht.begin(); //Initilize the DHT sensor
    
    //启动Paricle.io变量
    
    Particle.variable("DHT-11 in degF", f);
    Particle.variable("DHT-11 in degC", t);
    Particle.variable("DHT-11 in %h", h);
    
    Particle.variable("TMP36 in degF", TMP36F);
    Particle.variable("TMP36 in degC", TMP36C);
    Particle.variable("TMP36 volts", voltage);
    
    Particle.variable("MQ-2 Data", reading);
}

void loop() {
    delay(2000); // 在测量之间等待几秒钟。
    
    MQ2value = analogRead(MQ2);         //从MQ-2传感器读取数据
    reading = analogRead(TMP36Pin);  //从TMP36读取数据

//转换来自TMP36的数据
    voltage = (reading * 3.3) / 4095.0;     //将数据转换为10mv/deg
    TMP36C = (voltage - 0.5) * 100.0;       //计算degC值
    TMP36F = (TMP36C * (9/5) ) + 32.0;      //根据温度梯度值计算温度梯度

//读取温度或湿度大约需要250毫秒!
//传感器读数也可能长达2秒(这是一个非常慢的传感器)
    h = dht.getHumidity();      // 读取温度
    t = dht.getTempCelcius();   // 读取温度为℃
    f = dht.getTempFarenheit(); // 读取温度为℉

// 检查是否有读取失败,并提前退出(重试)。
    if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println("Failed to read from DHT sensor!");
        //返回;
    }
    
/*  ==============================================
                发送云数据
    ============================================== */
    Particle.publish("DHT-11 in degF", String(f));
    Particle.publish("DHT-11 in %h", String(h));
    
    Particle.publish("TMP36 in degF", String(TMP36F));
   
    Particle.publish("MQ-2 Data", String(MQ2value));
    
/*  ==============================================
               发送串行数据
    ============================================== */
//MQ-2传感器数据
    Serial.println("MQ-2 DATA");
    Serial.println(MQ2value);
    Serial.println("");
    
//TMP-36 传感器数据
    Serial.println("TMP-36 DATA");
    Serial.print("Voltage: ");
    Serial.println(voltage);
    
    Serial.print("degC");
    Serial.println(TMP36C);
    
    Serial.print("degF");
    Serial.print(TMP36F);

//DHT11 传感器数据
    
    Serial.println("Humid: "); 
    Serial.print(h);
    Serial.print("% - ");
    Serial.print("Temp: "); 
    Serial.print(t);
    Serial.print("*C ");
    Serial.print(f);
    Serial.print("*F ");
    
// 计算热指数
//必须以华氏温度发送!
/*    float hi = dht.getHeatIndex();
    float dp = dht.getDewPoint();
    float k = dht.getTempKelvin(); */

    
/*    Serial.print(k);
    Serial.print("*K - ");
    Serial.print("DewP: ");
    Serial.print(dp);
    Serial.print("*C - ");
    Serial.print("HeatI: ");
    Serial.print(hi);
    Serial.println("*C");
    Serial.println(Time.timeStr()); */
}

2)接收器板代码(它根据传感器板和程序发送的数据调整发光二极管)

//物联网项目IAMS接收器代码
//Nate Hardy - 2021

const int redP = 2;          //RGB LED红色引脚
const int greenP = 3;       //RGB LED绿色引脚
const int blueP = 4;        //RGB LED蓝色的引脚

const int baseTemp = 70;    //将测量温度与基础温度进行比较
const int baseHumid = 30;   //将测量值与基准湿度进行比较
const int goodCO2 = 1350;   //CO2水平被视为“安全”

double temp;                                            //计算温度值
int DHT11TempVar, DHT11HumidVar, TMP36temp, MQ2Var;     //其他氩气传感器值的变量
int red, green, blue;                                   //发送到LED的红色、绿色和蓝色值

void DHT11temp(const char *event, const char *data) {
    DHT11TempVar = atof(data);  //从DHT-11温度读取云数据
}

void DHT11humid(const char *event, const char *data) {
    DHT11HumidVar = atof(data); //从DHT-11卫星读取云数据
}

void TMP36(const char *event, const char *data) {
    TMP36temp = atof(data);     //从TMP-36读取云数据 
}

void MQ2(const char *event, const char *data) {
    MQ2Var = atof(data);        //从MQ-2传感器读取云数据
}

void RGBWrite(int redV, int greenV, int blueV) {
    analogWrite(redP, redV);                            //函数将数据写入RGB LED
    analogWrite(greenP, greenV);
    analogWrite(blueP, blueV);
}

void setup() {
    Serial.begin(9600);                                 //串行设置和自检
    Serial.println("Serial Test OK");
    
    pinMode(redP, OUTPUT);                              //RGB LED的设置引脚模式
    pinMode(greenP, OUTPUT);
    pinMode(blueP, OUTPUT);
    
    red = 100;                                          //初始化不同颜色的值
    green = 100;
    blue = 100;
    
    Particle.subscribe("DHT-11 in degF", DHT11temp);    //订阅其他服务器输出的数据
    Particle.subscribe("DHT-11 in %h", DHT11humid);
    
    Particle.subscribe("TMP36 in degF", TMP36);
   
    Particle.subscribe("MQ-2 Data", MQ2);
    
}

void loop() {
    delay(2000);
    
    Serial.println(DHT11TempVar);                       //打印接收到的串行数据
    Serial.println(DHT11HumidVar);
    Serial.println(TMP36temp);
    Serial.println(MQ2Var);
    
    temp = (DHT11TempVar + TMP36temp)/2;                //两个传感器之间的平均温度
    RGBWrite(0,0,0);
    
    if (MQ2Var >= goodCO2) {
        RGBWrite(255,0,0);                           
    } else if (temp >= baseTemp + 5) {
        RGBWrite(0,0,255);
    } else if (temp <= baseTemp - 5 ) {                        
        RGBWrite(0,0,255);   
    } else if (DHT11HumidVar <= baseHumid - 10) {
        RGBWrite(255,255,0);
    } else if (DHT11HumidVar >= baseHumid + 10) {
        RGBWrite(0,255,255);
    } else {
        RGBWrite(0,0,0);
    }  
}

项目演示:

ThingSpeak的实时数据:点击查看

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论