Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2026:radu_ion.balasa [2026/05/18 14:42]
127.0.0.1 external edit
pm:prj2026:radu_ion.balasa [2026/05/20 19:43] (current)
radu_ion.balasa [Software Design]
Line 1: Line 1:
 ====== Rubik'​s Cube Solver ====== ====== Rubik'​s Cube Solver ======
 **Autor:** Balasa Radu-Ion\\ **Autor:** Balasa Radu-Ion\\
-**Grupa:** 331CA +**Grupa:** 331CA\\ 
 +**Link github**: [[https://​github.com/​BalasaRadu/​rubik_solver/​tree/​main]]
 ==== Introducere ==== ==== Introducere ====
 Proiectul propune realizarea unui robot capabil sa rezolve un cub Rubik de tip 3x3x3, folosind o structura mecanica simpla si procesare externa. Sistemul foloseste puterea de calcul a unui laptop pentru a determina secventa optima de miscari, transmitand ulterior comenzile catre un microcontroler ESP32 care actioneaza motoarele. Proiectul propune realizarea unui robot capabil sa rezolve un cub Rubik de tip 3x3x3, folosind o structura mecanica simpla si procesare externa. Sistemul foloseste puterea de calcul a unui laptop pentru a determina secventa optima de miscari, transmitand ulterior comenzile catre un microcontroler ESP32 care actioneaza motoarele.
- 
-Obiectivul principal este demonstrarea controlului precis al servomotoarelor si al comunicarii seriale intre un PC si un sistem embedded. Sistemul este conceput sa permita introducerea manuala a starii cubului sub forma de text intr-o interfata dedicata. 
  
 ==== Descriere generala ==== ==== Descriere generala ====
Line 43: Line 41:
 ==== Software Design ==== ==== Software Design ====
 Proiectul foloseste doua medii de programare: Proiectul foloseste doua medii de programare:
-  ​**Python ​(Laptop):**  +== Modul de calcul ==  
-    * Modul pentru introducerea textului. +Este dezvoltat in python si contine urmatoarele etape: 
-    * Implementarea algoritmului ​de rezolvare ​(ex''​Kociemba''​). +  ​Obtinerea configuratiei initiale a cubului prin intermediul interfatei din terminal unde sunt introduse fetele cubului in oridne 
-    * Comunicare ​seriala ​folosind biblioteca ''​pyserial''​+  - Rezolvare algoritmica a cubului folosind biblioteca kociemba prin care se genereaza o secventa optima de miscari in format sandard Rubik (U,D,F,B,L,R
-  - **C/C++ (ESP32):** +  - Traducerea miscarilor din format Rubik in comenzi fiziceRobotul este limitat din punct de vedere al miscarilor ​(top servoclosed/​open/​flip,​ bottom servo: cw/​start/​ccw), astfel sunt necesare manevreme intermediare pentru a aduce fetele in pozitiile dorite
-    * Codul pentru microcontroler este scris in **Visual Studio Code**, folosind extensia **PlatformIO**+  - Comunicarea ​seriala ​prin intermediul biblotecii ​pyserial. Se trimit comenzile de executie si se asteapta raspunsul de la ESP32
-    * Un program principal care asculta instructiunile primite pe portul serial ​(UART). + 
-    * Un modul de control al servomotoarelor care mapeaza comenzile primite in semnale PWM specifice pentru pozitiile //HomeCWCCWOpenClose// si //Flip//.+== Modul ESP32 == 
 +Acesta asteapta comenzile de la modulul de calcul si le executa. Este scris in c++ foolosind biblioteca ArduinoContine: 
 +  - Parsarea comenzilor(openclosedflipstartcw, ccw) intr-un loop care monitorizeaza buffer-ul UART 
 +  - Controlul PWM al servomotoarelor folosind biblioteca ESP32Servo
  
 +Cele 2 motoare au urmatoarele stari calibrate in functie de unghi:
 +  - Top Cover Servo: gestioneaza pozitia capacului superior in functie de urmatoarele 3 stari: **open** pozitionat la 70 grade pentru a elibera cubul si a il putea misca liber, **closed** pozitionat la 115 grade pentru a fixa cubul in momentul rotatiei stratului de jos, **flip** aflat la 15 grade pentru a rasturna fizic cubul, schimband astfel orientarea sa.
 +  - Cube Holder Servo: roteste stratul de la baza cubului. Initial se afla la pozitia **start**, mentinand baza la pozitia neutra de 90 grade. Pentru miscarile efective se folosesc rotatiile la 90 de grade in cele doua sensuri **cw** (sensul acelor de ceasornic), respectiv **ccw** (sens opus acelor de ceasornic). Pentru a nu mentine motorul in tensiune, acesta se roteste la 0 grade si dupa aceea la 5 grade pentru rotatiile de tip ccw (analog 180, 175 grade pentru cw).
 ==== Bibliografie ==== ==== Bibliografie ====
 * [[https://​github.com/​AndreaFavero71/​CUBOTino_base_version|CUBOTino Base Version Documentation]] * [[https://​github.com/​AndreaFavero71/​CUBOTino_base_version|CUBOTino Base Version Documentation]]
  
 * [[https://​github.com/​hkociemba/​RubiksCube-TwophaseSolver|Hegbert Kociemba Two-Phase Algorithm]] * [[https://​github.com/​hkociemba/​RubiksCube-TwophaseSolver|Hegbert Kociemba Two-Phase Algorithm]]
pm/prj2026/radu_ion.balasa.1779104548.txt.gz · Last modified: 2026/05/20 19:23 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0