CODING ESP 32 DENGAN 4 SENSOR MQ 135

Kode esp32 untuk kualitas udara karbon monoksida dengan 4 buah  sensor mq 135, input sensor mq135 no 1 pin 12 ,sensor mq135 no 2 pin 13 , sensor mq135 no 3 pin 18, sensor mq135 no 4 pin 19, pembacaan sensor no.1 akan menyalakan relay NO.1 di pin 23 jika terdeteksi pembacaan sensor mq - 135 no.1 melebihi 30 ppm ,pembacaan sensor no.4 akan menyalakan relay NO. 4 di pin 4 jika terdeteksi pembacaan sensor mq - 135 no.4 melebihi 30 ppm , dan jika sensor mq 135 no .2 atau 3 pada pin 13 dan 18  membaca pada 5 tingaktan 1. range 0-50 ppm akan menampilkan display "baik" selama 5 detik , dan menyalakan lampu led pada pin 14  selama range masih bedarada pada 0- 50 ppm, 2. range 51- 100 ppm display "sedang" selama 5 detik, dan menyalakan led pada pin 27 serta menyalakan relay NO 2   pada pin 24 selama range masih berada di  51 - 100 ppm , 3. range 101-200 display "buruk"  selama 5 detik, dan menyalakan led pada pin 26 dan relay NO. 2 pada pin 24 selama range masih berada pada 101 - 200 ppm, 4. range 201-300 ppm display "sangat buruk" selama 5 detik, dan menyalakan led pada pin 25 dan menyalakan relay pada pin NO. 2 PADA PIN 24 dan meyalakan relay NO. 3 pada pin 11 selama range masih berada pada 201-300 ppm, 5. dan lebih dari 300 ppm display '' bahaya '' selama 10 detik, dan menyalakan led pada pin 33 dan menyalakan relay pada pin 24 dan meyalakan relay pada pin 11 buzzer di pin 34 selama range melebihi 300 ppm . input pin lcd 21 dan 22 dan akan memberi peringatan baik ,sedang,buruk, sangat buruk, pada 5 detik pertama saat sensor mq 135 no. 2 dan 3 mendeteksi pada setiap tingkatannya.

#include <Wire.h>

#include <Adafruit_Sensor.h>

#include <Adafruit_MQUnifiedSensor.h>

#include <LiquidCrystal_I2C.h>



// Pin konfigurasi

const int pinMQ135_1 = 12;

const int pinMQ135_2 = 13;

const int pinMQ135_3 = 18;

const int pinMQ135_4 = 19;

const int pinRelay1 = 23;

const int pinRelay2 = 24;

const int pinRelay3 = 11;

const int pinRelay4 = 4;

const int pinLedBaik = 14;

const int pinLedSedang = 27;

const int pinLedBuruk = 26;

const int pinLedSangatBuruk = 25;

const int pinLedBahaya = 33;

const int pinBuzzer = 34;

const int pinLCDSDA = 21;

const int pinLCDSCL = 22;



// Nilai ambang untuk status kualitas udara

const int ambangBaik = 50;

const int ambangSedang = 100;

const int ambangBuruk = 200;

const int ambangSangatBuruk = 300;



// Inisialisasi LCD

LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C 0x27, 16 kolom dan 2 baris



void setup() {

  Serial.begin(115200);



  lcd.begin(16, 2);

  lcd.init();

  lcd.backlight();



  pinMode(pinMQ135_1, INPUT);

  pinMode(pinMQ135_2, INPUT);

  pinMode(pinMQ135_3, INPUT);

  pinMode(pinMQ135_4, INPUT);

  pinMode(pinRelay1, OUTPUT);

  pinMode(pinRelay2, OUTPUT);

  pinMode(pinRelay3, OUTPUT);

  pinMode(pinRelay4, OUTPUT);

  pinMode(pinLedBaik, OUTPUT);

  pinMode(pinLedSedang, OUTPUT);

  pinMode(pinLedBuruk, OUTPUT);

  pinMode(pinLedSangatBuruk, OUTPUT);

  pinMode(pinLedBahaya, OUTPUT);

  pinMode(pinBuzzer, OUTPUT);



  digitalWrite(pinRelay1, LOW);

  digitalWrite(pinRelay2, LOW);

  digitalWrite(pinRelay3, LOW);

  digitalWrite(pinRelay4, LOW);

  digitalWrite(pinLedBaik, LOW);

  digitalWrite(pinLedSedang, LOW);

  digitalWrite(pinLedBuruk, LOW);

  digitalWrite(pinLedSangatBuruk, LOW);

  digitalWrite(pinLedBahaya, LOW);

  digitalWrite(pinBuzzer, LOW);

}



void loop() {

  // Baca nilai dari sensor MQ-135

  int nilaiSensor1 = analogRead(pinMQ135_1);

  int nilaiSensor2 = analogRead(pinMQ135_2);

  int nilaiSensor3 = analogRead(pinMQ135_3);

  int nilaiSensor4 = analogRead(pinMQ135_4);



  // Periksa tingkatan kualitas udara

  checkAirQuality(nilaiSensor2, nilaiSensor3);



  // Jika nilai sensor MQ-135 no.1 lebih dari 30 ppm, nyalakan relay NO.1 pada pin 23

  if (nilaiSensor1 > 30) {

    digitalWrite(pinRelay1, HIGH);

  } else {

    digitalWrite(pinRelay1, LOW);

  }



  // Jika nilai sensor MQ-135 no.4 lebih dari 30 ppm, nyalakan relay NO.4 pada pin 4

  if (nilaiSensor4 > 30) {

    digitalWrite(pinRelay4, HIGH);

  } else {

    digitalWrite(pinRelay4, LOW);

  }



  // Tampilkan nilai ppm pada LCD

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print("MQ2/3 PPM: ");

  lcd.print(max(nilaiSensor2, nilaiSensor3));



  // Tunda untuk interval singkat (sesuaikan sesuai kebutuhan)

  delay(1000);

}



void checkAirQuality(int nilaiSensor2, int nilaiSensor3) {

  // Tampilkan status kualitas udara berdasarkan rentang ppm

  lcd.setCursor(0, 1);

  int maxNilaiSensor = max(nilaiSensor2, nilaiSensor3);



  if (maxNilaiSensor <= ambangBaik) {

    lcd.print("Baik");

    digitalWrite(pinLedBaik, HIGH);

    delay(5000);

    digitalWrite(pinLedBaik, LOW);

  } else if (maxNilaiSensor <= ambangSedang) {

    lcd.print("Sedang");

    digitalWrite(pinLedSedang, HIGH);

    digitalWrite(pinRelay2, HIGH); // nyalakan relay NO.2 pada pin 24

    delay(5000);

    digitalWrite(pinLedSedang, LOW);

    digitalWrite(pinRelay2, LOW); // matikan relay NO.2 pada pin 24

  } else if (maxNilaiSensor <= ambangBuruk) {

    lcd.print("Buruk");

    digitalWrite(pinLedBuruk, HIGH);

    digitalWrite(pinRelay2, HIGH); // nyalakan relay NO.2 pada pin 24

    delay(5000);

    digitalWrite(pinLedBuruk, LOW);

    digitalWrite(pinRelay2, LOW); // matikan relay NO.2 pada pin 24

  } else if (maxNilaiSensor <= ambangSangatBuruk) {

    lcd.print("Sangat Buruk");

    digitalWrite(pinLedSangatBuruk, HIGH);

    digitalWrite(pinRelay2, HIGH); // nyalakan relay NO.2 pada pin 24

    digitalWrite(pinRelay3, HIGH); // nyalakan relay NO.3 pada pin 11

    delay(5000);

    digitalWrite(pinLedSangatBuruk, LOW);

    digitalWrite(pinRelay2, LOW); // matikan relay NO.2 pada pin 24

    digitalWrite(pinRelay3, LOW); // matikan relay NO.3 pada pin 11

  } else {

    lcd.print("Bahaya");

    digitalWrite(pinLedBahaya, HIGH);

    digitalWrite(pinRelay2, HIGH); // nyalakan relay NO.2 pada pin 24

    digitalWrite(pinRelay3, HIGH); // nyalakan relay NO.3 pada pin 11

    digitalWrite(pinBuzzer, HIGH);

    delay(10000);

    digitalWrite(pinLedBahaya, LOW);

    digitalWrite(pinRelay2, LOW); // matikan relay NO.2 pada pin 24

    digitalWrite(pinRelay3, LOW); // matikan relay NO.3 pada pin 11

    digitalWrite(pinBuzzer, LOW);

  }

}

Comments