Differences

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

Link to this comparison view

pm:prj2025:fstancu:anne.onciulescu [2025/05/28 19:57]
anne.onciulescu
pm:prj2025:fstancu:anne.onciulescu [2025/05/29 20:51] (current)
anne.onciulescu
Line 1: Line 1:
 ====== Rubik'​s Cube Solver - Onciulescu Dragomir Anne Marie ====== ====== Rubik'​s Cube Solver - Onciulescu Dragomir Anne Marie ======
- 
-!!! pls wait im writing it right now :( 
 ===== Introducere ===== ===== Introducere =====
 Acest proiect are ca scop dezvoltarea unui dispozitiv capabil sa rezolve un cub Rubik 3x3x3, pornind de la orice configuratie initiala valida. Acest proiect are ca scop dezvoltarea unui dispozitiv capabil sa rezolve un cub Rubik 3x3x3, pornind de la orice configuratie initiala valida.
Line 40: Line 38:
  
 ==== Functii ==== ==== Functii ====
-=== Functie Generica de Rotatie===+ 
 +=== Functie Generica de Rotatie ===
  
 Roteste un motor 90 de grade. Roteste un motor 90 de grade.
  
-  ​void rotateMotor(int stepPin, int dirPin, bool clockwise) { +<code cpp> 
-    digitalWrite(dirPin,​ clockwise ? HIGH : LOW); +void rotateMotor(int stepPin, int dirPin, bool clockwise) { 
-    for (int i = 0; i < STEPS_PER_90;​ i++) { +  digitalWrite(dirPin,​ clockwise ? HIGH : LOW); 
-      digitalWrite(stepPin,​ HIGH); +  for (int i = 0; i < STEPS_PER_90;​ i++) { 
-      delayMicroseconds(STEP_DELAY_US);​ +    digitalWrite(stepPin,​ HIGH); 
-      digitalWrite(stepPin,​ LOW); +    delayMicroseconds(STEP_DELAY_US);​ 
-      delayMicroseconds(STEP_DELAY_US);​ +    digitalWrite(stepPin,​ LOW); 
-    }+    delayMicroseconds(STEP_DELAY_US);​
   }   }
-  ​ +} 
-=== Functii de rotatie: ===+</​code>​
  
-  void rotateXCW() ​ { rotateMotor(X_STEP,​ X_DIR, true); ​ } +=== Functii de rotatie ===
-  void rotateXCCW() { rotateMotor(X_STEP,​ X_DIR, false); }+
  
-  ​void rotateYCW()  { rotateMotor(Y_STEPY_DIR, true); ​ } +<code cpp> 
-  void rotateYCCW() { rotateMotor(Y_STEPY_DIR, false); }+void rotateXCW()  { rotateMotor(X_STEPX_DIR, true); ​ } 
 +void rotateXCCW() { rotateMotor(X_STEPX_DIR, false); }
  
-  ​void rotateZCW()  { rotateMotor(Z_STEPZ_DIR, true); ​ } +void rotateYCW()  { rotateMotor(Y_STEPY_DIR, true); ​ } 
-  void rotateZCCW() { rotateMotor(Z_STEPZ_DIR, false); }+void rotateYCCW() { rotateMotor(Y_STEPY_DIR, false); }
  
 +void rotateZCW() ​ { rotateMotor(Z_STEP,​ Z_DIR, true); ​ }
 +void rotateZCCW() { rotateMotor(Z_STEP,​ Z_DIR, false); }
 +</​code>​
  
-=== Functie Generica de Rotatie Duala===+=== Functie Generica de Rotatie Duala ===
  
 Roteste intreg cubul 90 de grade pe axa L-R. Roteste intreg cubul 90 de grade pe axa L-R.
  
-  ​void DualRotateMotors(int stepPin1, int dirPin1, int stepPin2, int dirPin2, bool direction) { +<code cpp> 
-    digitalWrite(dirPin1,​ direction ? HIGH : LOW); +void DualRotateMotors(int stepPin1, int dirPin1, int stepPin2, int dirPin2, bool direction) { 
-    digitalWrite(dirPin2,​ direction ? LOW : HIGH); +  digitalWrite(dirPin1,​ direction ? HIGH : LOW); 
-    for (int i = 0; i < STEPS_PER_90;​ i++) { +  digitalWrite(dirPin2,​ direction ? LOW : HIGH); 
-      digitalWrite(stepPin1,​ HIGH); +  for (int i = 0; i < STEPS_PER_90;​ i++) { 
-      digitalWrite(stepPin2,​ HIGH); +    digitalWrite(stepPin1,​ HIGH); 
-      delayMicroseconds(STEP_DELAY_US);​ +    digitalWrite(stepPin2,​ HIGH); 
-      digitalWrite(stepPin1,​ LOW); +    delayMicroseconds(STEP_DELAY_US);​ 
-      digitalWrite(stepPin2,​ LOW); +    digitalWrite(stepPin1,​ LOW); 
-      delayMicroseconds(STEP_DELAY_US);​ +    digitalWrite(stepPin2,​ LOW); 
-    }+    delayMicroseconds(STEP_DELAY_US);​
   }   }
-  ​ +
-=== Functii Rotatie Duala===+</​code>​ 
 + 
 +=== Functii Rotatie Duala === 
 + 
 +<code cpp> 
 +void rotateForward() ​ { DualRotateMotors(X_STEP,​ X_DIR, Y_STEP, Y_DIR, true); ​ } 
 +void rotateBackward() { DualRotateMotors(X_STEP,​ X_DIR, Y_STEP, Y_DIR, false); } 
 +</​code>​
  
-  void rotateForward() ​ { DualRotateMotors(X_STEP,​ X_DIR, Y_STEP, Y_DIR, true); ​ } 
-  void rotateBackward() { DualRotateMotors(X_STEP,​ X_DIR, Y_STEP, Y_DIR, false); } 
-  ​ 
 === Functie Translatare Mutari === === Functie Translatare Mutari ===
  
-Translateaza mutarile ​in rotatii ale motoarelor.+Traduce miscarile cubului ​in rotatii ale motoarelor.
  
 +**'** – miscare CCW 
  
-**'** - miscare CCW+**2** – rotatie 180 de grade
  
-**2** - rotatie 180 grade +<code cpp> 
 +void executeMove(String move) { 
 +  bool twice = move.endsWith("​2"); 
 +  bool prime = move.endsWith("'"​);​
  
-  ​void executeMove(String move) { +  ​char face = move.charAt(0); 
-    bool twice = move.endsWith("​2"​); +  int turns twice ? 2 : 1;
-    bool prime move.endsWith("'"​);+
  
-    char face = move.charAt(0)+  for (int i = 0; i < turns; i++) { 
-    ​int turns = twice ? 2 1;+    ​switch (face) { 
 +      case '​R'​: 
 +        if (prime) rotateXCCW();​ 
 +        else rotateXCW();​ 
 +        break;
  
-    for (int i = 0; i < turns; i++) { +      ​case 'L': 
-      switch (face) { +        if (prime) ​rotateYCCW(); 
-        ​case 'R': +        else rotateYCW(); 
-          if (prime) ​rotateXCCW(); +        break;
-          else rotateXCW(); +
-          break;+
  
-        ​case 'L': +      ​case 'B': 
-          if (prime) ​rotateYCCW(); +        if (prime) ​rotateZCCW(); 
-          else rotateYCW(); +        else rotateZCW(); 
-          break;+        break;
  
-        ​case 'B': +      ​case 'F': 
-          if (prime) rotateZCCW();​ +        ​rotateBackward();​ 
-          else rotateZCW();​ +        rotateBackward();​ 
-          break;+        ​if (prime) rotateZCCW();​ 
 +        else rotateZCW();​ 
 +        ​rotateForward();​ 
 +        rotateForward();​ 
 +        ​break;
  
-        ​case 'F': +      ​case 'U': 
-          rotateBackward();​ +        rotateBackward();​ 
-          ​rotateBackward();​ +        if (prime) rotateZCCW();​ 
-          ​if (prime) rotateZCCW();​ +        else rotateZCW();​ 
-          else rotateZCW();​ +        rotateForward();​ 
-          ​rotateForward();​ +        break;
-          ​rotateForward();​ +
-          break;+
  
-        ​case 'U': +      ​case 'D': 
-          ​rotateBackward();​ +        rotateForward();​ 
-          if (prime) rotateZCCW();​ +        if (prime) rotateZCCW();​ 
-          else rotateZCW();​ +        else rotateZCW();​ 
-          ​rotateForward();​ +        rotateBackward();​ 
-          break; +        break;
- +
-        ​case '​D':​ +
-          rotateForward();​ +
-          ​if (prime) rotateZCCW();​ +
-          else rotateZCW();​ +
-          rotateBackward();​ +
-          break; +
-      }+
     }     }
   }   }
-  ​+
 +</​code>​ 
 === Bucla Citire Mutari de pe Seriala === === Bucla Citire Mutari de pe Seriala ===
  
-  ​String incoming = "";​+<code cpp> 
 +String incoming = "";​
  
-  ​void loop() { +void loop() { 
-    while (Serial.available()) { +  while (Serial.available()) { 
-      char c = Serial.read();​+    char c = Serial.read();​
  
-      ​if (c == '​\n'​ || c == '​\r'​) { +    ​if (c == '​\n'​ || c == '​\r'​) { 
-        incoming.trim();​ +      incoming.trim();​ 
-        if (incoming.length() > 0) { +      if (incoming.length() > 0) { 
-          Serial.print("​Received move: "); +        Serial.print("​Received move: "); 
-          Serial.println(incoming);​+        Serial.println(incoming);​
  
-          ​Serial.print("​Executing:​ "); +        ​Serial.print("​Executing:​ "); 
-          Serial.println(incoming);​ +        Serial.println(incoming);​ 
-          executeMove(incoming);​+        executeMove(incoming);​
  
-          ​Serial.println("​OK"​)+        ​Serial.println("​OK"​);​
-        } +
-        incoming = "";​ +
-      } else { +
-        incoming += c;+
       }       }
 +      incoming = "";​
 +    } else {
 +      incoming += c;
     }     }
   }   }
-  ​ +
-inca mai scriu la el, o sa revin asap cu restul detaliilor :))+</​code>​ 
 +sa revin asap cu restul detaliilor :))
  
  
-asta e interfata grafica din python care o sa solveuie ​cubul si dupa trimite pe seriala comenzile ptr motoare.+asta e interfata grafica din python care rezolva ​cubul si dupa trimite pe seriala comenzile ptr motoare.
 solutiile de cub vin normal in forma unei liste ordonate de miscari din setul: U (up), D(down), L(left), R(right), F(front), B(back), U'(up reverse), U2(up de 2 ori) etc.  solutiile de cub vin normal in forma unei liste ordonate de miscari din setul: U (up), D(down), L(left), R(right), F(front), B(back), U'(up reverse), U2(up de 2 ori) etc. 
  
Line 186: Line 194:
 in imagine se poate vedea in dreapta interfata grafica in care se vaa introduce configuratia initiala a cubului. jos in terminal se vede solutia intoarsa dupa solve and send. in stanga este o solutie de pe un site de solver cub de pe net. se poate observa ca e acelasi raspuns. in imagine se poate vedea in dreapta interfata grafica in care se vaa introduce configuratia initiala a cubului. jos in terminal se vede solutia intoarsa dupa solve and send. in stanga este o solutie de pe un site de solver cub de pe net. se poate observa ca e acelasi raspuns.
  
- 
-btw am luat un cnc shield ca daca tot n am mai avut timp de pcb macar sa nu fie cablaraie prea intensa. o sa actualizez cat de curand restul paginii. 
  
  
 {{ :​pm:​prj2025:​fstancu:​screenshot_from_2025-05-26_03-43-47.png?​700 |}} {{ :​pm:​prj2025:​fstancu:​screenshot_from_2025-05-26_03-43-47.png?​700 |}}
- 
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
-</​note>​ 
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
Line 221: Line 219:
 Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.
 </​note>​ </​note>​
- 
-===== Bibliografie/​Resurse ===== 
- 
-<​note>​ 
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. 
-</​note>​ 
- 
-<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ 
  
  
pm/prj2025/fstancu/anne.onciulescu.1748451455.txt.gz · Last modified: 2025/05/28 19:57 by anne.onciulescu
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