#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Default address of most PCF8574 modules, change according
int seconds = 0;
int Sensor_gas = A0;
int redLED = 5;
int yellowLED = 4;
int greenLED = 3;
int buzzer = 6;
int sensorThresholdLow = 100; // Batas rendah gas bocor (100 ppm)
int sensorThresholdHigh = 200; // Batas tinggi gas bocor (200 ppm)
int sensorThresholdMid = 400; // Batas kebocoran gas menengah (400 ppm)
int flameSensorPin = 7; // Pin untuk sensor api (flame sensor)
void setup() {
pinMode(Sensor_gas, INPUT);
pinMode(redLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(flameSensorPin, INPUT); // Mengatur pin sensor api sebagai input
lcd.backlight();
lcd.display();
lcd.begin(16,2);
lcd.clear();
Serial.begin(9600);
}
void loop() {
int analogSensor = analogRead(Sensor_gas); // Membaca sensor gas analog
int ppm = map(analogSensor, 0, 1023, 0, 500); // Mapping nilai sensor ke ppm gas
int flameDetected = digitalRead(flameSensorPin); // Membaca status sensor api
// Menampilkan kondisi sensor gas pada LCD
lcd.setCursor(0, 0);
lcd.print("Kondisi Ruangan:");
lcd.setCursor(0, 1);
// Cek apakah ada api
if (flameDetected == HIGH) {
lcd.print("API DETECTED!");
digitalWrite(redLED, HIGH); // LED merah menyala
digitalWrite(yellowLED, LOW); // LED kuning mati
digitalWrite(greenLED, LOW); // LED hijau mati
tone(buzzer, 750); // Bunyi buzzer terus menerus
}
else {
// Gas di atas 400 ppm
if (ppm > sensorThresholdMid) {
lcd.print("Gas bocor! (>400ppm)");
digitalWrite(redLED, HIGH);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
tone(buzzer, 750); // Bunyi buzzer terus menerus
}
// Gas antara 201-400 ppm
else if (ppm > sensorThresholdHigh) {
lcd.print("Gas bocor! (201-400ppm)");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, HIGH);
digitalWrite(greenLED, LOW);
tone(buzzer, 750, 500); // Bunyi buzzer lebih cepat (500ms interval)
}
// Gas antara 100-200 ppm
else if (ppm > sensorThresholdLow) {
lcd.print("Gas bocor! (100-200ppm)");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
tone(buzzer, 750, 1000); // Bunyi buzzer sedikit lebih cepat (1 detik interval)
}
// Gas aman
else {
lcd.print("Gas aman (0-100ppm)");
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, HIGH);
noTone(buzzer); // Tidak ada bunyi buzzer
}
}
delay(1000); // Jeda 1 detik sebelum pembacaan berikutnya
}