|
| 1 | +# STM32 Rubik's Cube Solver |
| 2 | + |
| 3 | +A smart robotic system that uses mobile computer vision to analyze a Rubik's Cube and an STM32-controlled mechanical frame to solve it. |
| 4 | + |
| 5 | +:::info |
| 6 | + |
| 7 | +Author: Matei Stănuca |
| 8 | + |
| 9 | +GitHub Project Link: [Rubiks Cube Solver](https://github.com/UPB-PMRust-Students/acs-project-2026-mateistanuca1) |
| 10 | + |
| 11 | +::: |
| 12 | + |
| 13 | +## Description |
| 14 | + |
| 15 | +This project is an end-to-end automated solver. It uses a smartphone camera to scan all six faces of the Rubik's Cube. The mobile application processes the images to identify the color configuration and calculates the optimal solution using the Kociemba algorithm. The resulting move sequence is transmitted to an STM32 microcontroller, which executes the physical rotations using six NEMA 17 stepper motors. |
| 16 | + |
| 17 | +## Motivation |
| 18 | + |
| 19 | +The goal is to integrate high-level software (Computer Vision and Pathfinding) with low-level hardware control. By using a smartphone as the sensor, I can leverage its high-resolution camera and processing power to simplify the hardware setup while creating a seamless user experience where a simple scan leads to a physical solution. |
| 20 | + |
| 21 | +## Architecture |
| 22 | + |
| 23 | +The system operates in three main stages: |
| 24 | + |
| 25 | +1. Vision Layer: Smartphone app captures and parses the cube's state. |
| 26 | + |
| 27 | +2. Communication Layer: Data is sent via UART (Serial) or Bluetooth/Wi-Fi to the STM32. |
| 28 | + |
| 29 | +3. Execution Layer: STM32 coordinates six A4988 drivers to perform the moves. |
| 30 | + |
| 31 | +## Log |
| 32 | + |
| 33 | +### Week 5 - 11 May |
| 34 | + |
| 35 | +### Week 12 - 18 May |
| 36 | + |
| 37 | +### Week 19 - 25 May |
| 38 | + |
| 39 | +## Hardware |
| 40 | + |
| 41 | +The system is powered by an STM32 Nucleo board. The mechanical assembly uses six NEMA 17 motors, each equipped with a 3D-printed adapter. |
| 42 | + |
| 43 | +### Schematics |
| 44 | + |
| 45 | + |
| 46 | + |
| 47 | + |
| 48 | + |
| 49 | +### Bill of Materials |
| 50 | + |
| 51 | +## Software |
| 52 | + |
| 53 | +| Library | Description | Usage | |
| 54 | +|---------|-------------|-------| |
| 55 | +| [embassy-stm32](https://github.com/embassy-rs/embassy) | STM32 HAL for Embassy | Used for GPIO, ADC and timers/PWM | |
| 56 | +| [embassy-executor](https://github.com/embassy-rs/embassy) | Async task executor | Runs the main application logic | |
| 57 | +| [embassy-time](https://github.com/embassy-rs/embassy) | Timekeeping and delays | Used for timing and sensor polling | |
| 58 | +| [embedded-hal](https://github.com/rust-embedded/embedded-hal) | Hardware abstraction layer | Standard interface for peripherals | |
| 59 | +| [defmt](https://github.com/knurling-rs/defmt) | Lightweight logging framework | Used for debugging and logging | |
| 60 | +| [defmt-rtt](https://github.com/knurling-rs/defmt) | RTT logging transport | Sends logs to the PC | |
| 61 | +| [panic-probe](https://github.com/knurling-rs/probe-run) | Panic handler | Used for debugging crashes | |
| 62 | +| [imageproc](https://crates.io/crates/imageproc) | Vision library | Parsing cube colors from camera | |
| 63 | + |
| 64 | + |
| 65 | +## Links |
| 66 | + |
| 67 | +<!-- Add a few links that inspired you and that you think you will use for your project --> |
| 68 | + |
| 69 | +1. [Teseract Rubiks Cuber Robot](https://www.instructables.com/Tesseract-Rubiks-Cube-Robot/) |
0 commit comments