What it does The “Smart Bin” is an automated trash receptacle that opens its lid automatically when it detects a user's hand approach. Additionally, it continuously monitors the internal trash level, providing comprehensive feedback through an LCD display (showing the exact fill percentage and system status), an LED interface (Green, Yellow, Red for quick visual capacity indication), and an active buzzer (emitting an auditory warning while refusing to open if the bin is completely full).
The purpose of the project The main purpose is to create a hygienic, hands-free waste disposal experience while preventing the common issue of overfilling the bin.
The initial idea The idea stems from the everyday inconvenience of disposing of messy waste (e.g., while cooking) without dirtying the bin's lid. Furthermore, in shared spaces (offices, kitchens), bins often get overfilled because people don't realize the capacity is reached until they force the lid open. Combining motion-sensing opening with a precise, screen-based capacity-monitoring system solves both issues effectively.
Why it is useful This project is highly useful for improving hygiene and sanitation in environments like hospitals, kitchens, or public restrooms by eliminating cross-contamination. For the user, the addition of an LCD display provides clear, precise data regarding the bin's status and when it's time to empty the trash, ultimately promoting better waste management habits.
The system is built around a central microcontroller (AVR ATmega328p) which acts as the main processing unit, orchestrating the inputs and outputs through a non-blocking state machine design. The main loop evaluates sensor data every 500ms to ensure real-time responsiveness without overloading the processor.
Interaction Flow:
The system operates in three main states: CLOSED, OPEN, and COOLDOWN.
CLOSED state.To build this project, the following hardware components are used:
The project is currently in the advanced breadboard prototyping phase. All critical hardware subsystems (distance measurement, visual/auditory feedback, and PWM mechanical actuation) have been successfully wired, integrated, and validated against the microcontroller's logic. The finite state machine correctly drives the hardware inputs and outputs without blocking the CPU execution. The next planned step is the physical mechanical assembly onto the bin chassis and soldering the I2C backpack to the LCD module for the final interface integration.
The hardware pinout was carefully designed to map specific components to their required internal AVR hardware modules, while explicitly avoiding the SPI pins (PB2-PB5) to prevent programming (ISP) conflicts during development.
| Component | ATmega328P Pin | Signal Type | Technical Justification |
|---|---|---|---|
| Green LED | PD2 | Digital OUT | Standard GPIO for state indication. |
| Yellow LED | PD3 | Digital OUT | Standard GPIO for state indication. |
| Red LED | PD4 | Digital OUT | Standard GPIO for state indication. |
| Active Buzzer | PD5 | Digital OUT | Standard GPIO. Active buzzers require only a high DC voltage to emit sound. |
| Trig 0 (Exterior) | PC0 | Digital OUT | Moved to Port C to avoid SPI line interference during USB code flashing. |
| Echo 0 (Exterior) | PC1 | Digital IN | General input for reading the 10µs ultrasonic echo pulse length. |
| Trig 1 (Interior) | PC2 | Digital OUT | Mapped to Port C for grouping and clean breadboard wiring. |
| Echo 1 (Interior) | PC3 | Digital IN | Input for reading the interior trash level echo. |
| Servo Motor | PB1 (OC1A) | PWM OUT | Driven by the 16-bit Timer1 Output Compare register (OC1A) to ensure a highly stable and precise 50Hz PWM signal for servo angle control. |
| LCD I2C SDA | PC4 | I2C Data | Hardwired internal TWI (Two-Wire Interface) data line on the AVR. |
| LCD I2C SCL | PC5 | I2C Clock | Hardwired internal TWI (Two-Wire Interface) clock line on the AVR. |
The electrical circuit utilizes the breadboard's side power rails as a central power distribution bus.
The images below demonstrate the successful wiring and the functional proof of the hardware logic running on the microcontroller.
1. General Breadboard Prototyping Setup
Explanation: This image presents the complete hardware prototype. The components are wired using the power rails for optimal cable management. The HC-SR04 sensors, the servo, and the LED/Buzzer sub-circuit are successfully interfaced with the Xplained Mini board.
2. Proof of Functionality: The Interlocking Logic (Full Capacity)
Explanation: This test validates the interlocking safety state. An obstacle is placed physically close (< 7cm) to the interior ultrasonic sensor (simulating a trash capacity of > 85%). The microcontroller correctly processes the echo timing, updates the logic state, and physically turns on the Red LED. Simultaneously, the active buzzer is triggered on pin PD5, and the servo motor is software-locked, proving that the hardware responds accurately to environmental inputs.
Currently, the software component is fully functional and successfully integrated with the hardware. The project has been migrated to a modern development environment (PlatformIO), utilizing a hybrid C/C++ architecture.
The core logic of the system (sensor reading, PWM signal generation, LED and buzzer control) is implemented bare-metal (in pure C language, through direct manipulation of AVR registers). To ensure the stability of the Human-Machine Interface (HMI), the upper level of the application uses the Arduino framework (main.cpp), allowing the integration of previously written C modules via the extern “C” directive and managing the LCD screen through a dedicated C++ library. The finite state machine runs correctly, with the system being able to process data in real time without blocking.
Although a large part of the code was written from scratch to maintain strict control over hardware resources, certain libraries were strategically chosen to streamline development and guarantee stability:
Compared to a standard automatic trash bin (which only opens a lid upon motion detection), the novelty of this project lies in the dynamic internal volume calculation and monitoring system, supported by a “self-healing” algorithm (self-healing logic). The system doesn't just measure a distance; it continuously interpolates the fill percentage, automatically adjusting outlier values (e.g., clamping values that exceed the physical depth of the bin). Additionally, the implementation of an Interlocking (Safety Lock) state represents a practical innovation: if the system detects a capacity over 85%, it mechanically refuses to open the lid to prevent overfilling and physical jamming of the trash, simultaneously alerting the user visually and acoustically.
The project integrates multiple concepts studied in the laboratory, utilized as follows:
TCCR1A, TCCR1B) in Fast/Phase Correct PWM mode to generate a precise 50Hz signal on pin PB1 (OC1A). The ICR1 register defines the period, and OCR1A is dynamically manipulated to control the pulse width (1ms - 2ms), determining the exact angle of the servo motor.get_milis()), essential for the non-blocking operation of the system.sei() function, these allow timers to run in the background (e.g., generating overflows for time calculation and ultrasonic sensor pulses) without blocking the main program execution.UBRR0 and UCSR0 registers, the USART module was vital during development for debugging. All sensor data and state changes were printed in real-time to the terminal, allowing for precise distance calibration.PC4 (SDA) and PC5 (SCL), thus saving valuable GPIO pins.DDRx) and data (PORTx) registers, guaranteeing instantaneous execution and a minimal memory footprint.
Code Architecture:
The project is strictly modularized, with each hardware component having its own set of header and source files (e.g., usart.h, timer.h, ultrasonic.h, servo.h, leds.h, buzzer.h). This structure decouples the sensor logic from the main application. The main.cpp file acts as an orchestrator.
Feature Interaction:
The core logic is based on a Finite State Machine (FSM) with three main states: CLOSED_STATE, OPEN_STATE, and COOLDOWN_STATE.
The heart of the system is a completely non-blocking loop. Instead of using blocking functions like delay(), the system uses asynchronous time evaluations (current_time - last_read >= 500).
CLOSED_STATE, it reads both ultrasonic sensors. It calculates the trash level and updates the interface (LEDs and LCD).OCR1A), and the system transitions to the OPEN_STATE.COOLDOWN_STATE to allow the lid to close smoothly.Validation Methodology: Each module was independently tested and validated (Unit Testing at the hardware level).