// Nama : Pandu Satya Ramadhani
// Nim : 2021230005
// Prodi : Teknologi informasi
// Import library Arduino
#include <Arduino.h>
// Import library LCD
#include <LiquidCrystal_I2C.h>
// Definisikan pin Arduino yang digunakan untuk sensor gas MQ-135 dan MQ-137
#define MQ135_PIN A0
#define MQ137_PIN A1
#define BUZZER_PIN 8
// Definisikan alamat I2C LCD (0x27 adalah alamat umum, bisa berbeda sesuai perangkat Anda)
#define I2C_ADDR 0x27
// Buat objek LCD
LiquidCrystal_I2C lcd(I2C_ADDR, 20, 4);
// Array untuk menyimpan nilai PPM yang diinginkan
int ppmValues[] = {5, 15, 25, 40, 48, 80, 190, 380, 790, 1000, 1880, 2500, 3000, 5000};
int ppmIndex = 0;
// Fungsi untuk mengonversi nilai analog menjadi ppm untuk deteksi gas
float analogToPPM(int sensorValue, int sensorType) {
float ppm;
if (sensorType == 135) {
ppm = ppmValues[ppmIndex];
} else if (sensorType == 137) {
ppm = ppmValues[ppmIndex];
}
return ppm;
}
// Fungsi untuk mengaktifkan buzzer
void activateBuzzer() {
tone(BUZZER_PIN, 1000); // Frekuensi bunyi buzzer (1000 Hz)
delay(1000); // Aktifkan buzzer selama 1 detik
noTone(BUZZER_PIN); // Matikan buzzer
}
// Fungsi setup() dijalankan saat Arduino pertama kali dihidupkan
void setup() {
// Inisialisasi serial monitor dengan baud rate 9600
Serial.begin(9600);
// Inisialisasi LCD
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Hidupkan backlight LCD
lcd.setCursor(6, 0); //Atur posisi kursor
lcd.print("WELCOME"); // Tampilkan pesan pada LCD
lcd.setCursor(5, 1); // Atur posisi kursor
lcd.print("LCD AKTIF"); // Tampilkan pesan pada LCD
delay(2000); // Tunda selama 2 detik
lcd.clear(); // Bersihkan layar LCD
lcd.setCursor(3, 0); //Atur posisi kursor
lcd.print("MENGAMBIL DATA"); // Tampilkan pesan awal pada LCD
delay(2000); // Tunda selama 2 detik
lcd.clear(); // Bersihkan layar LCD
}
// Fungsi loop() dijalankan berulang-ulang
void loop() {
// Baca nilai sensor gas MQ-135 dengan satuan PPM
int sensorValueMQ135 = analogRead(MQ135_PIN);
// Baca nilai sensor MQ-137 dengan satuan PPM
int sensorValueMQ137 = analogRead(MQ137_PIN);
// Gunakan nilai PPM dari array
float ppmMQ = ppmValues[ppmIndex];
// Bersihkan layar LCD sebelum menampilkan nilai yang baru
lcd.clear();
// Tampilkan nilai sensor gas MQ-135 ke serial monitor
Serial.print("Data MQ-135: ");
Serial.println(ppmMQ);
// Tampilkan nilai sensor gas MQ-137 ke serial monitor
Serial.print("Data MQ-137: ");
Serial.println(ppmMQ);
// Tampilkan nilai PPM sensor gas MQ ke LCD
lcd.setCursor(0, 0);
lcd.print("Nilai PPM: ");
lcd.print(ppmMQ);
// Periksa apakah nilai sensor gas metana melebihi batas aman untuk MQ-135
if (ppmMQ > 700) {
lcd.setCursor(0, 1);
lcd.print("Segera Bersihkan! ");
activateBuzzer();
} else if (ppmMQ > 50) {
lcd.setCursor(0, 1);
lcd.print("Bahaya Gas Metana!");
} else {
lcd.setCursor(0, 1);
lcd.print("Amannya Gas Metana");
}
// Periksa apakah nilai sensor karbondioksida melebihi batas aman untuk MQ-135
if (ppmMQ > 4500) {
lcd.setCursor(0, 2);
lcd.print("Segera Bersihkan! ");
activateBuzzer();
} else if (ppmMQ > 1000) {
lcd.setCursor(0, 2);
lcd.print("Bahaya CO2! ");
} else {
lcd.setCursor(0, 2);
lcd.print("Amannya CO2 ");
}
// Periksa apakah nilai sensor gas amonia melebihi batas aman untuk MQ-137
if (ppmMQ > 50) {
lcd.setCursor(0, 3);
lcd.print("Segera Bersihkan! ");
activateBuzzer();
} else if (ppmMQ > 25) {
lcd.setCursor(0, 3);
lcd.print("Bahaya Gas Amonia!");
} else {
lcd.setCursor(0, 3);
lcd.print("Amannya Gas Amonia");
}
ppmIndex = (ppmIndex + 1) % (sizeof(ppmValues) / sizeof(ppmValues[0])); // Pindah ke nilai PPM berikutnya
// Tunda eksekusi selama 1000 milidetik
delay(1000);
}