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

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

基于Arduino的气体分析仪

发布时间:2021-06-29
分享到:

基于Arduino的气体分析仪

发布时间:2021-06-29
分享到:

本文主要介绍使用MQ系列传感器、Dht - 11传感器和 Arduino的大气气体分析仪,该设计使用传感器模拟读取并在I2C液晶显示器中精确测量数据,传感器可以给出LPG 、CNG 、HYDROGEN 、AIR 的值-质量 。还可以简单地添加一个SD卡来存储数据。

硬件部件:

软件应用程序:

电路图:

代码:

/*随时联系
 * sreeramaj53@gmail.com
 * www.youtube.com/ZenoModiff
 * 最后更新 - 时间 09:05 PM - 日期 2021 年 5 月 20 日
 * Github 链接:-- https://github.com/Zenomodiff/Atmosphere-Gas-Ananlyser-With-MQ-Series-Sensors-Dht-11
 */

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 13     
#define DHTTYPE DHT11 

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);

const int mq2 = A0;
const int mq4 = A1;  
const int mq5 = A2; 
const int mq135 = A3;

float m = -0.6527; 
float b = 1.30; 
float R0 = 21.91;

void setup() {

  lcd.begin();
  lcd.backlight();
  lcd.print("Atmosphere");
  lcd.setCursor(0,3);
  lcd.print("Gas Analyser");
  delay (3000);
  lcd.clear();

  lcd.print("By");
  lcd.setCursor(0,3);
  lcd.print("Zeno Modiff");
  delay (3000);
  lcd.clear();

  pinMode(mq4, INPUT); 
  pinMode(mq135, INPUT); 
  pinMode(mq5, INPUT); 
  pinMode(mq2, INPUT); 
  
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  float f = dht.readTemperature(true);
  if (isnan(h) || isnan(t) || isnan(f)) {
  Serial.println(F("Failed to read from DHT sensor!"));
  return;
  float hif = dht.computeHeatIndex(f, h);
  float hic = dht.computeHeatIndex(t, h, false);
  }
  double mq4_value = analogToPPM(analogRead(mq4));
  double mq135_value = analogToPPM(analogRead(mq135));
  double mq5_value = analogToPPM(analogRead(mq5));
  double mq2_value = analogToPPM(analogRead(mq2));
  
  Serial.println("************************************");
  Serial.print("MQ-4 Value: ");Serial.print(mq4_value, DEC);Serial.println(" PPM");
  Serial.print("MQ-135 Value: ");Serial.print(mq135_value, DEC);Serial.println(" PPM");
  Serial.print("MQ-5 Value: ");Serial.print(mq5_value, DEC);Serial.println(" PPM");
  Serial.print("MQ-2 Value: ");Serial.print(mq2_value, DEC);Serial.println(" PPM");
  Serial.print("DHT-Temp: ");Serial.print(t);Serial.println(" c");
  Serial.print("DHT-Humi: ");Serial.print(h);Serial.println(" %");
  Serial.println("************************************\n\n");

  lcd.setCursor(0,0);
  lcd.print("CNG Value");
  lcd.setCursor(0,3);
  lcd.println(mq4_value);
  lcd.setCursor(7,7);
  lcd.print("PPM");
  delay(3000);
  lcd.clear();

  lcd.setCursor(0,0);
  lcd.print("AQI Value");
  lcd.setCursor(0,3);
  lcd.println(mq135_value);
  lcd.setCursor(7,7);
  lcd.print("PPM");
  delay(3000);
  lcd.clear();

  lcd.setCursor(0,0);
  lcd.print("LNG");
  lcd.setCursor(0,3);
  lcd.println(mq5_value);
  lcd.setCursor(7,7);
  lcd.print("PPM");
  delay(3000);
  lcd.clear();

  lcd.setCursor(0,0);
  lcd.print("SMOKE");
  lcd.setCursor(0,3);
  lcd.println(mq2_value);
  lcd.setCursor(7,7);
  lcd.print("PPM");
  delay(3000);
  lcd.clear();

  lcd.setCursor(0,0);
  lcd.print("DHT-11");
  lcd.setCursor(0,3);
  lcd.print("Temp -");
  lcd.setCursor(7,4);
  lcd.println(t);
  delay(3000);
  lcd.clear();

  lcd.setCursor(0,0);
  lcd.print("DHT-11");
  lcd.setCursor(0,3);
  lcd.print("Humi -");
  lcd.setCursor(7,4);
  lcd.println(h);
  delay(3000);
  lcd.clear();

}
  double analogToPPM(int aValue) {
  float sensor_volt;
  float RS_gas; 
  float ratio;
  int sensorValue = aValue;

  sensor_volt = sensorValue*(5.0/1023.0); 
  RS_gas = ((5.0*10.0)/sensor_volt)-10.0; 
  ratio = RS_gas/R0; 
  double ppm_log = (log10(ratio)-b)/m;
  return ppm_log;
}

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论