空气分析仪,使用几乎所有类型的MQ传感器
可以测量 CO、CO2、H2、CH4、NH3、酒精、Bangene、丙酮、己烷、甲苯、烟雾和可燃气体浓度的空气监测仪。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-318.png)
![](https://www.geediy.net/wp-content/uploads/2024/06/image-317-1024x574.png)
工具和机器
面包板,830 个连接点
应用和平台
Arduino IDE
项目介绍
很长一段时间以来,我都希望仅使用低成本的 MQ 传感器来监测空气中的每个组件。因此,我订购了一套 9 个 MQ 传感器并制作了这个项目,其中我只能使用一些 MQ 传感器来测量空气中多种气体的浓度。这种传感器不是那么准确,需要大量校准,但它们是目前最便宜的气体传感器。您可以找到一套九个气体传感器,只需 6 到 7 美元。在我的项目中,我使用了其中的 6 种并测量了 12 种气体的气体浓度。
![](https://www.geediy.net/wp-content/uploads/2024/06/image-320.png)
等!!!在开始任何工作之前,您应该为传感器供电并让它燃烧至少24小时。这一步非常重要,因为MQ感器会受到污染,燃烧有助于它们自我清洁。您必须用5V为传感器供电并将它们放在干净的地方。
MQ传感器输出的模拟电压随某些选定气体的浓度而变化。因此,我们可以通过Arduino ADC读取模拟值线到空气中的气体浓度。
我使用6个MQ传感器(MQ3、MQ4、MQ7、MQ8、MQ9和MQ135)
传感器的用途
MQ3 用于测量酒精、苯和己烷
MQ4 用于测量甲烷和烟雾
MQ135 用于测量 CO2、NH4、甲苯和丙酮
用于测量一氧化碳的 MQ7
用于测量 H2 的 MQ8
用于测量可燃气体的MQ9
连接
duino与传感器连接,如下所示-
- MQ3 Ao – Arduino A0
- MQ4 Ao – Arduino A1
- MQ135 Ao – Arduino A2
- MQ7 Ao – Arduino A3
- MQ8 Ao – Arduino A6
- MQ9 Ao – Arduino A7
连接Arduino和LCD,如下所示-
- Arduino A4 – LCD SDA
- 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);
}
![](https://www.geediy.net/wp-content/uploads/2024/06/image-321-1024x460.png)