Differences

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

Link to this comparison view

pm:prj2026:vlad.radulescu2901:andrei.simion2107 [2026/05/21 18:45]
andrei.simion2107
pm:prj2026:vlad.radulescu2901:andrei.simion2107 [2026/05/25 13:40] (current)
andrei.simion2107
Line 63: Line 63:
  
 {{poza_stepper_cub.jpeg?​500x420}} {{poza_stepper_cub.jpeg?​500x420}}
 +
 +{{poza_full_andrei_simion.jpeg?​500x420}}
  
 ===== Software Design ===== ===== Software Design =====
Line 70: Line 72:
 Cubul va fi pus pe suportul de carton destinat. O data apasat butonul, robotul va incepe sa faca o secventa de citiri astfel incat fiecare dintre cele 24 fete ale cubului sa fie citite. Acestea vor fi organizate in "​fete"​ care vor fi trimise extern prin serial catre laptop, unde un script python asteapta inputul. Acest lucru a fost facut deoarece modul in care solutia este cautata (printr-un BFS bidirectional) nu permite rularea pe placa datorita memoriei limitate (undeva la 10MB de memorie utilizat in worst case). Scriptul va trimite rezultatul catre placa, care va afisa pe LCD secventa de pasi necesara rezolvarii cubului. Atentie! Pentru rezolvarea corecta a cubului, acesta nu trebuie rotit, secventa este data pentru orientarea cubului obtinuta o data cu finalizarea scanarii. Cubul va fi pus pe suportul de carton destinat. O data apasat butonul, robotul va incepe sa faca o secventa de citiri astfel incat fiecare dintre cele 24 fete ale cubului sa fie citite. Acestea vor fi organizate in "​fete"​ care vor fi trimise extern prin serial catre laptop, unde un script python asteapta inputul. Acest lucru a fost facut deoarece modul in care solutia este cautata (printr-un BFS bidirectional) nu permite rularea pe placa datorita memoriei limitate (undeva la 10MB de memorie utilizat in worst case). Scriptul va trimite rezultatul catre placa, care va afisa pe LCD secventa de pasi necesara rezolvarii cubului. Atentie! Pentru rezolvarea corecta a cubului, acesta nu trebuie rotit, secventa este data pentru orientarea cubului obtinuta o data cu finalizarea scanarii.
  
 +Pentru '​calibrarea'​ senzorului de culoare am decis ca este mai util sa lucrez cu procentaje din lumina reflectata, decat cu valorile in sine,
 +deoarece valoarea in sine poate varia extrem de usor datorita luminii ambientale. Astfel prin intermediul procentajelor,​ indiferent de lumina ambientala, valorile au doar un mic joc, care poate fi surprins printr-o plaja mai mare de valori in if-ul principal fiecarei culori.
 ==== 1. Mediu de dezvoltare ==== ==== 1. Mediu de dezvoltare ====
  
Line 76: Line 80:
 ==== 2. Librarii 3rd party ==== ==== 2. Librarii 3rd party ====
  
-Pentru actionarea LCD ului folosesc bilbioteca externa #include <​LiquidCrystal_I2C.h>​. Aceasta imi aduce functiile basic de scriere/​clear al randurilor lcd ului folosit in afisarea catre utilizator. Totodata voi folosi ​<Wire.h> ​ca si dependenta pentru libraria LCD. +Singura librarie 3rd party utilizata ​de mine este <Stepper.h> ​deoarece cand am incercat sa actionez bobinele pe baza pinilor, pentru ​a roti motoarele acestea isi pierdeau toata putereanemaiputand roti cubul rubik.
-Stepperele vor fi actionate prin intermediul ​pinilor, ​fara nicio bilbioteca ajutatoare, fiind 4 bobine care trebuie activate si dezactivate in ordine specifica. Totodata si pentru ​senzorul de culoareil voi actiona fara biblioteci ajutatoare.+
  
-==== 3Functii implementate ====+Ledul LCD si Senzorul de culoare vor fi activate pe baza scheletului de laborator prin intermediul i2c. Am renuntat la librariile folosite intial: LiquidCrystal_I2C și Adafruit_TCS34725. Ambele componente sunt controlate folosind un driver I2C (TWI), utilizand direct registrii TWCR, TWSR si TWDR.
  
-* Funcție de citire a convertorului Analog-Digital (inlocuieste analogRead) - uint16_t adc_read(uint8_t channel) 
  
-* Control manual pentru motorul platformei (Pini: PD2, PD4, PD3, PD5) - void pasPlatforma(int pasi) 
  
-Control manual pentru motorul bratului ​(Pini: PD6, PB0, PD7, PB1) - void pasBrat(int pasi)+==== 3. Functii implementate ==== 
 + 
 +Funcție de citire a convertorului Analog-Digital ​(inlocuieste analogRead) - uint16_t adc_read(uint8_t channel)
    
 * Opreste alimentarea bobinelor pentru a nu se incalzi - void elibereazaMotoare() * Opreste alimentarea bobinelor pentru a nu se incalzi - void elibereazaMotoare()
Line 104: Line 107:
  
 4) Intreruperi/​Timere - Delay urile intre rotiri si citiri. 4) Intreruperi/​Timere - Delay urile intre rotiri si citiri.
 +
 +==== Demonstratie ====
 +https://​youtube.com/​shorts/​Ai0RA_c0vEM
 +
 +==== Download sursa ====
 +Click <​html>​ <a href="​https://​github.com/​Simmy2004/​Rezolvator-Cub-Rubik-2x2x2">​ here</​a></​html>​.
pm/prj2026/vlad.radulescu2901/andrei.simion2107.1779378338.txt.gz · Last modified: 2026/05/21 18:45 by andrei.simion2107
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