//Stepper: Memindahkan sampah dalam rumah ke luar rumah
#include <Stepper.h>
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
//Servo Atas: Membuka tutup sampah
#include <Servo.h>
Servo myservo;
int pos = 0;
#define pinServoAtas 2
//Servo Bawah: Membuka jalur pembuangan sampah
Servo myservo2;
#define pinServoBawah 5
//Sensor Ultrasonik: Mengukur jarak tangan ketika akan membuang sampah
float cm;
float inches;
#define pinTrigAtas 3
#define pinEchoAtas 4
long readUltrasonicDistance(int triggerPin, int echoPin)
{
pinMode(triggerPin, OUTPUT); // Clear the trigger
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
// Sets the trigger pin to HIGH state for 10 microseconds
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
pinMode(echoPin, INPUT);
// Reads the echo pin, and returns
// the sound wave travel time in microseconds
return pulseIn(echoPin, HIGH);
}
//Sensor Berat: Membuang sampah kalau beratnya sudah 3 kg, ini dari chatgpt
#include "HX711.h"
#define DT 6
#define SCK 7
HX711 scale;
float calibration_factor = 420;
//LCD
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
//LED
#define pinEmpty A3
#define pinFull A2
//Button
#define pinButton 12
bool isButtonActive = false;
void setup() {
myStepper.setSpeed(60);
myservo.attach(pinServoAtas);
myservo2.attach(pinServoBawah);
Serial.begin(9600);
scale.begin(DT, SCK);
scale.set_scale(calibration_factor);
scale.tare(); //beratnya dibuat ke 0
lcd.init();
lcd.backlight();
pinMode(pinFull, OUTPUT);
pinMode(pinEmpty, OUTPUT);
pinMode(pinButton, INPUT_PULLUP);
}
void loop() {
// delay(500);
cm = 0.0344/2 * readUltrasonicDistance(pinTrigAtas, pinEchoAtas);
myservo.write(pos);
myservo2.write(0);
float weight = scale.get_units();
lcd.setCursor(1, 0);
lcd.print("Berat:");
lcd.setCursor(1, 1);
lcd.print(weight);
lcd.setCursor(6, 1);
lcd.print("kg");
if(cm < 30) {
if(pos < 90) {
for(int x = 0; x < 90; x += 2) {
myservo.write(pos);
delay(15);
pos += 2;
}
}
} else {
if(pos > 0) {
for(int x= 90; x > 0; x -= 2) {
myservo.write(pos);
delay(15);
pos -= 2;
}
}
else {
}
if(weight > 3) {
digitalWrite(pinFull, HIGH);
digitalWrite(pinEmpty, LOW);
myservo2.write(90);
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);
} else if (weight > 1) {
digitalWrite(pinFull, HIGH);
digitalWrite(pinEmpty, LOW);
isButtonActive = true;
if (isButtonActive && digitalRead(pinButton) == LOW) {
myservo2.write(90);
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);
}
} else {
digitalWrite(pinEmpty, HIGH);
digitalWrite(pinFull, LOW);
isButtonActive = false;
myservo2.write(0);
}
}
}