Arduino Çoklu Gaz Dedektörü Yapımı

Arduino çoklu gaz dedektörü projesi ile, MQ-4: doğalgaz, metangazı. MQ-2: LPG, bütan, propan, metan, alkol, hidrojen. MQ-5: LPG, izobütan, propan. MQ-135(hava kalitesi sensörü): kükürt, benzen, duman, zehirli gazlar. Gibi gazları tek bir projede 4 farklı gaz sensörü sayesinde yüksek doğrulukla tespit edebilirsiniz. Ayrıca DHT-11 sensörü ile ortamın sıcaklığını ve neminide ölçebilirsiniz.

Program kodunda ayrıca I2C 16×2 LCD ekran için kodlar eklenmiştir, ister seri ekrandan ister LCD ekrandan verileri okuyabilirsiniz.

Bu proje aslında, MQ serisi sensörleri ve DHT11 sensörünü kullanan, atmosferik gaz analiz cihazıdır. Temel fikir sensör verilerini hassas bir şekilde ölçüp LCD ekrana yazmaktır. Buradaki sensörler başlıca, LPG, CNG, Hidrojen ve hava kalitesi değerlerini verebilir. Ayrıca verileri sürekli toplayıp kaydetmek için bir SD kart modülü ekleyebilir ya da NodeMCU(ESP8266 yada ESP32) ile proje WiFi fonksiyonu ekleyebilirsiniz. Ayrıca kodun alt kısmında alınan verilen PPM seviyesine çevrildiğini unutmayın.

NodeMCU Hava İstasyonu Uygulaması

Gerekli Malzemeler

  • Geliştirme kartı(Arduino Nano)
  • MQ2 Gaz Sensörü
  • MQ4 Gaz Sensörü
  • MQ5 Gaz Sensörü
  • MQ132 Gaz Sensörü
  • DHT11 Sıcaklık ve Nem Sensörü
  • I2C 16X2 LCD Ekran
  • 5V2A DC Adaptör

Devre Şeması

Arduino Çoklu Gaz Dedektörü Yapımı arduino çoklu gaz dedektörü,gaz dedektörü,arduino gaz dedektörü

Program Kodu

Gerekli kütüphaneleri doğrudan Arduino Library Manager’dan indirebilirsiniz. Eğer kütüphane kurmayı ve eklemeyi bilmiyorsanız bu yazımıza göz atın.

#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("Atmosfer");
  lcd.setCursor(0, 3);
  lcd.print("Gaz Dedektörü");
  delay (3000);
  lcd.clear();

  lcd.setCursor(0, 3);
  lcd.print("devreyakan.com");
  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("DHT baslatilamadi"));
    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 Degeri: "); Serial.print(mq4_value, DEC); Serial.println(" PPM");
  Serial.print("MQ-135 Degeri: "); Serial.print(mq135_value, DEC); Serial.println(" PPM");
  Serial.print("MQ-5 Degeri: "); Serial.print(mq5_value, DEC); Serial.println(" PPM");
  Serial.print("MQ-2 Degeri: "); Serial.print(mq2_value, DEC); Serial.println(" PPM");
  Serial.print("DHT-Sicaklik: "); Serial.print(t); Serial.println(" c");
  Serial.print("DHT-Nem: "); Serial.print(h); Serial.println(" %");
  Serial.println("************************************\n\n");

  lcd.setCursor(0, 0);
  lcd.print("CNG Degeri");
  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 Degeri");
  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("Duman");
  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("Sicaklik -");
  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("Nem -");
  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;
}