Waste collection is one of the most important public services in any city. Currently, most municipalities have a fixed schedule with fixed routes for collecting garbage, and this can result in various inefficiencies: sometimes garbage trucks pick up trash cans that were almost empty, and sometimes overflowing cans are left in this state for days. This is because with a traditional approach the state of a trash can is unknown until the operator goes physically where the can is located. These problems can be overcome by making the trash cans smart, i.e. placing a sensor in each can to detect the garbage fill level, and periodically sending this data to a central server: in this way, waste collection schedules and routes can be optimized based on the actual need, increasing the level of service and decreasing costs.