#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD
const int pHPin = A0; // Sensor pH di A0
const int turbidityPin = A1; // Sensor kekeruhan di A1
const int buzzerPin = 8; // Buzzer di D8
const int greenLED = 9; // LED Hijau di D9
const int redLED = 10; // LED Merah di D10
float pHValue, turbidityValue;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(buzzerPin, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(redLED, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("Kualitas Air");
delay(2000);
}
void loop() {
// Baca nilai pH
pHValue = analogRead(pHPin) * (5.0 / 1023.0); // Konversi ke voltase
pHValue = 3.5 * pHValue; // Kalibrasi sesuai kebutuhan
// Baca nilai kekeruhan (NTU)
turbidityValue = analogRead(turbidityPin);
turbidityValue = map(turbidityValue, 0, 1023, 0, 100); // Konversi ke persen
// Tampilkan di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("pH: ");
lcd.print(pHValue, 2);
lcd.setCursor(0, 1);
lcd.print("Kekeruhan: ");
lcd.print(turbidityValue);
lcd.print("%");
// Evaluasi kualitas air
if (pHValue >= 6.5 && pHValue <= 8.5 && turbidityValue < 50) {
digitalWrite(greenLED, HIGH); // Air baik
digitalWrite(redLED, LOW);
noTone(buzzerPin);
} else {
digitalWrite(greenLED, LOW);
digitalWrite(redLED, HIGH); // Air buruk
tone(buzzerPin, 1000); // Bunyikan alarm
delay(500);
noTone(buzzerPin);
}
delay(2000); // Update setiap 2 detik
}