#include <Servo.h>
#include <Ultrasonic.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servoMotor;
const int trig1 = 2;
const int echo1 = 5;
const int trig2 = 3;
const int echo2 = 6;
const int trig3 = 4;
const int echo3 = 7;
const int servoPin = 8;
long duration1, duration2, duration3;
int distance1, distance2, distance3;
void setup() {
pinMode(trig1, OUTPUT);
pinMode(echo1, INPUT);
pinMode(trig2, OUTPUT);
pinMode(echo2, INPUT);
pinMode(trig3, OUTPUT);
pinMode(echo3, INPUT);
servoMotor.attach(servoPin);
lcd.init();
lcd.backlight();
}
void loop() {
// Read data from Ultrasonic Sensor 1
digitalWrite(trig1, LOW);
delayMicroseconds(2);
digitalWrite(trig1, HIGH);
delayMicroseconds(10);
digitalWrite(trig1, LOW);
duration1 = pulseIn(echo1, HIGH);
distance1 = duration1 * 0.034 / 2;
delay(1000);
// Read data from Ultrasonic Sensor 2
digitalWrite(trig2, LOW);
delayMicroseconds(2);
digitalWrite(trig2, HIGH);
delayMicroseconds(10);
digitalWrite(trig2, LOW);
duration2 = pulseIn(echo2, HIGH);
distance2 = duration2 * 0.034 / 2;
delay(1000);
// Read data from Ultrasonic Sensor 3
digitalWrite(trig3, LOW);
delayMicroseconds(2);
digitalWrite(trig3, HIGH);
delayMicroseconds(10);
digitalWrite(trig3, LOW);
duration3 = pulseIn(echo3, HIGH);
distance3 = duration3 * 0.034 / 2;
// Display data on LCD I2C
lcd.setCursor(0,0);
lcd.print("Smart Trash Bin");
delay(3000);
lcd.clear();
if (distance1 <= 10) {
lcd.setCursor(2, 0);
lcd.print("Enter Trash !");
lcd.setCursor(3,1);
lcd.print("Thank You !");
servoMotor.write(90);
delay(2000); // Wait for the servo to move
lcd.clear();
}
lcd.setCursor(0, 0);
lcd.print("V.Organic :");
lcd.print(distance2);
lcd.setCursor(0, 1);
lcd.print("V.Unorganic :");
lcd.print(distance3);
delay(2000);
lcd.clear();
if (distance2 <= 5 && distance3 > 5) {
lcd.setCursor(2, 0);
lcd.print("Organic Full");
delay(2000);
lcd.clear();
}
else if (distance3 <= 5 && distance2 > 5) {
lcd.setCursor(1, 1);
lcd.print("Unorganic Full");
delay(2000);
lcd.clear();
}
else if (distance2 <= 5 && distance3 <= 5) {
lcd.setCursor(2, 0);
lcd.print("Organic Full");
lcd.setCursor(1, 1);
lcd.print("Unorganic Full");
delay(2000);
lcd.clear();
}
delayMicroseconds(2);
}