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
Post a Comment