Differences

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

Link to this comparison view

pm:prj2024:fgul:ionela.strimbeanu [2024/05/23 02:39]
ionela.strimbeanu [Software Design]
pm:prj2024:fgul:ionela.strimbeanu [2024/05/27 12:37] (current)
ionela.strimbeanu [Download]
Line 17: Line 17:
   - Pe cele doua matrici secundare de LED-uri se vor forma doua imagini. Matricile sunt conectate serial, miscorand astfel numarul de pini digitali necesari de pe microcontroler.   - Pe cele doua matrici secundare de LED-uri se vor forma doua imagini. Matricile sunt conectate serial, miscorand astfel numarul de pini digitali necesari de pe microcontroler.
   - Prin intermediul a doua butoane, simbolizand DA sau NU, jucatorul trebuie sa raspunda corect la intrebarea: "Cele doua imagini sunt la fel?"   - Prin intermediul a doua butoane, simbolizand DA sau NU, jucatorul trebuie sa raspunda corect la intrebarea: "Cele doua imagini sunt la fel?"
-  - Se repeta pasii anteriori de ori.+  - Se repeta pasii anteriori de ori.
   - Prin intermediul unei matrice de butoane, corespunzatoare LED-urilor de pe matricea principala, jucatorul trebuie sa introduca corect secventa de LED-uri aprinse anterior.   - Prin intermediul unei matrice de butoane, corespunzatoare LED-urilor de pe matricea principala, jucatorul trebuie sa introduca corect secventa de LED-uri aprinse anterior.
   - Daca utilizatorul introduce corect secventa de lumini SI a raspuns corect la toate intrebarile referitoare la imagini, inseamna ca a castigat si se vor inalta steagurile victoriei, pe fundalul unei melodii triumfatoare.   - Daca utilizatorul introduce corect secventa de lumini SI a raspuns corect la toate intrebarile referitoare la imagini, inseamna ca a castigat si se vor inalta steagurile victoriei, pe fundalul unei melodii triumfatoare.
Line 27: Line 27:
 Schema hardware - realizata in wokwi.com: Schema hardware - realizata in wokwi.com:
  
-{{:​pm:​prj2024:​fgul:​schema_circuit.png?500|}}+{{:​pm:​prj2024:​fgul:​schema_circuit_cristina.png?500|}}
  
 Lista piese: Lista piese:
Line 38: Line 38:
   * Buzzer - folosit pentru a reda diferite sunete si melodii, in functie de momentul jocului   * Buzzer - folosit pentru a reda diferite sunete si melodii, in functie de momentul jocului
   * Breadboard   * Breadboard
- 
-Stadiu actual: 
-  * Jocul in sine este aproape complet, atat d.p.d.v. harware, cat si software. 
-  * Matricile de LED-uri, butoanele si respectiv matricea de butoane functioneaza impreuna si corect. 
-  * Partea de servo motoare si buzzer, precum si cea de cronometru, functioneaza separat. Mai trebuie realizata integrarea lor in proiectul final. 
-  * De asemenea, doresc sa gasesc o modalitate de asezare/​ascundere a firelor si asezarea proiectului pe un plan, astfel incat toate componentele sa fie fixe. 
  
 Alegerea pinilor: Alegerea pinilor:
Line 49: Line 43:
   * Dupa cum se observa pe schema hardware, am doua constructii diferite de matrici de LED-uri, motiv pentru care, pentru usurinta, matricea principala nu am conectat-o tot la pinii speciali de SPI de pe placa. In schimb, am conectat-o la pinii D36, D38, D40, biblioteca folosita realizand "bit banging",​ ceea ce imi permite sa folosesc orice pini digitali.   * Dupa cum se observa pe schema hardware, am doua constructii diferite de matrici de LED-uri, motiv pentru care, pentru usurinta, matricea principala nu am conectat-o tot la pinii speciali de SPI de pe placa. In schimb, am conectat-o la pinii D36, D38, D40, biblioteca folosita realizand "bit banging",​ ceea ce imi permite sa folosesc orice pini digitali.
   * Butoanele "​DA"​ si "​NU",​ folosite pentru a afirma daca imaginile de pe cele doua matrici sunt identice, folosesc intreruperi externe, deci sunt conectate la pinii D20 si D21.   * Butoanele "​DA"​ si "​NU",​ folosite pentru a afirma daca imaginile de pe cele doua matrici sunt identice, folosesc intreruperi externe, deci sunt conectate la pinii D20 si D21.
-  * Cele doua Servo Motoare folosesc PWM si trebuie conectate la pini adecvati (care accepta PWM). Am ales random D2 si D12.+  * Cele doua Servo Motoare folosesc PWM si trebuie conectate la pini adecvati (care accepta PWM). Am ales random D2 si D3.
   * Restul componentelor folosesc pini digitali, alesi random. Am incercat totusi sa ii aleg astfel incat sa minimizez firele intercalate si sa arate cat mai bine.   * Restul componentelor folosesc pini digitali, alesi random. Am incercat totusi sa ii aleg astfel incat sa minimizez firele intercalate si sa arate cat mai bine.
  
Line 55: Line 49:
  
 {{:​pm:​prj2024:​fgul:​proiect_hardware.jpeg?​500|}} {{:​pm:​prj2024:​fgul:​proiect_hardware.jpeg?​500|}}
 +
 +
 +Forma finala harware:
 +
 +{{:​pm:​prj2024:​fgul:​proiect_final.jpeg?​500|}}
 +
 +
 +Proiect final - prezentare:
 +
 +{{:​pm:​prj2024:​fgul:​proiect_final_aspect.jpeg?​500|}}
 ===== Software Design ===== ===== Software Design =====
  
Line 72: Line 76:
   * FAST PWM folosit pentru controlul Servomotoarelor   * FAST PWM folosit pentru controlul Servomotoarelor
  
 +Link proiect: [[https://​github.com/​CristinaIonela07/​Remember-the-Glow|Remember_the_Glow]]
  
 +Flow-ul programului:​
 +
 +{{:​pm:​prj2024:​fgul:​flow_proiect.drawio.png?​500|}}
 +
 +
 +Exista multiple fisiere .h care contin declararile si initializarile variabilelor corespunzatoare fiecarei componente in parte. Toate functiile au fost implementate intr-un singur fisierul principal (proiect_pm.ino).
 +
 +Descrierea functiilor implementate:​
 +  * Exista functii pentru stingerea tuturor LED-urilor de pe matricile de LED-uri (blank_matrix_uno,​ blank_matrix_duo),​ precum si functii de initializare a acestor matrici (initialize_solo,​ initialize_duo).
 +  * Functia displayPatternSolo se ocupa de alegerea si aprinderea unui grup de 4 LED-uri pe matricea principala.
 +  * Functia displayPatternDuo se ocupa de alegerea LED-urilor care vor fi aprinse pe matricile secundare. Aici se decide daca cele doua "​imagini"​ reprezentate vor fi identice sau nu. Pentru dificultate sporita, doar 1 sau 2 LED-uri pot sa difere si doar printr-o pozitie. ​
 +  * Functia manage_buttons_DANU asigura citirea butonului doar daca acesta trebuia apasat (pentru a preveni luarea in calcul a apasarilor gresite) si verifica daca este cel corect sau nu.
 +  * Functia check_keypad verifica daca butoanele apasate pe tastatura sunt cele corecte, in ordinea corecta.
 +  * Urmeaza functiile care se ocupa de intreruperi. Intreruperea INT0 este declansata de apasarea butonului NU (cel din stanga), iar intreruperea INT1 este declansata de apasarea butonului DA (cel din dreapta). Timer-ul 1 este configurat pe o secunda, ceea ce permite o configurare corecta si precisa a temporizatorului din joc, care scade la fiecare secunda. Timer-ul 3 este setat pe Fast PWM si este folosit pentru rotirea corecta a servomotoarelor.
 +  * Temporizatorul,​ odata ce a ajuns la 0, va incepe sa licareasca: timp de o secunda se aprinde, timp de o secunda se stinge.
 +  * Functia rotate_servos se ocupa de rotirea servomotoarelor de la 0 la 180 de grade, setand pulse width-ul la valoarea corespunzatoare.
 +
 +Descriere loop():
 +  * Se alege melodia care ruleaza in fundal, in functie de momentul de timp la care suntem in cadrul jocului. Daca s-a apasat un buton gresit, se ruleaza un sunet dezaprobator corespunzator. Astfel jucatorul stie ca a facut o greseala.
 +  * Se realizeaza trecerea prin etapele jocului folosind variabile booleene pentru fiecare etapa: light_one_led = se aprinde un grup de 4 LED-uri pe matricea principala, light_matrix = se aprind cele doua "​imagini"​ pe matricile secundare, wait_DANU = se asteapta apasarea unui buton din cele doua disponibile,​ wait_button_matrix = se asteapta introducerea secventei de LED-uri in ordinea corecta, game_final = jocul a luat sfarsit.
 +  * La aceste variabile, se adauga multe altele care asigura buna functionare a jocului: unele numara cate butoane/​LED-uri au fost apasate/​aprinse pana la momentul curent de timp, altele se ocupa de retinerea corectitudinii sau a faptului ca s-a intamplat ceva (de ex. faptul ca a fost apasat un buton), iar altele sunt folosite pentru contorizarea timpului intre diferite actiuni sau momente ale jocului.
 +  * Odata cu terminarea jocului, se decide daca jucatorul a castigat sau a pierdut pe baza numarului de greseli (nr_greseli) sau pe baza starii temporizatorului (daca a ajuns la 0, automat se considera ca jucatorul a pierdut).
 +  * In functie de rezultat, timp de 30 de secunde, se va reda melodia corespunzatoare si, daca este cazul (jucatorul a castigat), se invart si servomotoarele. Se afiseaza scorul obtinut de jucator, cate actiuni corecte a facut din totalul de 10 actiuni posibile (5 apasari de butoane DA/NU, 5 apasari pe matricea de butoane, corespunzatoare secventei de LED-uri)
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +Video proiect: [[https://​youtu.be/si0u5JSA2Lk|Remember the Glow Video]]
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</note>+
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+Mereu mi-a placut ideea de harware, de lucrat cu piese si fire, si ma bucur ca am avut oportunitatea de a crea un proiect de la 0, atat din punct de vedere software, cat si hardware.
  
-<note warning>​ +A fost o provocare. Fiind primul proiect de acest gena necesitat multa documentareChiar daca tema proiectului ales nu este una foarte complicataconsider ca am reusit sa fac un proiect interesant sicel mai important, complet functional, intr-un timp limitat.
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ sursescheme, etcUn fişier README, un ChangeLogun script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+
  
-Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**Namespace-ul în care se încarcă ​fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul)**Exemplu:​** Dumitru Alin331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +Inca de la inceput, stiam exact ce vreau sa fac, fiecare pas al proiectuluiA necesitat putina cautare pentru a gasi piesele potrivite, astfel incat sa nu imi ingreunez inutil munca. Pe parcursul realizarii jocului am hotarat ca ar fi mai distractiv sa am muzica permanent in fundalIdeea a evoluat apoi, astfel in proiectul final exista mai multe melodiicate una pentru fiecare etapa a jocului.
-</​note>​+
  
 +Am pornit de la premisa ca voi folosi breadboard-uri,​ pentru usurinta, in detrimentul lipirii. Pentru un design mai estetic am hotarat sa folosesc mini breadboard-uri,​ negre in principal, si am optat pentru ascunderea firelor si a placutei Arduino. Astfel jucatorul este mai concentrat pe joc, si nu pe mediul inconjurator.
 +
 +Singurul lucru care nu mi-a placut in dezvoltarea acestui proiect a fost faptul ca, lucrand in Arduino IDE, nu am reusit sa folosesc fisiere .c sau .cpp pentru modularizarea codului. Probabil se poate, dar nu am reusit sa fac sa mearga si nici nu mi-am dedicat mult timp pentru a gasi o solutie.
 +Am considerat ca este mai important sa mearga intr-un mod corect si optim decat sa fie impartit in mai multe fisiere.
 +===== Download =====
 +
 +Arhiva proiect:
 +{{:​pm:​prj2024:​fgul:​proiect_pm.zip|Remember_the_Glow_arhiva.zip}}
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +02.05 - Creare pagina si Introducere
-Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. +
-</​note>​+
  
-===== Bibliografie/​Resurse =====+03.04 - Comandare piese
  
-<​note>​ +04.05 - Descriere generala si Comandare piese 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate ​pe **Resurse ​Software** şi **Resurse ​Hardware**+ 
-</note>+05.05 Incepere Hardware si Software (pe parti) 
 + 
 +10.05 - Unire piese Hardware intr-un singur proiect 
 + 
 +13.05 - Incepere unire Software ​intr-un singur proiect 
 + 
 +16.05 - Harware Design  
 + 
 +18.05 - Comandare piese pentru Design Final Estetic ​Hardware 
 + 
 +23.05 - Software Design 
 + 
 +26.05 - Completare pagina ocw cu scheme, imagini noi si concluzii 
 + 
 + 
 + 
 + 
 +===== Bibliografie/Resurse =====
  
-<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</a></html>+  * [[https://ocw.cs.pub.ro/​courses/​pm | Laboratoare 0-3]] 
 +  * [[https://​wokwi.com/​ | Wokwi.com]] 
 +  * [[https://​www.optimusdigital.ro/​ro/​| OptimusDigital]] 
 +  * Exemple oferite de Arduino IDE, cu bibliotecile folosite: 
 +      * [[https://​arduinogetstarted.com/​tutorials/​arduino-led-matrix| LED Matrix]] 
 +      * [[https://​arduinogetstarted.com/​tutorials/​arduino-keypad| Keypad]] 
 +      * [[https://​arduinogetstarted.com/​tutorials/​arduino-7-segment-clock| Timer]] 
 +      * [[https://​arduinogetstarted.com/​tutorials/​arduino-buzzer-library | Buzzer]]
  
pm/prj2024/fgul/ionela.strimbeanu.1716421195.txt.gz · Last modified: 2024/05/23 02:39 by ionela.strimbeanu
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