This is an old revision of the document!
Autor: Balasa Radu-Ion
Grupa: 331CA
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.
Arhitectura sistemului este de tip Master-Slave:
Componentele utilizate sunt:
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.
Proiectul foloseste doua medii de programare:
Este dezvoltat in python si contine urmatoarele etape: - Obtinerea configuratiei initiale a cubului prin intermediul interfatei din terminal unde sunt introduse fetele cubului in oridne - 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) - 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. - Comunicarea seriala prin intermediul biblotecii pyserial. Se trimit comenzile de executie si se asteapta raspunsul de la 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