Differences

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

Link to this comparison view

pm:prj2026:atoader:razvan.lazar2108 [2026/05/25 11:32]
razvan.lazar2108 [1. Mediu de Dezvoltare și Configurare Platformă]
pm:prj2026:atoader:razvan.lazar2108 [2026/05/25 18:30] (current)
razvan.lazar2108 [Surse și Funcții Implementate]
Line 97: Line 97:
 Aplicația implementează controlul automatizat al unui robot pentru rezolvarea Cubului Rubik, dotat cu 6 motoare pas cu pas (câte unul dedicat fiecărei fețe) și 6 senzori de culoare independenți poziționați deasupra brațelor mecanice. Aplicația implementează controlul automatizat al unui robot pentru rezolvarea Cubului Rubik, dotat cu 6 motoare pas cu pas (câte unul dedicat fiecărei fețe) și 6 senzori de culoare independenți poziționați deasupra brațelor mecanice.
  
-### Maparea Mișcărilor (Singmaster Notation)+Maparea Mișcărilor (Singmaster Notation)
 Sistemul asociază caracterele primite prin UART cu funcțiile mecanice din firmware conform tabelului de execuție: Sistemul asociază caracterele primite prin UART cu funcțiile mecanice din firmware conform tabelului de execuție:
  
Line 108: Line 108:
 | **"​B"​ / "​B'"​ / "​B2"​** | mutari.back_ceas,​ mutari.back_anticeas,​ mutari.back_dublu | Fața Posterioară | 50 (90°) / 50 (-90°) / 100 (180°) | | **"​B"​ / "​B'"​ / "​B2"​** | mutari.back_ceas,​ mutari.back_anticeas,​ mutari.back_dublu | Fața Posterioară | 50 (90°) / 50 (-90°) / 100 (180°) |
  
-### Protocolul de Comunicație UART+Protocolul de Comunicație UART
 Pentru viteză și eficiență mecanică, firmware-ul procesează direct două coduri de acțiune primitive primite de la PC: Pentru viteză și eficiență mecanică, firmware-ul procesează direct două coduri de acțiune primitive primite de la PC:
  
Line 123: Line 123:
   * **i2c.h / i2c.c:** Implementează protocolul de magistrală I2C Master pe pinii dedicați ai MCU-ului (PC4 -> SDA, PC5 -> SCL). Rulează funcțiile primitive de control la frecvența standard de 100kHz: i2c_start(),​ i2c_stop(), i2c_write(),​ i2c_read_ack() și i2c_read_nack().   * **i2c.h / i2c.c:** Implementează protocolul de magistrală I2C Master pe pinii dedicați ai MCU-ului (PC4 -> SDA, PC5 -> SCL). Rulează funcțiile primitive de control la frecvența standard de 100kHz: i2c_start(),​ i2c_stop(), i2c_write(),​ i2c_read_ack() și i2c_read_nack().
   * **senzor_culoare.h / senzor_culoare.c:​** Gestionează inițializarea (tcs34725_init_sensor()) și citirea registrelor brute de date (Clear, Red, Green, Blue) de la senzorii optici punctuali TCS34725 prin intermediul funcției citeste_culoare_senzor().   * **senzor_culoare.h / senzor_culoare.c:​** Gestionează inițializarea (tcs34725_init_sensor()) și citirea registrelor brute de date (Clear, Red, Green, Blue) de la senzorii optici punctuali TCS34725 prin intermediul funcției citeste_culoare_senzor().
-    ​* *Algoritmul de conversie:* Funcția determina_cod_culoare() implementează o logică bazată pe rapoarte cromatice (R/C, G/C, B/C). Deoarece senzorii sunt fixați pe brațe și nu pot fi centrați perfect pe fiecare pătrățel,​ acest algoritm elimină erorile cauzate de variațiile de distanță sau lumină ambientală. Funcția izolează și returnează doar codurile celor 6 culori țintă: 0 -> Galben, 1 -> Alb, 2 -> Verde, 3 -> Albastru, 4 -> Roșu, 5 -> Portocaliu.+  * **Algoritmul de conversie:** Funcția determina_cod_culoare() implementează o logică bazată pe rapoarte cromatice (R/C, G/C, B/C). Deoarece senzorii sunt fixați pe brațe și nu pot fi centrați perfect pe fiecare pătrățel,​ acest algoritm elimină erorile cauzate de variațiile de distanță sau lumină ambientală. Funcția izolează și returnează doar codurile celor 6 culori țintă: 0 -> Galben, 1 -> Alb, 2 -> Verde, 3 -> Albastru, 4 -> Roșu, 5 -> Portocaliu.
   * **motoare.h / motoare.c:​** Configurează pinii I/O ca ieșiri și asigură liniștea totală în repaus prin trecerea EN_PIN în starea HIGH (motoare_init_pini()). Funcția step_motor() activează exclusiv motorul selectat, setează direcția și generează trenul de impulsuri cu un delay stabil de 800µs între pași. Funcția executa_lista_miscari() parsează lexical șirul primit prin UART folosind strtok(), rulând secvențial mutările cu un delay de 400ms între ele.   * **motoare.h / motoare.c:​** Configurează pinii I/O ca ieșiri și asigură liniștea totală în repaus prin trecerea EN_PIN în starea HIGH (motoare_init_pini()). Funcția step_motor() activează exclusiv motorul selectat, setează direcția și generează trenul de impulsuri cu un delay stabil de 800µs între pași. Funcția executa_lista_miscari() parsează lexical șirul primit prin UART folosind strtok(), rulând secvențial mutările cu un delay de 400ms între ele.
   * **main.c:** Reprezintă punctul central de intrare al aplicației. Conține rutina scanare_completa_cub() pentru interogarea senzorilor și trimiterea matricei, precum și bucla infinită (while(1)) care citește asincron octetul de comandă de la PC și direcționează execuția către Sarcina 1 (Scanare) sau Sarcina 2 (Listă mișcări).   * **main.c:** Reprezintă punctul central de intrare al aplicației. Conține rutina scanare_completa_cub() pentru interogarea senzorilor și trimiterea matricei, precum și bucla infinită (while(1)) care citește asincron octetul de comandă de la PC și direcționează execuția către Sarcina 1 (Scanare) sau Sarcina 2 (Listă mișcări).
 +  * **Codul sursă al proiectului (GitHub):** [[https://​github.com/​razvanlazar2108/​Rubik-Cube-Solver|Repository Rubik-Cube-Solver]]
 +
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
pm/prj2026/atoader/razvan.lazar2108.1779697947.txt.gz · Last modified: 2026/05/25 11:32 by razvan.lazar2108
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