#include "HX711.h"
// Definisi Pin Sensor Ultrasonik
#define TRIG_PIN 9
#define ECHO_PIN 10
// Definisi Pin Load Cell (HX711)
#define DOUT_PIN 2
#define SCK_PIN 3
// Definisi Pin Output (LED & Buzzer)
#define LED_HIJAU 4
#define LED_KUNING 5
#define LED_MERAH 6
#define BUZZER 7
HX711 scale;
// Pengaturan dimensi tong (Contoh: tinggi tong 50 cm)
float tinggi_total_tong = 50.0;
void setup() {
Serial.begin(9600);
// Inisialisasi Pin Output
pinMode(LED_HIJAU, OUTPUT);
pinMode(LED_KUNING, OUTPUT);
pinMode(LED_MERAH, OUTPUT);
pinMode(BUZZER, OUTPUT);
// Inisialisasi Sensor
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
scale.begin(DOUT_PIN, SCK_PIN);
scale.set_scale(420.0);
scale.tare();
// Pesan pembuka saat terminal pertama kali aktif
Serial.println("--- SYSTEM SMART TRASH BIN ACTIVE ---");
Serial.println("-------------------------------------");
}
void loop() {
// 1. Membaca Sensor Ultrasonik
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long durasi = pulseIn(ECHO_PIN, HIGH);
float jarak_sampah = durasi * 0.034 / 2;
float tinggi_sampah = tinggi_total_tong - jarak_sampah;
if (tinggi_sampah < 0) tinggi_sampah = 0;
float persentase_penuh = (tinggi_sampah / tinggi_total_tong) * 100.0;
if (persentase_penuh > 100) persentase_penuh = 100.0;
// 2. Membaca Sensor Load Cell
float berat_kg = scale.get_units(1);
if (berat_kg < 0) berat_kg = 0.0;
// 3. Logika Indikator LED & Buzzer dan Penentuan Status Teks
String status_tong = "";
if (persentase_penuh < 50.0) {
status_tong = "KOSONG / AMAN";
digitalWrite(LED_HIJAU, HIGH);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, LOW);
noTone(BUZZER);
}
else if (persentase_penuh >= 50.0 && persentase_penuh < 80.0) {
status_tong = "HAMPIR PENUH";
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_KUNING, HIGH);
digitalWrite(LED_MERAH, LOW);
noTone(BUZZER);
}
else {
status_tong = "SUDAH PENUH (WARNING!)";
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_KUNING, LOW);
digitalWrite(LED_MERAH, HIGH);
tone(BUZZER, 1000);
}
// 4. Menampilkan Data dengan Keterangan Lengkap di Terminal
Serial.print("Jarak Sampah: ");
Serial.print(jarak_sampah, 1);
Serial.print(" cm | Kapasitas: ");
Serial.print(persentase_penuh, 1);
Serial.print("% | Berat: ");
Serial.print(berat_kg, 2);
Serial.print(" kg | Status: ");
Serial.println(status_tong);
Serial.println("-----------------------------------------------------------------"); // Pembatas antardata
delay(1000); // Dijeda 1 detik agar teks di terminal tidak bergulir terlalu cepat
}