//kotak sampah otomatis
// https://www.youtube.com/@hendrykurniawan
#include <Servo.h>
#define ECHO_PIN 8
#define TRIG_PIN 9
#define PIN_SERVO A0
Servo myservo;
float distance;
void setup()
{
myservo.attach(PIN_SERVO);
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
myservo.write(0);
delay(500);
}
void loop()
{
//Tutup terbuka cepat, tunda beberapa saat, lalu tutup tertutup dengan lambat
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
float distance = duration * 0.034 / 2;
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
if(distance<=30)
{
//servoSpeed(Servo servo, int sudut, uint8_t Speed)
servoSpeed(myservo, 110, 255); //100 derajat, speed full 255
Serial.println("Kondisi Kotak Sampah Terbuka");
delay(3000);
servoSpeed(myservo, 0, 100); //0 derajat, speeed lambat 100
Serial.println("Kondisi Kotak Sampah Tertutup1");
servoSpeed(myservo, 0, 0); //stop
Serial.println("standbye1");
delay(500);
}
else
{
servoSpeed(myservo, 0, 0); //Stop
Serial.println("standbye2");
delay(500);
}
}
void servoSpeed(Servo servo, int sudut, uint8_t Speed)
{
if(Speed == 0)
{
return;
}
int posisiSekarang = servo.read();
for (int i = posisiSekarang; i != sudut; (posisiSekarang > sudut) ? i-- : i++)
{
servo.write(i);
if (Speed > 174)
{
delayMicroseconds((256 - Speed) * 200);//0.12 detik/60 derajat
}
else
{
delay((uint16_t)(256 - Speed) * 0.2f);//0.12 detik/60 derajat
}
}
servo.write(sudut);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
servo1:GND
servo1:V+
servo1:PWM
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND