Differences

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

Link to this comparison view

pm:prj2026:radu_ion.balasa [2026/05/03 20:45]
radu_ion.balasa [Bibliografie]
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 21: Line 19:
  
 ==== Schema bloc ==== ==== Schema bloc ====
 +{{ :​pm:​prj2026:​farhad_ali.gul:​shemabloc-rubik.png?​300 |Schema Bloc Proiect}}
  
 +==== Hardware Design ====
 +
 +=== Schema electrica ===
 +{{:​pm:​prj2026:​farhad_ali.gul:​schema_electrica_rubik.png?​nolink&​500|}}
  
-==== Hardware Design ==== 
 Componentele utilizate sunt: Componentele utilizate sunt:
-  * **ESP32 (30 pini):​** ​Creierul ​de executie+  * **ESP32 (30 pini):​** ​creierul ​de executie. 
-  * **Placa de expansiune ESP32 (38 pini):** Pentru facilitarea conexiunilor+  * **2 x Servomotoare Digitale MG995:​** ​ofera cuplul necesar pentru rotirea straturilor cubului (rotatie 180 grade). 
-  * **2 x Servomotoare Digitale MG995:​** ​Ofera cuplul necesar pentru rotirea straturilor cubului (rotatie 180 grade). +  * **2 x Condensatoare de filtrare (220uF, 16V):** utilizate pentru decuplarea circuitului ​de puterestabilizarea tensiunii și eliminarea zgomotului electric generat ​de motoare
-  * **Structura imprimata 3D:** Include elementele ​de sustinerecapacul superior, balamaua si sistemul ​de ridicare+  * **Sursa de alimentare externa (5V/2A):** pentru a preveni caderile de tensiune la activarea servomotoarelor
-  * **Sursa de alimentare externa (5V/​2A):​** ​Esentiala ​pentru a preveni caderile de tensiune la activarea servomotoarelor.+  * **Structura imprimata 3D:** include elementele de sustinere, capacul superior, balamaua si sistemul de ridicare.
  
 **Conectivitate:​**\\ **Conectivitate:​**\\
 Servomotoarele sunt controlate prin semnale **PWM** generate de ESP32 pe pinii D22 (baza) si D23 (capac/​lifter). Alimentarea motoarelor se face separat de placa ESP32 pentru a evita zgomotul electric si resetarea accidentala a sistemului. Servomotoarele sunt controlate prin semnale **PWM** generate de ESP32 pe pinii D22 (baza) si D23 (capac/​lifter). Alimentarea motoarelor se face separat de placa ESP32 pentru a evita zgomotul electric si resetarea accidentala a sistemului.
 +
 +{{ :​pm:​prj2026:​farhad_ali.gul:​robot_rubik.jpeg?​nolink&​300 |}}
  
  
 ==== 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 servo: closed/open/flipbottom 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 ​//HomeCW, CCW, Open, Close// si //Flip//. +
- +
-==== Rezultate Obtinute ==== +
- +
- +
-==== Concluzii ====+
  
 +== Modul ESP32 ==
 +Acesta asteapta comenzile de la modulul de calcul si le executa. Este scris in c++ foolosind biblioteca Arduino. Contine:
 +  - Parsarea comenzilor(open,​ closed, flip, start, cw, 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.1777830336.txt.gz · Last modified: 2026/05/03 20:45 by radu_ion.balasa
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