//seorang siswa disekolah SMA MAju Tak Gentar ingin membuat tempat sampah pintar dengan Arduino Uno. Siswa tersebut memiliki tinggi tempat sampah 100cm.
// Adapun fitur yang di inginkan adalah sebagai berikut:
// 1. Tutup tempat sampah akan terbuka ketika tangan di dekatkan ke sensor dengan jarak 1cm sd 10cm
// 2. LCD Menampilkan tulisan "Terbuka" saat no 1 dikerjakan
// 3. Membaca kapasitas sampah dan menampilkan pada LCD secara realtime
#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <RTClib.h>
const int TRIG_PIN1 = 6;
const int ECHO_PIN1 = 7;
const int TRIG_PIN2 = 5;
const int ECHO_PIN2 = 4;
const int SERVO_PIN = 9;
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd1(0x27, 20, 4);
LiquidCrystal_I2C lcd2(0x3F, 16, 2);
Servo servo;
char daysOfTheWeek[7][12] = {"Minggu","Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};
float duration_us1, distance_cm1;
float duration_us2, distance_cm2;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
lcd1.begin(20,4);
lcd1.backlight();
lcd2.begin(16,2);
lcd2.backlight();
pinMode(TRIG_PIN1, OUTPUT);
pinMode(ECHO_PIN1, INPUT);
pinMode(TRIG_PIN2, OUTPUT);
pinMode(ECHO_PIN2, INPUT);
servo.attach(SERVO_PIN);
if(!rtc.begin()){
lcd1.println("Couldn't find RTC");
while(1);
}
if(!rtc.isrunning()){
lcd1.println("RTC is not running, let's set the time!");
rtc.adjust(DateTime(F(__DATE__ ),F(__TIME__)));
}
}
void loop() {
// put your main code here, to run repeatedly:
DateTime now = rtc.now();
//Sensor Ultrasonik 1
{ digitalWrite(TRIG_PIN1, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN1, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN1, LOW);
duration_us1 = pulseIn(ECHO_PIN1, HIGH);
distance_cm1 = 0.017 * duration_us1;
}
//Sensor Ultrasonik 2
{ digitalWrite(TRIG_PIN2, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN2, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN2, LOW);
duration_us2 = pulseIn(ECHO_PIN2, HIGH);
distance_cm2 = 0.017 * duration_us2;
}
//Display 1
lcd1.clear();
lcd1.setCursor(3,0);
lcd1.print("Tempat Sampah");
lcd1.setCursor(6,1);
lcd1.print("Automatic");
lcd1.setCursor(3,2);
lcd1.print(daysOfTheWeek[now.dayOfTheWeek()]);
lcd1.print("/");
lcd1.print(now.day(),DEC);
lcd1.print(':');
lcd1.print(now.month(),DEC);
lcd1.print(':');
lcd1.print(now.year(),DEC);
lcd1.setCursor(1,3);
lcd1.println();
lcd1.println(now.hour(),DEC);
lcd1.println(':');
lcd1.println(now.minute(),DEC);
lcd1.println(':');
lcd1.print(now.second(),DEC);
delay (3000);
if (distance_cm1 <= 10){
servo.write(180);
lcd1.clear();
lcd1.setCursor(3,0);
lcd1.print("Tempat Sampah");
lcd1.setCursor(7,2);
lcd1.print("Terbuka");
delay(3000);
} else{
servo.write(90);
lcd1.clear();
lcd1.setCursor(3,0);
lcd1.print("Tempat Sampah");
lcd1.setCursor(7,2);
lcd1.print("Ditutup");
delay(1000);
}
Serial.print("jarak = ");
Serial.print(distance_cm2);
Serial.println(" cm");
delay(1000);
//Display 2
if (distance_cm2 <= 80){
lcd2.clear();
lcd2.setCursor(1,0);
lcd2.print("Tempat Sampah");
lcd2.setCursor(1,1);
lcd2.print("Tersedia");
delay(3000);
} else{
lcd2.clear();
lcd2.setCursor(1,0);
lcd2.print("Tempat Sampah");
lcd2.setCursor(1,2);
lcd2.print("Sudah Penuh");
delay(1000);
}
}