Sorty the conveyor belt
A conveyor belt that sorts items based on multiple tests .
Author: Preda Razvan-Ilie
GitHub Project Link: https://github.com/UPB-PMRust-Students/fils-project-2026-xrazvan06
Description
Sorty is a smart conveyor belt system that automatically sorts objects based on their properties, such as color, weight, height, and whether they contain metal. The system uses different sensors to detect these characteristics and an STM32 microcontroller to process the data . It uses a series of servo-motors to push the objects into a box which corresponds to their properties .
Motivation
I chose this project because conveyor belts are used in many real-life applications like factories, airports, supermarkets and many others.To increase the difficulty of the project, I decided to improve a simple conveyor belt by adding sensors and an automatic sorting system, so it can detect and classify objects based on different properties. Also it seemed interesting to try and build one from scratch .
Architecture
Log
Week 21 - 27 April
Ordered most of the sensors and motors needed for the project. Thought of a few ways of implementing the project.
Week 28 April - 4 May
Week 5 - 11 May
Week 12 - 18 May
Week 19 - 25 May
Hardware
STM32U545 (NUCLEO): The microcontroller .
Buck Converter (12V → 5V): Powers the STM32 and low-voltage components.
Stepper Motor + Driver: Drives the conveyor belt.
Servo Motors (x2): Used for sorting or gate control.
Sensors: Color sensor (TCS34725), metal detector, weight sensor (load cell + HX711), and distance sensor for object detection.
User Interface: LEDs, buttons, and buzzer for feedback and control.

Schematics
Bill of Materials
| Device | Usage | Price |
|---|---|---|
| STM32 Nucleo-U545RE-Q | The microcontroller | 110 RON |
| TCS34725 | RGB Color sensor | 19.73 RON |
| Load cell + HX711 | Weight sensor 5kg | 27.16 RON |
| VL53L0X (GY-530) | Measures height | 30 RON |
| IR Obstacle Sensor (LM393) | Detects objects | 20 RON x 2 |
| Inductive Sensor LJ12A34Z/BX | Detects metals | 15 RON |
| Buzzer | It is used as an alarm | 1 RON |
| LM2596 step-down | Lowers the voltage from ~12V to 5V | 13 RON |
Software
| Library | Description | Usage |
|---|---|---|
| embassy-stm32 | HAL for STM32 microcontrollers | Used to configure peripherals (GPIO, I2C, timers, ADC) |
| embassy-executor | Async task executor | Used to run concurrent tasks (sensors, motors, logic) |
| embassy-time | Async timers and delays | Used for delays, timeouts, and scheduling |
| embassy-sync | Synchronization primitives | Used for communication between tasks (signals, channels) |
| embassy-futures | Async utilities | Used for select/join between events (e.g. sensor vs timer) |
| embedded-hal | Hardware abstraction traits | Standard interface used by drivers (I2C, GPIO, PWM) |
| embedded-hal-async | Async HAL traits | Used with Embassy async drivers |
| cortex-m | Cortex-M support crate | Low-level MCU access |
| cortex-m-rt | Runtime for Cortex-M | Startup code and interrupt handling |
| defmt | Logging framework | Used for debugging over RTT |
| defmt-rtt | RTT transport for defmt | Sends logs to host PC |
| panic-probe | Panic handler | Prints panic messages using defmt |