空气分析仪,使用几乎所有类型的MQ传感器

可以测量 CO、CO2、H2、CH4、NH3、酒精、Bangene、丙酮、己烷、甲苯、烟雾和可燃气体浓度的空气监测仪。

工具和机器

面包板,830 个连接点

应用和平台

Arduino IDE

项目介绍

很长一段时间以来,我都希望仅使用低成本的 MQ 传感器来监测空气中的每个组件。因此,我订购了一套 9 个 MQ 传感器并制作了这个项目,其中我只能使用一些 MQ 传感器来测量空气中多种气体的浓度。这种传感器不是那么准确,需要大量校准,但它们是目前最便宜的气体传感器。您可以找到一套九个气体传感器,只需 6 到 7 美元。在我的项目中,我使用了其中的 6 种并测量了 12 种气体的气体浓度。


等!!!在开始任何工作之前,您应该为传感器供电并让它燃烧至少24小时。这一步非常重要,因为MQ感器会受到污染,燃烧有助于它们自我清洁。您必须用5V为传感器供电并将它们放在干净的地方。
MQ传感器输出的模拟电压随某些选定气体的浓度而变化。因此,我们可以通过Arduino ADC读取模拟值线到空气中的气体浓度。
我使用6个MQ传感器(MQ3、MQ4、MQ7、MQ8、MQ9和MQ135)

传感器的用途

MQ3 用于测量酒精、苯和己烷

MQ4 用于测量甲烷和烟雾

MQ135 用于测量 CO2、NH4、甲苯和丙酮

用于测量一氧化碳的 MQ7

用于测量 H2 的 MQ8

用于测量可燃气体的MQ9

连接

duino与传感器连接,如下所示-

  1. MQ3 Ao – Arduino A0
  2. MQ4 Ao – Arduino A1
  3. MQ135 Ao – Arduino A2
  4. MQ7 Ao – Arduino A3
  5. MQ8 Ao – Arduino A6
  6. MQ9 Ao – Arduino A7

连接Arduino和LCD,如下所示-

  1. Arduino A4 – LCD SDA
  2. Arduino A5 – LCD SCL

现在是最大的挑战!!

连接硬件并读取模拟值很容易,但最困难的是校准传感器并计算特定气体的ppm(百万分之一)值。在互联网上搜索了很长时间后,我找到了这些传感器的库。将计算结果与传感器的数据表进行比较,似乎很有希望。

在这里,我找到了一篇文章,解释了 MQ 传感器的工作和计算 – $ 了解气体传感器 $ .

我使用该库并编写代码,将其中六个传感器与Arduino nano一起使用,并显示空气中的不同气体浓度。

你可以在这里找到库 – $ MQUnifiedsensor 库 $

对于编码,首先,我包括 LiquidCrystal_I2C 和 MQUnifiedsensor 库,然后定义传感器的显示参数和输入 PIN。然后在设置部分,我初始化显示器和传感器,并为每个传感器设置 R0 值。您必须校准传感器才能找到此 R0 值。为此,请取消对设置功能中的某个部分的注释,然后将代码上传到连接预烧录传感器的Arduino。然后,您将在串行监视器中找到每个传感器的 R0 值。记下这些值并在设置函数中更改它们。建议在干净的环境中校准一次传感器并设置 R0 值。要取消注释的部分在代码中指示。

在循环函数中,我为不同气体的指数方程设置了 A 和 B 值。这里的 A 和 B 值是 PPM = A*ratio^B。对于不同传感器中的不同气体,这些值是不同的。

之后,我在一页上按两个值显示 LCD 上的气体浓度。每页之间有 3 秒的延迟。

该项目的视频剪辑

代码

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>


#define  LCD_I2C_ADDRESS 0x3f 
#define LCD_DISP_COLS   16
#define LCD_DISP_ROWS   2

#include  <MQUnifiedsensor.h>

#define         Board                   ("Arduino NANO")
#define         Pin3                     (A0)  //Analog input 0 of your arduino
#define         Pin4                     (A1)  //Analog input 1 of your arduino
#define         Pin135                   (A2)  //Analog input 2 of your arduino
#define         Pin7                     (A3)  //Analog input 3 of your arduino
#define         Pin8                     (A6)  //Analog input 6 of your arduino
#define         Pin9                     (A7)  //Analog input 7 of your arduino

LiquidCrystal_I2C  lcd( LCD_I2C_ADDRESS, LCD_DISP_COLS, LCD_DISP_ROWS );


#define         RatioMQ3CleanAir          (60) //RS / R0 = 60 ppm 
#define         RatioMQ4CleanAir          (4.4)  //RS / R0 = 4.4 ppm 
#define         RatioMQ135CleanAir        (3.6) //RS / R0  = 10 ppm 
#define         RatioMQ7CleanAir          (27.5) //RS / R0 = 27.5 ppm  
#define         RatioMQ8CleanAir          (70) //RS / R0 = 70 ppm   
#define         RatioMQ9CleanAir          (9.6) //RS / R0 = 9.6 ppm 
#define         ADC_Bit_Resolution        (10) // 10 bit ADC 
#define         Voltage_Resolution        (5) //  Volt resolution to calc the voltage
#define         Type                      ("Arduino  NANO") //Board used
//Declare Sensor
MQUnifiedsensor MQ3(Board, Voltage_Resolution,  ADC_Bit_Resolution, Pin3, Type);
MQUnifiedsensor MQ4(Board, Voltage_Resolution,  ADC_Bit_Resolution, Pin4, Type);
MQUnifiedsensor MQ135(Board, Voltage_Resolution,  ADC_Bit_Resolution, Pin135, Type);
MQUnifiedsensor MQ7(Board, Voltage_Resolution,  ADC_Bit_Resolution, Pin7, Type);
MQUnifiedsensor MQ8(Board, Voltage_Resolution,  ADC_Bit_Resolution, Pin8, Type);
MQUnifiedsensor MQ9(Board, Voltage_Resolution,  ADC_Bit_Resolution, Pin9, Type);


void setup() {
  Serial.begin(9600);
  lcd.begin();

  lcd.backlight();
                 
  lcd.setCursor  (0,0);                  
  lcd.print("                ");
  lcd.setCursor  (0,1);
  lcd.print("                ");
  lcd.setCursor (0,0);
  lcd.print("   Air");
  lcd.setCursor (0,1);
  lcd.print("    Analyzer");
  delay(1000);
  lcd.setCursor (12,1);
  lcd.print(".");
  delay(1000);
  lcd.setCursor  (13,1);
  lcd.print(".");
  delay(1000);
  lcd.setCursor (14,1);
  lcd.print(".");
  delay(1000);
  lcd.setCursor (15,1);
  lcd.print(".");
  delay(1000);                         

  MQ3.init();
  MQ3.setRegressionMethod(1);  //_PPM =  a*ratio^b
  MQ3.setR0(0.45);
  MQ4.init();
  MQ4.setRegressionMethod(1);  //_PPM =  a*ratio^b
  MQ4.setR0(14.23);
  MQ135.init();
  MQ135.setRegressionMethod(1);  //_PPM =  a*ratio^b
  MQ135.setR0(9.03);
  MQ7.init();
  MQ7.setRegressionMethod(1);  //_PPM =  a*ratio^b
  MQ7.setR0(5.90);
  MQ8.init();
  MQ8.setRegressionMethod(1);  //_PPM =  a*ratio^b
  MQ8.setR0(0.91);
  MQ9.init();
  MQ9.setRegressionMethod(1);  //_PPM =  a*ratio^b
  MQ9.setR0(13.93);



//While calibrating Your  sensor Uncomment this calibration portion and calibrate for R0.
  /*****************************  MQ CAlibration ********************************************
  Serial.print("Calibrating  please wait.");
  float  MQ3calcR0 = 0,
         MQ4calcR0 = 0,
         MQ135calcR0  = 0,
         MQ7calcR0 = 0,
         MQ8calcR0 = 0,
         MQ9calcR0  = 0;
  for (int i = 1; i <= 10; i ++)
  {
    //Update the voltage lectures
    MQ3.update();
    MQ4.update();
    MQ135.update();
    MQ7.update();
    MQ8.update();
    MQ9.update();

    MQ3calcR0 += MQ3.calibrate(RatioMQ3CleanAir);
    MQ4calcR0 += MQ4.calibrate(RatioMQ4CleanAir);
    MQ135calcR0 += MQ135.calibrate(RatioMQ135CleanAir);
    MQ7calcR0 += MQ7.calibrate(RatioMQ7CleanAir);
    MQ8calcR0 += MQ8.calibrate(RatioMQ8CleanAir);
    MQ9calcR0 += MQ9.calibrate(RatioMQ9CleanAir);

    Serial.print(".");
  }
  MQ3.setR0(MQ3calcR0 / 10);
  MQ4.setR0(MQ4calcR0 / 10);
  MQ135.setR0(MQ135calcR0  / 10);
  MQ7.setR0(MQ7calcR0 / 10);
  MQ8.setR0(MQ8calcR0 / 10);
  MQ9.setR0(MQ9calcR0  / 10);
  Serial.println("  done!.");

  Serial.print("(MQ3 - MQ9):");
  Serial.print(MQ3calcR0 / 10); Serial.print(" | ");
  Serial.print(MQ4calcR0  / 10); Serial.print(" | ");
  Serial.print(MQ135calcR0 / 10); Serial.print("  | ");
  Serial.print(MQ7calcR0 / 10); Serial.print(" | ");
  Serial.print(MQ8calcR0  / 10); Serial.print(" | ");
  Serial.print(MQ9calcR0 / 10); Serial.println("  |");

  /*****************************  MQ CAlibration ********************************************/  
}

void loop() {
  //Update the voltage lectures
  MQ3.update();
  MQ4.update();
  MQ135.update();  
  MQ7.update();
  MQ8.update();
  MQ9.update();


  MQ3.setA(0.3934); MQ3.setB(-1.504); //Alcohol
float  Alcohol = MQ3.readSensor(); 

  MQ3.setA(4.8387); MQ3.setB(-2.68); //Benzene
float  Benzene = MQ3.readSensor(); 
  
  MQ3.setA(7585.3); MQ3.setB(-2.849); //Hexane
float  Hexane = MQ3.readSensor(); 

  MQ4.setA(1012.7); MQ4.setB(-2.786); //CH4
float  CH4 = MQ4.readSensor(); 

  MQ4.setA(30000000); MQ4.setB(-8.308); //smoke  
float smoke = MQ4.readSensor(); 
 
  MQ135.setA(110.47); MQ135.setB(-2.862);  //CO2 
float CO2 = MQ135.readSensor(); 
  
  MQ135.setA(44.947); MQ135.setB(-3.445);  // Toluene
float Toluene = MQ135.readSensor(); 
  
  MQ135.setA(102.2 );  MQ135.setB(-2.473); //NH4 
float NH4 = MQ135.readSensor(); 
  
  MQ135.setA(34.668);  MQ135.setB(-3.369); //Acetone
float Acetone = MQ135.readSensor(); 
 
  MQ7.setA(99.042);  MQ7.setB(-1.518); //CO
float CO = MQ7.readSensor(); 

  MQ8.setA(976.97);  MQ8.setB(-0.688); // H2
float H2 = MQ8.readSensor();

  MQ9.setA(1000.5);  MQ9.setB(-2.186); //flamable gas
float FG = MQ9.readSensor();



  Serial.print("Alcohol:  "); Serial.println(Alcohol);
  Serial.print("Benzene:  "); Serial.println(Benzene);
  Serial.print("Hexane:   "); Serial.println(Hexane);
  Serial.print("Methane:  "); Serial.println(CH4);
  Serial.print("Smoke:    "); Serial.println(smoke);
  Serial.print("CO2:      "); Serial.println(CO2);
  Serial.print("Toluene:  "); Serial.println(Toluene);
  Serial.print("NH4:      "); Serial.println(NH4);
  Serial.print("Acetone:  "); Serial.println(Acetone);  
  Serial.print("CO:       "); Serial.println(CO);
  Serial.print("H2:       "); Serial.println(H2);
  Serial.print("FG:       "); Serial.println(FG);
  Serial.println("--------------------------------------------------------");

lcd.clear();
delay(70);
lcd.setCursor  (0,0);
lcd.print("Alcohol ");
lcd.print(Alcohol);
lcd.setCursor (13,0);
lcd.print("ppm");
lcd.setCursor  (0,1);
lcd.print("Benzene ");
lcd.print(Benzene);
lcd.setCursor (13,1);
lcd.print("ppm");
delay(3000);

lcd.clear();
delay(70);
lcd.setCursor  (0,0);
lcd.print("Hexane  ");
lcd.print(Hexane);
lcd.setCursor (13,0);
lcd.print("ppm");
lcd.setCursor  (0,1);
lcd.print("CH4     ");
lcd.print(CH4);
lcd.setCursor (13,1);
lcd.print("ppm");
delay(3000);


lcd.clear();
delay(70);
lcd.setCursor  (0,0);
lcd.print("Smoke   ");
lcd.print(smoke);
lcd.setCursor (13,0);
lcd.print("ppm");
lcd.setCursor  (0,1);
lcd.print("CO2     ");
lcd.print(CO2);
lcd.setCursor (13,1);
lcd.print("ppm");
delay(3000);


lcd.clear();
delay(70);
lcd.setCursor  (0,0);
lcd.print("Toluene ");
lcd.print(Toluene);
lcd.setCursor (13,0);
lcd.print("ppm");
lcd.setCursor  (0,1);
lcd.print("NH4     ");
lcd.print(NH4);
lcd.setCursor (13,1);
lcd.print("ppm");
delay(3000);


lcd.clear();
delay(70);
lcd.setCursor  (0,0);
lcd.print("Acetone ");
lcd.print(Acetone);
lcd.setCursor (13,0);
lcd.print("ppm");
lcd.setCursor  (0,1);
lcd.print("CO      ");
lcd.print(CO);
lcd.setCursor (13,1);
lcd.print("ppm");
delay(3000);


lcd.clear();
delay(70);
lcd.setCursor  (0,0);
lcd.print("H2      ");
lcd.print(H2);
lcd.setCursor (13,0);
lcd.print("ppm");
lcd.setCursor  (0,1);
lcd.print("FG      ");
lcd.print(FG);
lcd.setCursor (13,1);
lcd.print("ppm");
delay(3000);

}

Similar Posts

Leave a Reply