Please or Register to create posts and topics.

空气质量监测仪

DIY Arduino空气质量监测器可以测量周围的空气质量,还可以显示房间的温度和湿度。

应用和平台

Arduino IDE

项目介绍

M 任何时候,即使晚上睡个好觉,我们从床上醒来时也会感到非常虚弱。这种情况有时会发生,因为晚上封闭房间的空气质量很差。

这是一款低成本的空气质量监测仪,可以使用MQ135空气质量传感器监测房间的空气质量。它还使用 DHT11 测量室温和湿度,并在 OLED 显示屏上显示数据。这是一个有趣的小项目,也很有帮助。

布线

连接:

  1. Arduino D2 到 DHT11 输出
  2. Arduino A0 转 MQ135 Ao
  3. Arduino A5 转 Oled SCL
  4. Arduino A4 转 Oled SDA

编码

在编码部分,您需要安装一些库来运行代码

  1. Adafruit_SSD1306.h
  2. Adafruit_GFX.h
  3. DHT.h的

代码中有两个主要函数 sendSensor() air_sensor()

air_sensor() 函数中,它从空气质量传感器 gasLevel = analogRead(sensor) 中读取模拟值;并定义相应 gasLevel 的质量。sendSensor() 函数使用 dht 库测量温度和湿度数据 ,并将其显示在 oled 上。

air_sensor() 函数中,您可能需要庆祝传感器的 gasLevel 值。对于该电源,将 5V 电压连接到 mq135 传感器,并在使用前将其置于清洁环境中至少 24 小时。这种传感器(燃烧)是必要的,因为传感器会受到污染。因此,燃烧有助于它自我清洁并提供更准确的结果。

然后将传感器连接到您的电路并带着它走出去,并为您的位置调整正确的值。

代码

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include  <Adafruit_SSD1306.h>
#include <Fonts/FreeSans9pt7b.h>
#include <Fonts/FreeMonoOblique9pt7b.h>
#include  <DHT.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define  SCREEN_HEIGHT 64 // OLED display height, in pixels

#define OLED_RESET     4  // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH,  SCREEN_HEIGHT, &Wire, OLED_RESET);

#define sensor    A0 
#define DHTPIN  2          // Digital pin 2
#define DHTTYPE DHT11     // DHT 11

int gasLevel  = 0;         //int variable for gas level
String quality =""; 
DHT dht(DHTPIN,  DHTTYPE);



void sendSensor()
{
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
  Serial.println("Failed  to read from DHT sensor!");
    return;
  }
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setFont();
  display.setCursor(0, 43);
  display.println("Temp  :");
  display.setCursor(80, 43);
  display.println(t);
  display.setCursor(114, 43);
  display.println("C");
  display.setCursor(0,  56);
  display.println("RH    :");
  display.setCursor(80, 56);
  display.println(h);
  display.setCursor(114, 56);
  display.println("%");
}

void air_sensor()
{
  gasLevel = analogRead(sensor);

  if(gasLevel<181){
    quality = "  GOOD!";
  }
  else if (gasLevel >181 && gasLevel<225){
    quality =  "  Poor!";
  }
  else if (gasLevel >225 && gasLevel<300){
    quality  = "Very bad!";
  }
    else if (gasLevel >300 && gasLevel<350){
    quality  = "ur dead!";
  }
    else{
    quality = " Toxic";   
}
  
  display.setTextColor(WHITE);
  display.setTextSize(1);  
  display.setCursor(1,5);
  display.setFont();
  display.println("Air Quality:");
  display.setTextSize(1);
  display.setCursor(20,23);
  display.setFont(&FreeMonoOblique9pt7b);
  display.println(quality);  
}

void setup() {
  Serial.begin(9600);
  pinMode(sensor,INPUT);
  dht.begin();
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) { // Address  0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
}
  display.clearDisplay();
  display.setTextColor(WHITE);
  
  display.setTextSize(2);
  display.setCursor(50, 0);
  display.println("Air");
  display.setTextSize(1);
  display.setCursor(23, 20);
  display.println("Qulaity monitor");
  display.display();
  delay(1200);
  display.clearDisplay();
  
  display.setTextSize(2);
  display.setCursor(20, 20);
  display.println("BY Abid");
  display.display();
  delay(1000);
  display.clearDisplay();    
}

void loop() {
display.clearDisplay();
air_sensor();
sendSensor();
display.display();  
}