Differences

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

Link to this comparison view

pm:prj2024:fgul:claudiu.mogodeanu [2024/05/20 00:00]
claudiu.mogodeanu [Software Design]
pm:prj2024:fgul:claudiu.mogodeanu [2024/05/26 21:38] (current)
claudiu.mogodeanu [Rezultate Obţinute]
Line 58: Line 58:
   * Am testat individual fiecare componenta (dupa ce am dus toate firele), mai am de realizat software-ul complet   * Am testat individual fiecare componenta (dupa ce am dus toate firele), mai am de realizat software-ul complet
   * Componentele sunt lipite/​insurubate pe o placa de plexiglas pentru a le da o forma compacta   * Componentele sunt lipite/​insurubate pe o placa de plexiglas pentru a le da o forma compacta
-  * Nu m-am ocupat complet de cable management si design pentru background-ul placii, promit ca o sa arate mai bine de atat firele + 
-  De asemenea, inca nu este atasat servomotorul la cutie+** FORMA FINALA **\\ 
 + 
 +{{https://​ocw.cs.pub.ro/​courses/​_media/​pm/​prj2024/​fgul/​forma_finala_cm.jpeg?​600}}
  
 ===== Software Design ===== ===== Software Design =====
Line 74: Line 76:
 ** Proiectul propriu-zis:​ ** [[https://​github.com/​claudiu-mogo/​Impostor_Detector | github link]] ** Proiectul propriu-zis:​ ** [[https://​github.com/​claudiu-mogo/​Impostor_Detector | github link]]
  
 +Flow-ul principal poate fi reprezentat printr-un state machine destul de basic:\\
 +(notatiile pentru stari sunt aceleasi ca cele din fisierul States.h)
  
-<note tip> +{{https://ocw.cs.pub.ro/courses/​_media/​pm/​prj2024/​fgul/​state_machine1_cm.drawio.png?​600}}
-Descrierea codului aplicaţiei (firmware): +
-  * mediu de dezvoltare (if any) (e.gAVR 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>+
  
 +** Descriere sumara a functiilor si a scheletului:​ **\\
 +  * Am incercat sa modularizez pe cat posibil codul, dar nici sa nu am fisiere aproape goale.
 +  * **My_pins.h** contine alocarea de pini pentru cele 2 matrice si pentru butoanele separate, iar LCD-ul si buzzer-ul care sunt folosite in paralel cu celelalte functionalitati,​ au functiile definite in **Buzzer_lcd.cpp**
 +  * Se porneste din starea CHECK_DISTANCE,​ care este practic o stare idle, in care actioneaza doar senzorul de distanta pentru a detecta daca exista cineva in apropiere (ca in jocurile din AmongUs unde trebuia sa apropii mana pentru a da start). Functiile principale pentru aceasta sunt **read_distance()** si **get_average_distance()**,​ aflate in **Distance_sensor.cpp**. Pentru ca citirile mai dadeau si fals pozitive de genul: distanta 1 sau 0 chiar daca nu era nimic prin apropiere, a trebuit sa ma ocup de calibrarea acestuia. Am decis sa calculez media a 10 masuratori consecutive (facute la cateva milisecunde una de alta) inainte de a considera o valoare "pe bune". Abia apoi, daca distanta este si in cazul acesta de cativa cm, pornim jocul propriu-zis.
 +  * Se va considera starea BLINK_LEDS de maximum **max_level** ori, dupa fiecare nivel (apel de **random_led_sequence()**) utilizatorul trebuind sa repete secventa, fiind in starea REPLICATE. In momentul in care greseste o data, suna buzzer-ul si se reseteaza tot jocul. De exemplu, daca trebuie replicata o secventa de 5 led-uri si se greseste la al 3lea, nici nu se mai incearca ultimele 2.
 +  * Cand se completeaza toate nivelele, se ajunge in starea GG, in care se activeaza servomotorul si se apeleaza functia **sing()**.
 +  * In fisierul **song.cpp** am pus o secventa din Arduino Songs (link mai sus), fiind apelata prin sing().
 +  * Buzzer-ul, prin **small_buzz()** si **big_buzz()** din **Buzzer_lcd.cpp**,​ este folosit si pentru a anunta jucatorul cand poate incepe sa faca o actiune.
 +  * Oricand, pe parcursul jocului, se poate apasa pe unul din butoanele aditionale, care prin intreruperile **INT0** sau **INT1** modifica timpul in care un led sta aprins, marind sau micsorand dificultatea. Am folosit si un debounce diy bazat pe millis() trecute de la ultima apasare de astfel de buton pentru a evita detectiile eronate. Observasem initial ca mi se lua de 2-3 ori un buton, dar acum merg as expected.
 +  * Aditional, inainte de a incepe jocul (adica de a detecta senzorul ceva), cand se apasa pe butoanele separate, se poate seta numarul nivelelor pe care o sa le aiba utilizatorul de replicat pe parcursul jocului urmator.
 +  * Am incercat, pe cat posibil, sa fac lucrurile exact cum aveau loc in minigame-ul din AmongUs.\\
 +
 +** Laboratoare folosite: **\\
 +  * **intreruperi** la butoanele aditionale
 +  * **I2C** la ecran LCD
 +  * **PWM** la servomotor
 +  * **GPIO** la butoanele aditionale\\
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +Video demonstrativ:​ [[https://​youtu.be/​e2v6rafF98A?​si=K-xSSuDst3Fxy5WZ | Impostor Detector]]\\ 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +<html><iframe width="​560"​ height="​315"​ src="​https://​www.youtube.com/​embed/​e2v6rafF98A?​si=W2CZdvmhFi-dojYU"​ title="​YouTube video player"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture;​ web-share"​ referrerpolicy="​strict-origin-when-cross-origin"​ allowfullscreen>​</iframe></​html>
-</note> +
 ===== Concluzii ===== ===== Concluzii =====
  
 +Avand in vedere ca a fost prima mea interactiune (mai mult decat niste laboratoare cu schelet si placi deja existente) cu un Arduino, am invatat destul de multe lucruri interesante.\\
 +Tinand cont de lipsa de experienta, am decis din start sa nu ma indrept spre un proiect extrem de complex, desi nici acesta nu este laturalnic, astfel incat sa detin totusi control asupra lui si sa invat/​folosesc cat mai multe elemente de baza.\\
 +Imi plac bibliotecile externe, dar am folosit si cateva registre\\
 +Nu sunt extrem de multumit de aspectul proiectului,​ mai ales de cable management, dar este totusi destul de compact si complet functional.
 ===== Download ===== ===== Download =====
  
-<note warning>​ +Remember git for source code[[https://​github.com/claudiu-mogo/​Impostor_Detector | github project]]\\ 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etcUn fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-).+Cod, schematic si imagini: {{https://​ocw.cs.pub.ro/​courses/​_media/​pm/​prj2024/​fgul/​big_project_cm.zip | Arhiva}}\\
  
-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 Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +Sincer relevant este doar repo-ul de github. Restul sunt imagini ​care exista pe pagina ​de ocw deja.
-</​note>​+
  
 ===== Jurnal ===== ===== Jurnal =====
Line 106: Line 122:
   * 05.05 - Initiat jurnal   * 05.05 - Initiat jurnal
   * 12.05 - Unit fire si lipire initiala (hardware initial)   * 12.05 - Unit fire si lipire initiala (hardware initial)
-  * 15.05 - Realizat documentatie hardware+  * 15.05 - Done Milestone 2 (Documentatie Hardware) 
 +  * 19.05 - Gata 90%+ din software (de aici pot adauga chestii extra) 
 +  * 20.05 - Done Milestone 3 (Documentatie Software) 
 +  * 25.05 - Rezultate finale (video YouTube) 
 +  * 26.05 - Finalizat pagina OCW
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +1. [[https://​app.diagrams.net/​ | Draw.io]] -- pentru diagrame si scheme bloc\\ 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**+2. [[https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf | ATmega328P_Datasheet]]\\ 
-</note> +3. [[https://​www.optimusdigital.ro/​en/​led-matrices/​4404-ws2812-4x4-rgb-led-matrix.html?search_query=matrice+led&​results=29 | Optimus Digital]] - doar un exemplu de piesa. Si restul au fost cumparate tot de aici\\ 
- +4. [[https://ocw.cs.pub.ro/​courses/​tsc/​laboratoare/​laborator-02 | Laboratoare TSC]] - cum am invatat sa creez schematic si piese in Fusion 360\\ 
-<html><a class="​media mediafile mf_pdf"​ href="?do=export_pdf">​Export to PDF</a></html>+5. [[https://​roboromania.ro/​produs/​modul-4x4-keypad-matrix-buttons/​ | Modul-4x4-keypad-matrix-buttons]] - cod matrice butoane\\ 
 +6. [[https://​www.geeksforgeeks.org/​how-to-interface-i2c-lcd-display-with-arduino/​ | Tutorial lcd]] - samples de cod LCD\\
  
pm/prj2024/fgul/claudiu.mogodeanu.1716152458.txt.gz · Last modified: 2024/05/20 00:00 by claudiu.mogodeanu
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