This shows you the differences between two versions of the page.
|
pm:prj2026:radu_ion.balasa [2026/05/03 21:29] radu_ion.balasa |
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 22: | Line 20: | ||
| ==== Schema bloc ==== | ==== Schema bloc ==== | ||
| {{ :pm:prj2026:farhad_ali.gul:shemabloc-rubik.png?300 |Schema Bloc Proiect}} | {{ :pm:prj2026:farhad_ali.gul:shemabloc-rubik.png?300 |Schema Bloc Proiect}} | ||
| + | |||
| ==== Hardware Design ==== | ==== Hardware Design ==== | ||
| + | |||
| + | === Schema electrica === | ||
| + | {{:pm:prj2026:farhad_ali.gul:schema_electrica_rubik.png?nolink&500|}} | ||
| + | |||
| 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 putere, stabilizarea tensiunii și eliminarea zgomotului electric generat de motoare. |
| - | * **Structura imprimata 3D:** Include elementele de sustinere, capacul 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 fizice. Robotul este limitat din punct de vedere al miscarilor (top servo: closed/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 //Home, CW, CCW, Open, Close// si //Flip//. | + | == 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]] | ||