#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <Wire.h>
#define echoPin 3
#define trigPin 4
Servo servo; // Memanggil library servo
const int trigger = 4;
const int echo = 3;
const int servoPin1 = 5;
int ldrPin = A0;
int ledPin = 2;
const float GAMMA = 0.7;
const float RL10 = 50;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
servo.attach(servoPin1);
pinMode(ledPin, OUTPUT); // Inisialisasi ledPin sebagai pin output
lcd.init(); // Perintah menyalakan lcd
lcd.backlight(); // Perintah menyalakan backlight dari lcd
pinMode(trigPin, OUTPUT); // Tx, menggunakan variabel trigPin
pinMode(echoPin, INPUT); // Rx, menggunakan variabel echoPin
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
int range = pulseIn(echoPin, HIGH); // Mengukur durasi pulsa yang diterima
float jarak = range * 0.034 / 2; // Menghitung jarak dalam cm
float jarakM = jarak / 100; // Mengubah jarak dari cm ke m
// Kontrol servo berdasarkan ketinggian air
if (jarak < 400 && jarak > 350) {
servo.write(180);
} else if (jarak < 350 && jarak > 150 ){
servo.write(90);
} else{
servo.write(0);
}
int ldrValue = analogRead(ldrPin); // Membaca nilai analog pada pin A0
float voltase = ldrValue / 1024. * 5; // Rumus mengubah nilai sinyal analog dari ldr menjadi nilai voltase
float resistansi = 2000 * voltase / (1 - voltase / 5); // Rumus mencari nilai resistansi dari nilai voltase sebelumnya
float kecerahan = pow(RL10 * 1e3 * pow(10, GAMMA) / resistansi, (1 / GAMMA)); // Rumus mencari nilai tingkat kecerahan (lux)
lcd.setCursor(0, 0); // Set posisi karakter di lcd pada kolom 0, baris 0
lcd.print("Cahaya: ");
if (kecerahan > 50) {
lcd.print("Terang");
digitalWrite(ledPin, LOW);
} else {
lcd.print("Gelap ");
digitalWrite(ledPin, HIGH);
}
//Lux artinya cahaya yang sampai di permukaan tiap meter persegi
lcd.setCursor(0, 1); // Set posisi karakter di lcd pada kolom 0, baris 1
lcd.print("Lux: ");
lcd.print(kecerahan);
lcd.print(" ");
Serial.print("Jarak : ");
Serial.print(jarak);
Serial.print("cm dari ");
Serial.print(jarakM);
Serial.println("m");
delay(1000);
}