#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
// Inicializar pantalla LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Objetos para los servomotores
Servo servoVerde; // Biodegradables,Residuos Orgánicos
Servo servoAmarillo; // Aluminio,Metales
// Definición de pines (según esquema)
#define PIN_TRIG 9
#define PIN_ECHO 10
#define PIN_SERVO_VERDE 3
#define PIN_SERVO_AMARILLO 5
#define PIN_POTENCIOMETRO A0
const int LIMITE_DISTANCIA = 15; // en cm
void setup() {
// Conectar servos a sus pines
servoVerde.attach(PIN_SERVO_VERDE);
servoAmarillo.attach(PIN_SERVO_AMARILLO);
// Posición inicial cerrada (0 grados)
servoVerde.write(0);
servoAmarillo.write(0);
// Configuración del sensor ultrasónico
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
// Inicializar pantalla LCD
lcd.init();
lcd.backlight();
lcd.print("Sistema Listo...");
delay(2000);
lcd.clear();
}
void loop() {
// --- MEDIR DISTANCIA CON SENSOR ULTRASÓNICO ---
digitalWrite(2, HIGH);
delay(1);
digitalWrite(2, LOW);
long time = pulseIn(3,HIGH);
float dist = time*0.0343/2;
delay(200);
long duracion = pulseIn(PIN_ECHO, HIGH);
float distancia = duracion * 0.034 / 2; // Fórmula correcta en cm
// --- LEER VALOR DEL POTENCIÓMETRO ---
int valorColor = analogRead(PIN_POTENCIOMETRO);
lcd.clear();
// --- SI DETECTA UNA BASURA ---
if (distancia < LIMITE_DISTANCIA) {
// Bolsa Verde → Biodegradables,Residuos Orgánicos
if (valorColor < 80) {
lcd.setCursor(0, 0);
lcd.print("RESIDUOS,BIODEGRADABLES");
lcd.setCursor(0, 1);
lcd.print("Basura Verde");
servoVerde.write(90); // Abrir compuerta
delay(2000); // Tiempo para caer residuo
servoVerde.write(0); // Cerrar compuerta
}
// Bolsa Amarilla → Aluminio,Metales
else if (valorColor < 682) {
lcd.setCursor(0, 0);
lcd.print("ALUMINIO,METALES");
lcd.setCursor(0, 1);
lcd.print("Basura Amarilla");
servoAmarillo.write(90);
delay(2000);
servoAmarillo.write(0);
}
}
// --- SI NO HAY NADA ---
else {
lcd.setCursor(0, 0);
lcd.print("Esperando");
lcd.setCursor(0, 1);
lcd.print("Bolsa...");
}
delay(500); // Pequeña pausa antes de repetir
}