#include <HX711.h>
#include <LiquidCrystal.h>
#include <Servo.h>
// Inisialisasi HX711
#define DOUT A1
#define CLK A0
HX711 scale;
// LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// Pin Output
const int ledPin = 13;
const int relayPin = 8;
const int servoPin = 9; // Pin untuk servo
// Parameter tangki
float maxWeight = 50000.0; // gram saat tangki penuh (disesuaikan dengan kapasitas)
float weight = 0;
int waterLevel = 0;
// Inisialisasi Servo
Servo myServo;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print("Level Air:");
pinMode(ledPin, OUTPUT);
pinMode(relayPin, OUTPUT);
scale.begin(DOUT, CLK);
scale.set_scale(0.419); // perlu dikalibrasi!
scale.tare(0); // set 0 saat kosong
digitalWrite(relayPin, HIGH); // Pompa ON awal
myServo.attach(servoPin); // Menghubungkan servo ke pin
myServo.write(0); // Posisi awal servo (tutup keran)
}
void loop() {
weight = scale.get_units(5); // rata-rata 5 pembacaan
// Hitung level air sebagai persentase dari kapasitas maksimal
waterLevel = map(weight, 0, maxWeight, 0, 100);
waterLevel = constrain(waterLevel, 0, 100);
Serial.print("Berat: ");
Serial.print(weight);
Serial.print(" g | Level Air: ");
Serial.print(waterLevel);
Serial.println("%");
lcd.setCursor(0, 1);
lcd.print(waterLevel);
lcd.print("% ");
// Kontrol LED, Relay, dan Servo
if (waterLevel >= 90) {
digitalWrite(ledPin, HIGH);
digitalWrite(relayPin, LOW); // Pompa mati
myServo.write(0); // Tutup keran
Serial.println("Pompa dimatikan - Level air tinggi! Keran ditutup.");
} else {
digitalWrite(ledPin, LOW);
digitalWrite(relayPin, HIGH); // Pompa jalan
myServo.write(90); // Buka keran
Serial.println("Pompa berjalan - Mengisi air... Keran dibuka.");
}
delay(1000);
}Air Mangisi
Air Penuh
Load Cell/Sensor Berat