This is an old revision of the document!


Rubik's Cube Solver

Autor: Balasa Radu-Ion
Grupa: 331CA
Link github: https://github.com/BalasaRadu/rubik_solver/tree/main

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.

Descriere generala

Arhitectura sistemului este de tip Master-Slave:

  • Laptop (Master): Interfata utilizator unde se introduce configuratia fetelor sub forma de text. Aici ruleaza algoritmul Kociemba pentru a genera solutia.
  • ESP32 (Slave): Microcontrolerul primeste prin UART (Serial) instructiunile de miscare si le traduce in unghiuri specifice pentru cele doua servomotoare.

Interactiunea modulelor

  1. Utilizatorul introduce pe laptop starea cubului (codificata prin litere pentru culori).
  2. Laptopul calculeaza solutia si trimite prin cablu USB (UART) sirul de comenzi catre ESP32.
  3. ESP32 parseaza comenzile si activeaza:
    • Servomotorul de baza (Cube Holder): Roteste baza cubului la unghiuri de 90 sau 180 de grade.
    • Servomotorul superior (Top Cover/Lifter): Basculeaza cubul pentru a schimba fata care urmeaza sa fie rotita.

Schema bloc

Schema Bloc Proiect

Hardware Design

Schema electrica

Componentele utilizate sunt:

  • ESP32 (30 pini): creierul de executie.
  • 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.
  • Sursa de alimentare externa (5V/2A): pentru a preveni caderile de tensiune la activarea servomotoarelor.
  • Structura imprimata 3D: include elementele de sustinere, capacul superior, balamaua si sistemul de ridicare.

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.

Software Design

Proiectul foloseste doua medii de programare:

Modul de calcul

Este dezvoltat in python si contine urmatoarele etape:

  1. Obtinerea configuratiei initiale a cubului prin intermediul interfatei din terminal unde sunt introduse fetele cubului in oridne
  2. 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)
  3. 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.
  4. Comunicarea seriala prin intermediul biblotecii pyserial. Se trimit comenzile de executie si se asteapta raspunsul de la ESP32.
Modul ESP32

Acesta asteapta comenzile de la modulul de calcul si le executa. Este scris in c++ foolosind biblioteca Arduino. Contine:

  1. Parsarea comenzilor(open, closed, flip, start, cw, ccw) intr-un loop care monitorizeaza buffer-ul UART
  2. Controlul PWM al servomotoarelor folosind biblioteca ESP32Servo

Bibliografie

pm/prj2026/radu_ion.balasa.1779294436.txt.gz · Last modified: 2026/05/20 19:27 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