#include <LiquidCrystal_I2C.h>
#define ECHO_PIN 2
#define TRIG_PIN 3
#define buzzer 4
#define ledhijau 13
#define ledkuning 12
#define ledmerah 11
LiquidCrystal_I2C lcd(0x27,20,4);
// Variabel untuk ukuran tangki (dalam cm)
const float tinggiTangki = 400; // Tinggi tangki dalam cm
const float diameterTangki = 379.1; // Diameter tangki dalam cm
const float luasAlasTangki = 3.14 * (diameterTangki / 2.0) * (diameterTangki / 2.0); // Luas alas dalam cm^2
void setup() {
pinMode(ledhijau, OUTPUT);
pinMode(ledkuning, OUTPUT);
pinMode(ledmerah, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
digitalWrite(ledhijau, HIGH);
digitalWrite(ledkuning, HIGH);
digitalWrite(ledmerah, HIGH);
tone(4,300,500);
lcd.setCursor(0,1);
lcd.print(" SOLAR TANK");
lcd.setCursor(8,2);
lcd.print("MONITORING");
delay(2000);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("ALHIKMAL MARDIANSAH");
lcd.setCursor(0,2);
lcd.print(" POLITEKNIK JAMBI");
delay(3000);
digitalWrite(ledhijau, LOW);
digitalWrite(ledkuning, LOW);
digitalWrite(ledmerah, LOW);
digitalWrite(buzzer, LOW);
lcd.clear();
}
float kedalaman() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int durasi = pulseIn(ECHO_PIN, HIGH);
return tinggiTangki - durasi * 0.034 / 2;
}
float hitungVolume(float kedalaman) {
return (kedalaman * luasAlasTangki) / 1000.0; // Volume dalam liter
}
void loop() {
float kdlm = kedalaman();
float volume = hitungVolume(kdlm);
if (kdlm > 350) {
digitalWrite(ledhijau, HIGH);
digitalWrite(ledkuning, LOW);
digitalWrite(ledmerah, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SOLAR TANK MONITORING");
lcd.setCursor(0,1);
lcd.print("LEVEL :");
lcd.setCursor(8,1);
lcd.print(kdlm);
lcd.setCursor(18,1);
lcd.print("CM");
lcd.setCursor(0,2);
lcd.print("VOLUME:");
lcd.setCursor(8,2);
lcd.print(volume);
lcd.setCursor(18,2);
lcd.print("L");
lcd.setCursor(0,3);
lcd.print("STATUS:");
lcd.setCursor(8,3);
lcd.print("FULL");
tone(4,800,1000);
delay(1000);
lcd.clear();
delay(100);
}
else if (kdlm >= 25 && kdlm < 350) {
digitalWrite(ledhijau, LOW);
digitalWrite(ledkuning, HIGH);
digitalWrite(ledmerah, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SOLAR TANK MONITORING");
lcd.setCursor(0,1);
lcd.print("LEVEL :");
lcd.setCursor(8,1);
lcd.print(kdlm);
lcd.setCursor(18,1);
lcd.print("CM");
lcd.setCursor(0,2);
lcd.print("VOLUME:");
lcd.setCursor(8,2);
lcd.print(volume);
lcd.setCursor(18,2);
lcd.print("L");
lcd.setCursor(0,3);
lcd.print("STATUS:");
lcd.setCursor(8,3);
lcd.print("BERISI");
delay(1000);
lcd.clear();
delay(100);
}
else {
digitalWrite(ledhijau, LOW);
digitalWrite(ledkuning, LOW);
digitalWrite(ledmerah, HIGH);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SOLAR TANK MONITORING");
lcd.setCursor(0,1);
lcd.print("LEVEL :");
lcd.setCursor(8,1);
lcd.print(kdlm);
lcd.setCursor(18,1);
lcd.print("CM");
lcd.setCursor(0,2);
lcd.print("VOLUME:");
lcd.setCursor(8,2);
lcd.print(volume);
lcd.setCursor(18,2);
lcd.print("L");
lcd.setCursor(0,3);
lcd.print("STATUS:");
lcd.setCursor(8,3);
lcd.print("HAMPIRKOSONG");
delay(1000);
lcd.clear();
delay(100);
}
}