Efficient
Efficient
EFFICIENT SMART
WASTE
MANAGEMENT
A PROJECT REPORT
Submitted by
BACHELOR OF ENGINEERING
IN
MARCH 2025
SRI KRISHNA COLLEGE OF TECHNOLOGY
(An Autonomous Institution)
Approved by AICTE | Affiliated to Anna University Chennai|
Accredited by NBA - AICTE| Accredited by NAAC with ‘A’ Grade
KOVAIPUDUR, COIMBATORE 641042
BONAFIDE CERTIFICATE
SIGNATURE SIGNATURE
Certified that the candidate was examined by me in the Project Work Viva
Voce
641042.
First and foremost we thank the Almighty for being our light and for showering
his gracious blessings throughout the course of this project.
We express our gratitude to our beloved Principal, Dr. M.G. Sumithra, for
providing all facilities.
With the grateful heart, our sincere thanks to our Head of the Department Dr. M.
UDHAYAMOORTHI, Department of Computer Science and Engineering for the
motivation and all support to complete the project work.
We extend our sincere thanks to our family members and our beloved friends,
who had been strongly supporting us in all our endeavour
ABSTRACT
.
TABLE OF CONTENT
1 INTRODUCTION 1
2 SYSTEM SPECIFICATIONS 2
3 PROPOSED SYSTEM 3
4 METHODOLOGIES 4
6.1 CONCLUSION 23
7 REFERENCES 24
LIST OF FIGURES
1. Flow Diagram 5
2. ER Diagram 6
3. Class Diagram 6
4. Sequence Diagram 7
LIST OF ENDPOINTS
POST 8
GET 8
User
PUT 9
DELETE 9
POST 9
Route GET 10
PUT 10
POST 11
GET 12
Vehicle
PUT 13
DELETE 14
POST 20
GET 21
WasteBin
PUT 22
DELETE 23
CHAPTER 1
INTRODUCTION
The Smart Waste Efficient Management System is designed to optimize urban waste collection
by leveraging real-time monitoring, automated scheduling, and intelligent route optimization.
This system aims to enhance waste disposal efficiency, reduce operational costs, and minimize
environmental impact. It integrates IoT-enabled smart bins, GPS-tracked waste collection
vehicles, and data-driven decision-making to streamline waste management processes.
The platform ensures timely waste collection, prevents overflowing bins, and improves
resource allocation by analyzing historical waste collection patterns. The project serves as a
guideline for developers, stakeholders, and municipal authorities, providing a structured
approach to design, implementation, and deployment of an advanced waste management
solution suitable for smart city initiatives.
PROBLEM STATEMENT
Efficient waste collection remains a major challenge in urban areas, leading to
overflowing bins, inefficient route planning, and increased operational costs. Traditional waste
management systems lack real-time monitoring, resulting in delayed collection, excessive fuel
consumption, and poor resource allocation. Additionally, the absence of historical data analysis
prevents proactive decision-making, causing inefficiencies in scheduling and fleet utilization.
This project addresses these challenges by introducing a smart waste management system that
integrates IoT-enabled waste bins, real-time vehicle tracking, and AI-driven route optimization.
By leveraging automated bin status updates, predictive analytics, and optimized collection
schedules, the system enhances waste disposal efficiency, reduces environmental impact, and
improves overall urban cleanliness.
OVERVIEW
The Smart Waste Efficient Management System is an advanced waste collection platform
designed to monitor waste bin levels, optimize collection routes, and track waste disposal
vehicles in real-time. The system leverages IoT-enabled bins, GPS tracking, and AI-driven
analytics to enhance operational efficiency and reduce environmental impact. Waste management
authorities can analyze collection history, predict high-waste areas, and optimize fleet utilization
for cost-effective and timely waste disposal.
The system features a robust backend for managing waste collection schedules, vehicle
assignments, and historical data analytics, ensuring seamless coordination between waste bins,
collection vehicles, and municipal authorities. By integrating automated waste monitoring,
predictive analytics, and intelligent route planning, the project aims to improve urban cleanliness,
minimize operational inefficiencies, and support sustainable smart city initiatives.
OBJECTIVE
• Develop an intelligent waste management system for efficient monitoring and collection of
waste.
• Implement real-time waste bin tracking to prevent overflow and ensure timely collection.
• Optimize waste collection routes using AI-driven analytics to reduce fuel consumption and
operationalcosts.
• Enable GPS-based vehicle tracking for efficient fleet management and resource allocation.
• Maintain historical waste collection data to support predictive analytics and proactive decision-
making.
• Enhance urban cleanliness and sustainability by minimizing environmental impact through
data- driven waste disposal.
CHAPTER 2
SYSTEM SPECIFICATION
In this chapter, we are going to see the software that we have used to build the website. This
chapter gives you a small description about the software used in the project.
1. TECHNOLOGIES USED
The Java Virtual Machine (JVM) executes Java bytecode, ensuring platform
independence and performance optimization. The Java Runtime Environment (JRE)
includes libraries and components necessary to run Java applications, making it essential for
executing the system’s backend services.
Visual Studio Code (VS Code) is a lightweight but powerful source code editor
that supports Java development with extensions for debugging, syntax highlighting, and
integrated terminal functionality. It enhances developer productivity through an intuitive
interface and extensive plugin support.
CHAPTER 3
PROPOSED
SYSTEM
The proposed Smart Waste Efficient Management System aims to provide an automated, data-
driven solution for urban waste collection, optimizing bin monitoring, vehicle tracking, and
route planning. The system ensures timely waste collection, minimizes operational
inefficiencies, and supports sustainable waste disposal practices. It offers a centralized platform
for managing waste bin levels, vehicle dispatching, and historical waste data analysis to
enhance decision-making and resource allocation.
Smart Bin Monitoring: Real-time waste level tracking using IoT sensors.
Route Optimization: AI-driven collection route planning to minimize fuel consumption.
Vehicle Tracking: GPS-based tracking for real-time fleet management.
Historical Data Analysis: Predictive analytics for waste generation trends and
optimized scheduling.
Automated Alerts: Notifications for full bins, missed collections, and vehicle status
updates.
Admin Dashboard: Centralized platform for monitoring waste collection status and
system insights.
Automated Waste Monitoring: Prevents bin overflow and ensures timely collection..
Optimized Resource Utilization: AI-driven route planning reduces fuel costs and
labor inefficiencies..
Improved Urban Cleanliness: Real-time tracking and predictive analytics enhance
waste management.
Reduced Environmental Impact: Minimizes unnecessary trips, lowering carbon
emissions.
Data-Driven Decision Making: Historical data analysis helps optimize collection
schedules.
. Scalable Architecture: Adaptable for integration into smart city infrastructure.
CHAPTER 4
METHODOLOGIES
1. UserManagement
The system allows users to register, log in, and manage their accounts. Role-based
access control ensures that only authorized personnel can perform specific
operations.WasteBinMonitoring
The system tracks waste bin fill levels and updates the database in real-time.
Sensors or manual updates trigger alerts when bins need collection.
2. Collection Management
Waste collection activities are recorded, and assigned personnel can update
collection statuses. This ensures proper documentation of waste disposal.
3. Anomaly Detection
The system analyzes waste collection patterns and flags irregular activities, such as
missed pickups or unauthorized dumping, for further review.
4. Data Management & Reporting
The platform maintains structured data on waste bins, collection schedules, and
assigned personnel. Reports can be generated to analyze trends and optimize
operations.
Flow Diagram:
4.2 ER Diagram
Class Diagram :
Sequence Diagram:
4.4 Sequence Diagram
This chapter provides an overview of the output produced by developing the backend of
our Smart Waste Efficient Management System. The API (Application Programming Interface)
endpoints were created using Spring Boot and can be tested and viewed through tools such as
Swagger-UI and Thunderclient. These endpoints allow smooth interaction between users and the
system and cover essential CRUD operations using HTTP methods like GET, POST, PUT, and
DELETE.
5.1 CODING :
Entities :
User.java
package com.example.demo.entities;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.util.List;
import javax.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import
lombok.AllArgsConstructor;
@Entit
@Data
@NoArgsConstructo
@AllArgsConstructo
@Id
//@GeneratedValue(strategy = GenerationType.IDENTITY)
role;
// Mapping to WasteBins
@JsonIgnore
// Mapping to Routes
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch =
FetchType.LAZY) @JsonIgnore
Route.java
package
com.example.demo.entities; import
java.util.List;
import javax.persistence.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.NoArgsConstructor;
import
lombok.AllArgsConstructor;
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructo
@ManyToOne
@JoinColumn(name = "user_id")
@JsonIgnore
@OneToMany(mappedBy = "route")
Vehicle.java
package
com.example.demo.entities; import
javax.persistence.Entity;
import
javax.persistence.GeneratedValue;
import
javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import
javax.persistence.ManyToOne;
import javax.persistence.Table;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.*;
@Entity
@Table(name = "vehicles")
@Data
@NoArgsConstructor
@AllArgsConstructo
r
@Builder
{ @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@ManyToOne
@JoinColumn(name = "route_id")
@JsonIgnore
WasteBin.java
package
com.example.demo.entities; import
javax.persistence.*;
import
com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.NoArgsConstructor;
import
lombok.AllArgsConstructor;
@Entity
@Data
@NoArgsConstructo
r
@AllArgsConstructor
// @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String
location;
@ManyToOne
@JoinColumn(name = "user_id")
@JsonIgnore
Repository :
UserRepository.java
package com.example.demo.repositories;
import com.example.demo.entities.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import
org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
RouteRepository.java
Package com.example.demo.repositories;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.demo.entities.Route;
}
VehicleRepository.java
package com.example.springapp.repositories;
import com.example.springapp.entities.Grocery;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import
org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
@Repository
WasteBinRepository.java
package com.example.demo.repositories;
import com.example.demo.entities.WasteBin;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import
org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
Service :
UserService.java
package com.example.demo.service;
import com.example.demo.entities.User;
import com.example.demo.repositories.UserRepository;
import
org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
@Autowired
return userRepository.save(user);
}
public List<User> getAllUsers()
{ return userRepository.findAll();
}
public Page<User> getUsers(Pageable pageable)
{ return userRepository.findAll(pageable);
}
public Optional<User> getUserById(Long id)
{ return userRepository.findById(id);
}
public void deleteUserById(Long id) {
userRepository.deleteById(id);
userRepository.deleteAll();
return userRepository.save(user);
}
public User updateUser(Long id, User user) {
user.setId(id);
return userRepository.save(user);
}
public void deleteUser(Long id) {
userRepository.deleteById(id);
RouteService.java
package com.example.demo.service;
import
com.example.demo.entities.Route;
import com.example.demo.repositories.RouteRepository;
import
org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class RouteService {
@Autowired
return routeRepository.save(route);
}
public List<Route> getAllRoutes() {
return routeRepository.findAll();
{ return routeRepository.findAll(pageable);
}
public Optional<Route> getRouteById(Long id)
{ return routeRepository.findById(id);
}
public void deleteRouteById(Long id) {
routeRepository.deleteById(id);
}
public void deleteAllRoutes() {
routeRepository.deleteAll();
VehicleService.java
package com.example.demo.service;
import
com.example.demo.entities.Vehicle;
import com.example.demo.repositories.VehicleRepository;
import lombok.RequiredArgsConstructor;
import
org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
@RequiredArgsConstructor
return vehicleRepository.findAll();
}
public Optional<Vehicle> getVehicleById(Long id) {
return vehicleRepository.findById(id);
}
public Vehicle saveVehicle(Vehicle vehicle) {
return vehicleRepository.save(vehicle);
}
public void deleteVehicle(Long id)
{ vehicleRepository.deleteById(id
);
WasteBinService.java
package com.example.demo.service;
import com.example.demo.entities.WasteBin;
import com.example.demo.repositories.WasteBinRepository;
import
org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class WasteBinService {
@Autowired
return wasteBinRepository.findAll();
return wasteBinRepository.findAll(pageable);
return wasteBinRepository.findById(id);
//jpql
public List<WasteBin> findMalfunctioningWasteBins() {
return
wasteBinRepository.findMalfunctioningWasteBins();
//jpql
public List<WasteBin> searchWasteBinsByLocation(String location) {
return wasteBinRepository.findByLocationContaining(location);
return wasteBinRepository.save(wasteBin);
}
public void deleteWasteBinById(Long id)
{ wasteBinRepository.deleteById(id);
{ wasteBinRepository.deleteAll(
);
Controller :
UserController.java
package com.example.demo.controller;
import com.example.demo.entities.User;
import com.example.demo.service.UserService;
import
org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import
org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/users")
@Autowired
private UserService userService;
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
return ResponseEntity.ok(savedUser);
@PutMapping("/{id}")
{ user.setId(id);
User updatedUser = userService.saveUser(user);
return ResponseEntity.ok(updatedUser);
@GetMapping
public ResponseEntity<List<User>> getAllUsers()
return ResponseEntity.ok(users);
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id)
@GetMapping("/paginated")
public ResponseEntity<Page<User>> getUsersPaginated(
return ResponseEntity.ok(users);
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id)
{ userService.deleteUserById(id);
return ResponseEntity.noContent().build();
@DeleteMapping("/deleteAll")
public ResponseEntity<Void> deleteAllUsers() {
userService.deleteAllUsers();
return ResponseEntity.noContent().build();
VehicleController.java
package com.example.demo.controller;
import com.example.demo.entities.Vehicle;
import
com.example.demo.service.VehicleService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import
org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/vehicles")
@RequiredArgsConstructor
@GetMapping
public ResponseEntity<List<Vehicle>> getAllVehicles() {
return
ResponseEntity.ok(vehicleService.getAllVehicles());
@GetMapping("/{id}")
return vehicleService.getVehicleById(id)
.map(ResponseEntity::ok).orElse(ResponseEntity.notFound().build());
@PutMapping("/{id}")
return vehicleService.getVehicleById(id)
.map(existingVehicle -> {
existingVehicle.setStatus(updatedVehicle.getStatus());
existingVehicle.setCurrentLocation(updatedVehicle.getCurrentLocation());
existingVehicle.setCapacity(updatedVehicle.getCapacity());
return ResponseEntity.ok(vehicleService.saveVehicle(existingVehicle));
})
.orElse(ResponseEntity.notFound().build());
@PostMapping
public ResponseEntity<Vehicle> createVehicle(@RequestBody Vehicle vehicle) {
return ResponseEntity.ok(vehicleService.saveVehicle(vehicle));
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteVehicle(@PathVariable Long id)
{ vehicleService.deleteVehicle(id);
return ResponseEntity.noContent().build();
}
RouteController.java
package com.example.demo.controller;
import com.example.demo.entities.Route;
import
com.example.demo.service.RouteService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.http.ResponseEntity;
import
org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.logging.Logger;
@RestController
@RequestMapping("/route")
@Autowired
@PostMapping
public ResponseEntity<Route> createRoute(@RequestBody Route route)
return ResponseEntity.ok(savedRoute);
@PutMapping("/{id}")
public ResponseEntity<Route> updateRoute(@PathVariable Long id, @RequestBody Route route) {
route.setId(id);
Route updatedRoute = routeService.saveRoute(route);
return ResponseEntity.ok(updatedRoute);
@GetMapping("/paginated")
? Sort.Direction.ASC
: Sort.Direction.DESC;
Pageable pageable = PageRequest.of(page, size, Sort.by(direction,
return ResponseEntity.ok(routes);
@GetMapping
public ResponseEntity<List<Route>> getAllRoutes()
return ResponseEntity.ok(routes);
@GetMapping("/{id}")
return routeService.getAllRoutes().stream()
.findFirst()
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteRoute(@PathVariable Long id) {
routeService.deleteRouteById(id);
return ResponseEntity.noContent().build();
@DeleteMapping("/deleteAll")
routeService.deleteAllRoutes();
return ResponseEntity.noContent().build();
WasteBinController.java
package com.example.demo.controller;
import
com.example.demo.entities.WasteBin;
import com.example.demo.service.WasteBinService;
import
org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.http.ResponseEntity;
import
org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/wastebins")
@Autowired
@PostMapping
return ResponseEntity.ok(savedWasteBin);
@PutMapping("/{id}")
public ResponseEntity<WasteBin>
updateWasteBin(@PathVariable Long id, @RequestBody WasteBin wasteBinDetails) {
return wasteBinService.findWasteBinById(id)
.map(wasteBin -> {
wasteBin.setLocation(wasteBinDetails.getLocation());
wasteBin.setFillLevel(wasteBinDetails.getFillLevel());
wasteBin.setMalfunctioning(wasteBinDetails.isMalfunctioning());
return ResponseEntity.ok(updatedWasteBin);
})
.orElse(ResponseEntity.notFound().build());
@GetMapping
return ResponseEntity.ok(wasteBins);
}
@GetMapping("/{id}")
return wasteBinService.findWasteBinById(id).map(ResponseEntity::ok).orElse(ResponseEntity.notFound
).build());
@GetMapping("/paginated")
public ResponseEntity<Page<WasteBin>> getWasteBinsPaginated(
return ResponseEntity.ok(wasteBins);
@GetMapping("/malfunctioning")
public ResponseEntity<List<WasteBin>> getMalfunctioningWasteBins() {
return ResponseEntity.ok(malfunctioningBins);
@GetMapping("/search")
return ResponseEntity.ok(bins);
@DeleteMapping("/{id}")
{ wasteBinService.deleteWasteBinById(id);
return ResponseEntity.noContent().build();
@DeleteMapping("/deleteAll")
public ResponseEntity<Void> deleteAllWasteBins()
{ wasteBinService.deleteAllWasteBins();
return ResponseEntity.noContent().build();
Response Body:
5.2.2 User Controller ( GET )
Request Body :
Response Body:
Request Body :
Response Body:
5.2.4 User Controller ( DELETE )
API Endpoints : /api/users/{id}
Request Body :
Response Body:
5.2.5 UserController(Get/paginated)
Request Body :
Response Body:
5.2.6 UserController(Delete All)
Request Body :
Response Body:
5.3.1
RouteController(POST)
RequestBody:
ResponseBody:
5.3.2 Route Controller ( Put )
Request Body :
Response Body:
5.3.3 Route Controller (GET )
Request Body :
Response Body :
5.3.4 Route Controller ( Getbyid )
Request Body :
Response Body :
Request Body :
Response Body:
5.3.6 RouteController ( deletebyid)
Request Body :
Response Body:
Request Body :
Response Body:
5.4.1 VehicleController(POST)
Request Body:
Response Body:
5.4.2 VehicleController(Put by
id) API
Endpoints:api/vehicle/{id}
RequestBody:
ResponseBody:
RequestBody:
ResponseBody:
5.4.4 VehicleController (get by
api/vehicle/{id} RequestBody:
Response Body:
5.4.5 VehicleController(delete by
id) API Endpoints:api/vehicle/{id}
RequestBody:
ResponseBody:
5.5.1 WasteBinController(POST
) API Endpoints:api/wastebins/
RequestBody:
ResponseBody:
5.5.2 WasteBinController(Put by
api/wastebins/{id} RequestBody:
ResponseBody:
5.5.3 WasteBinController(get
) API
Endpoints:api/wastebins/
RequestBody:
ResponseBody:
5.5.4 WasteBinController(get by
id) API
Endpoints:api/wastebins/{id}
RequestBody:
ResponseBody:
5.5.5 WasteBinController(get by
api/wastebins/search RequestBody:
ResponseBody:
5.5.6 WasteBinController(get by
malfunctioning) API
Endpoints:api/wastebins/malfunctioning
RequestBody:
ResponseBody:
5.5.7 WasteBinController(get
api/wastebins/paginated RequestBody:
ResponseBody:
5.5.8 WasteBinController(delete by
id) API Endpoints:api/wastebins/{id}
RequestBody:
ResponseBody:
5.5.9 WasteBinController(delete
all) API Endpoints: api/wastebins/
RequestBody:
ResponseBody:
CHAPTER 6
CONCLUSION
The Smart Waste Efficient Management System is a comprehensive solution designed to enhance
waste collection efficiency, route optimization, and real-time monitoring in urban environments.
The system integrates key features such as IoT-enabled waste bin tracking, AI-driven route
By automating bin status updates and optimizing collection routes, the platform reduces
operational costs, minimizes fuel consumption, and improves overall waste disposal efficiency.
The real-time tracking and predictive analytics empower waste management authorities to make
Furthermore, the system provides insightful analytics on waste generation patterns, allowing
administrators to forecast high-waste areas and adjust collection strategies accordingly. The
integration of GPS-based vehicle tracking, automated alerts, and an interactive admin dashboard
ensures seamless coordination between waste collection teams, enhancing operational reliability
FUTURE SCOPE
monitor bin status, manage waste collection, and generate reports easily.
The system can be improved with automated notifications, alerting waste collectors and
Enhancing the anomaly detection system can help identify more patterns, such as delays in
The system can be optimized for larger deployments, ensuring better database performance,
handling more bins, and supporting future integrations with external systems.
REFERENCES
https://www.smartwastemanagement.com/
https://www.wastemanagement.gov/
https://www.urbancleancity.com
https://www.smartbintracker.com
https://www.recyclingandreuse.com