#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define POT_PIN 34 // Pin potensiometer
#define TRIG_PIN 25 // Pin Trig HC-SR04
#define ECHO_PIN 26 // Pin Echo HC-SR04
#define RELAY1_PIN 27 // Pin Relay 1 untuk Vacuum Fan 1
#define RELAY2_PIN 33 // Pin Relay 2 untuk Vacuum Fan 2
#define BUZZER_PIN 32 // Pin Buzzer
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C untuk LCD
// Variabel threshold
const int dustThreshold = 700; // Nilai kualitas udara (potensiometer)
const int ultrasonicThreshold = 10; // Jarak maksimal (cm)
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
lcd.init();
lcd.backlight();
Serial.begin(115200);
}
void loop() {
// Baca potensiometer sebagai simulasi sensor debu
int dustValue = analogRead(POT_PIN);
// Baca jarak ultrasonik
float distance = getUltrasonicDistance();
// Tampilkan di LCD
lcd.setCursor(0, 0);
lcd.print("Dust: ");
lcd.print(dustValue);
lcd.setCursor(0, 1);
lcd.print("Dist: ");
lcd.print(distance);
lcd.print(" cm");
// Logika kontrol untuk Vacuum Fan 1 Vacuum Fan 2
if (dustValue > dustThreshold) {
digitalWrite(RELAY1_PIN, HIGH); // Nyalakan Vacuum Fan 1
digitalWrite(RELAY2_PIN, HIGH); // Nyalakan Vacuum Fan 2
digitalWrite(BUZZER_PIN, HIGH); // Buzzer berbunyi sekali
delay(500);
digitalWrite(BUZZER_PIN, LOW);
} else {
digitalWrite(RELAY1_PIN, LOW); // Matikan Vacuum Fan 1
digitalWrite(RELAY2_PIN, LOW); // Matikan Vacuum Fan 2
}
// Logika kontrol untuk Vacuum Fan 2
if (distance < ultrasonicThreshold) {
// Jika box penuh, bunyikan buzzer berkali-kali
for (int i = 0; i < 3; i++) {
digitalWrite(BUZZER_PIN, HIGH);
delay(200);
digitalWrite(BUZZER_PIN, LOW);
delay(200);
}
} else {
digitalWrite(RELAY1_PIN, LOW); // Matikan Vacuum Fan 1
digitalWrite(RELAY2_PIN, LOW); // Matikan Vacuum Fan 2
}
delay(1000); // Delay 1 detik
}
float getUltrasonicDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = (duration * 0.0343) / 2; // Convert to cm
return distance;
}