#include <LiquidCrystal.h> //library untuk LCD
#include <Servo.h> //library untuk servo
Servo myservo; //initial motor servo
LiquidCrystal lcd(12,13,5,4,3,2); //(RS,Enable,D4,D5,D6,D7) Pin LCD
const int TrigPin = 8; //untuk inisialisasi TrigPin pada pin 8
const int EchoPin = 9; //untuk inisialisasi EchoPin pada pin 9
float timer, jarak; //inisialisasi nilai sampai desimal pada timer dan jarak
const int TrigPin2 = 6; //untuk inisialisasi TrigPin sensor kapasitas pada pin 6
const int EchoPin2 = 7;//untuk inisialisasi EchoPin sensor kapasitas pada pin 7
void setup() { // put your setup code here, to run once:
lcd.begin(16,2); //Setup pada lcd yang dipakai yaitu 16x2
Serial.begin(9600); //untuk serial penerimaan data pada arduino
pinMode(EchoPin, INPUT); //pin Echo sebagai input
pinMode(TrigPin, OUTPUT); //pin Trigger sebagai Output
pinMode(EchoPin2, INPUT); //pin Echo2 sebagai input
pinMode(TrigPin2, OUTPUT); //pin Trigger2 sebagai Output
myservo.attach(10); //Setup pada servo, PWM pada pin 10
delay(1000);}
void loop() { // put your main code here, to run repeatedly:
digitalWrite(TrigPin, LOW); //fungsi perintah pin digital saat kondisi low
delayMicroseconds(2); //sebagai delay saat pembacaan low TrigPin
digitalWrite(TrigPin, HIGH); //fungsi perintah pin digital
delayMicroseconds(10); //sebagai delay saat pembacaan high TrigPin
digitalWrite(TrigPin, LOW); //fungsi perintah pin digital
timer = pulseIn(EchoPin,HIGH); //waktu ketika menerima gelombang input
jarak = timer/58; //perhitungan variable jarak terhadap variable waktu input
delay(100);
if (jarak <= 10 ) //untuk logika pembacaan jarak sensor tersebut ketika jarak <=10 cm kondisinya sebagai berikut
{myservo.write(90); //kondisi posisi servo 90 atau open kotak sampah open
lcd.setCursor (4,1); // meletakan awal huruf tulisan pada baris 2 dan kolom 5
lcd.print(" "); // untuk menghapus tulisan pada baris 2 dan kolom 5
delay(1000);
lcd.setCursor (4,1); // meletakan awal huruf tulisan pada baris 2 dan kolom 5
lcd.print("Terbuka"); // untuk menampilkan tulisan “Terbuka” pada lcd baris 2 dan kolom 5
delay(1000);
}
else
{ myservo.write(0); //kondisi motor servo 0 atau kotak sampah closed
lcd.setCursor (4,1); // meletakan awal huruf tulisan pada baris 2 dan kolom 5
lcd.print(" "); // untuk menghapus tulisan pada baris 2 dan kolom 5
delay(1000);
lcd.setCursor (4,1); // meletakan awal huruf tulisan pada baris 2 dan kolom 5
lcd.print("Tertutup"); // untuk menampilkan tulisan “Tertutup” pada lcd baris 2 dan kolom 5
delay(1000);}
{ float isi, kapasitas; //inisialisasi nilai sampai desimal pada isi dan kapasitas
float diff, percent; //inisialisasi nilai sampai desimal pada diff dan percent
int max = 100; //intial tinggi max kotak sampah
digitalWrite(TrigPin2, LOW); //fungsi perintah pin digital
delayMicroseconds(2); //sebagai delay saat pembacaan low TrigPin
digitalWrite(TrigPin2, HIGH); //fungsi perintah pin digital
delayMicroseconds(10); //sebagai delay saat pembacaan low TrigPin
digitalWrite(TrigPin2, LOW); //fungsi perintah pin digital
isi = pulseIn(EchoPin2,HIGH); //waktu ketika menerima gelombang input
kapasitas = (isi/58) ; //perhitungan variable jarak terhadap variable waktu input
diff= max - kapasitas ; //perhitungan variable berapa banyak sisa sampah yang dapat terisi
percent=(diff/max)*100; //perhitungan variable persentase sampah
{if (percent>=85&&percent<=100) //batas persen kapasitas kotak sampah di pembacaan sensor
{ lcd.setCursor(0,0); // meletakan awal huruf tulisan pada baris 1 dan kolom 1
lcd.print(" "); // untuk menghapus tulisan pada baris 1 dan kolom 1
lcd.setCursor(2,0); // meletakan awal huruf tulisan pada baris 1 dan kolom 2
lcd.println("Sampah Penuh"); }
else
{lcd.setCursor(0,0); // meletakan awal huruf tulisan pada baris 1 dan kolom 1
lcd.print(" "); // untuk menghapus tulisan pada baris 1 dan kolom 1
lcd.setCursor(2,0); // meletakan awal huruf tulisan pada baris 1 dan kolom 3
lcd.print("Terisi "); // untuk menampilkan tulisan “Terisi” pada lcd baris 1 dan kolom 3
lcd.print(percent); // untuk menampilkan tulisan percent pada lcd baris 1 dan kolom 3
lcd.print("% "); // untuk menampilkan tulisan “Terisi” pada lcd baris 1 dan kolom 3
delay(1000);}
{if (kapasitas <=405&&kapasitas >=101) //untuk pembacaan sensor kapasitas jika diatas 100 dan dibawah 405
lcd.setCursor(0,0); // meletakan awal huruf tulisan pada baris 1 dan kolom 1
lcd.print("Diatas Kotak Loh"); // untuk menampilkan tulisan “Diatas Kotak Loh” pada lcd baris 1 dan kolom 1
delay(1000);}
}}}