This shows you the differences between two versions of the page.
pm:prj2024:ccontasel:maria.vasilache [2024/05/11 00:25] maria.vasilache [Schema bloc] |
pm:prj2024:ccontasel:maria.vasilache [2024/05/26 17:55] (current) maria.vasilache [Bibliografie/Resurse] |
||
---|---|---|---|
Line 6: | Line 6: | ||
**Grupa:** 331CB | **Grupa:** 331CB | ||
- | **Indrumator:** Cristian Contasel | + | **Îndrumător:** Cristian Contășel |
</note> | </note> | ||
===== Introducere ===== | ===== Introducere ===== | ||
- | Proiectul are ca finalitate un joc cu doua moduri: **Piano Tiles** si **Nostalgia**. Intr-o nota mai minimalista, jocul **Piano Tiles** se rezuma la sincronizarea apasarii unor butoane cu aparitia clapelor pe un display. Pentru a marca finalul unui joc, se vor aprinde niste leduri, ori verde, ori rosu, in functie de castig. **Nostalgia** este un adaos pentru jucator, acesta putand sa redea piese vechi romanesti cu ajutorul unui cardSD. | + | Proiectul are ca finalitate un joc cu doua moduri: **Piano Tiles** si **Nostalgia**. Într-o nota mai minimalistă, jocul **Piano Tiles** se rezumă la sincronizarea apăsării unor butoane cu apariția clapelor pe un display. Pentru a marca finalul unui joc, se vor aprinde niște leduri, ori verde, ori roșu, în funcție de câștig. **Nostalgia** este un adaos pentru jucător, acesta putând să redea piese vechi românești cu ajutorul unui card SD. |
- | Scopul principal al proiectului este de a intoarce in trecut userul, fie prin piesele vechi, fie prin jocul foarte popular prin 2014. | + | Scopul principal al proiectului este de a întoarce în trecut user-ul, fie prin piesele vechi, fie prin jocul foarte popular prin 2014. |
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | Proiectul va fi realizat cu ajutorul Arduino. Avand un display si butoane sincornizate, voi realiza jocul propriu-zis, iar castigul il voi marca prin ledurile care se vor aprinde verde sau rosu. Jocul va avea un timp limitat pana se va decide castigarea lui. Redarea muzicii o voi face cu ajutorul unui SD card reader si al unui difuzor. Piesele disponibile pe cardul de memorie vor fi alese in urma unui sondaj de opinie. 'Skip song' va fi realizat cu ajutorul unui buton. Odata ajuns la finalul unei melodii, urmatoarea se va reda automat, pana la terminarea playlist-ului. | + | Proiectul va fi realizat cu ajutorul plăcuței Arduino UNO. Având un display și 3 butoane sincronizate, voi realiza jocul propriu-zis, iar câștigul îl voi marca prin ledurile care se vor aprinde verde sau roșu. Câștigul jocului e determinat de apăsarea corectă a butoanelor. Dacă se greșește de 3 ori, se ajunge la pierderea rundei. Redarea muzicii o voi face cu ajutorul unui SD card reader și al unui difuzor. Piesele disponibile pe cardul de memorie vor fi alese în urma unui sondaj de opinie. 'Skip song' va fi realizat cu ajutorul unui buton. Odată ajuns la finalul unei melodii, următoarea se va reda automat, pana la terminarea playlist-ului. |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
- | Lista de componente: | + | Lista de componente și rolul lor: |
- | * placuta Arduino | + | * **placuță Arduino UNO:** microcontroller-ul controlează activitatea celorlalte componente. Acesta primește input de la butoane și de la modul SD și oferă output spre led-uri, ecranul OLED și speaker; |
- | * display | + | * **breadboard:** conectează componentele între ele și cu placa Arduino UNO; |
- | * butoane (minim 4) | + | * **display OLED:** afișează matricea 3x3 a jocului și mesaje; |
- | * leduri (minim 2) | + | * **5 butoane:** 3 dintre ele sunt folosite pentru jocul de Piano Tiles, unul este folosit pentru a face switch între moduri, iar ultimul oferă posibilitatea de a da Skip pieselor redate de pe cardul de memorie; |
- | * SD card reader | + | * **led roșu:** anunță o greșeală făcută de user în timpul jocului; |
- | * SD card | + | * **led verde:** anunță câștigarea rundei; |
- | * difuzor | + | * **modul cititor card SD:** ajută la citirea pieselor de pe cardul de memorie; |
+ | * **SD card:** stochează piesele ce urmează să fie redate; | ||
+ | * **difuzor loudity ld-bzpn-2312:** redă piesele; | ||
+ | * **rezistențe:** limitează curentul electric care trece prin leduri și butoane (rezistență de pull-down); | ||
+ | * **fire:** unește componentele. | ||
===== Schema bloc ===== | ===== Schema bloc ===== | ||
- | {{:pm:prj2024:ccontasel:schema_bloc.drawio_1_.png|}} | + | {{:pm:prj2024:ccontasel:schema_bloc.drawio_1_.png?400|}} |
+ | ===== Schemă electrică ===== | ||
+ | {{:pm:prj2024:ccontasel:arduino_tiless_bb.png?450|}} | ||
+ | {{:pm:prj2024:ccontasel:arduino_tiless_schem.png?450|}} | ||
+ | |||
+ | În schema de mai sus am ilustrat conexiunile dintre componente, o prezentare vizuală fiind mai sugestivă. Se pot observa pinii folosiți și cu ce componente sunt legați. | ||
+ | |||
+ | |||
+ | ===== Descriere pini ===== | ||
+ | Toate componentele sunt legate și la VCC și Ground. | ||
+ | |||
+ | Componentele și pinii folosiți: | ||
+ | * **display OLED:** se folosește de protocolul I2C și se conectează la pinii **A4** (pentru SCL - serial clock) și **A5** (pentru SDA - serial data), ambii fiind pini analogici; | ||
+ | * **5 butoane:** sunt conectate la pinii digitali **6**, **7**, **8**, **9**, **10**, ca input; | ||
+ | * **ledurile:** sunt conectate la pinii digitali **2** și **5** ca output; | ||
+ | * **modul cititor card SD:** se folosește de protocolul SPI și se conectează la pinii **11** (pentru MOSI - Master Out Slave In), **12** (pentru MISO - Master In Slave Out), **13** (pentru SCK - Serial Clock) și **3** (pentru CS - Chip Select). | ||
+ | * **difuzor loudity ld-bzpn-2312:** este conectat la pinul analog **A1**, ca output. | ||
+ | |||
+ | |||
+ | ===== Merge? ===== | ||
+ | |||
+ | {{:pm:prj2024:ccontasel:first_try.jpg?300|}} | ||
+ | |||
+ | Se poate observa că pe ecranul display-ului este afișat mesajul de început de joc. | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | Inițial, am creat câteva variabile globale și define-uri pentru a fi mai ușoară accesarea lor. Acestea referă pinii conectați la componente, elemente ale jocului și modurile de redare. | ||
- | <note tip> | + | Bibliotecile foloiste: |
- | Descrierea codului aplicaţiei (firmware): | + | * pentru funcționarea display-ului (afișarea datelor), am folosit bibliotecile **Adafruit_GFX.h** și **Adafruit_SSD1306.h**; |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * pentru comunicare I2C cu display-ul, am folosit biblioteca **Wire.h** |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * pentru comunicarea cu cardul SD, am folosit **SD.h**; |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * pentru comunicarea SPI cu SD card reader-ul, am folosit **SPI.h**; |
- | * (etapa 3) surse şi funcţii implementate | + | * pentru sunet, prin buzzer, am folosit **TMRpcm.h**. |
- | </note> | + | |
+ | Funcțiile implementate: | ||
+ | * **setup()** - setez pinii ca INPUT/OUTPUT(butoanele => input; ledurile => output), pregătesc display-ul, speaker-ul și SD reader-ul spre a fi folosite (sunt definite global); | ||
+ | * **loop()** - verific modul de redare (0 = PIANO_TILES; 1 = NOSTALGIA_PLAYER). În cazul în care se apasă Butonul 1, se face switch între acestea, iar apăsarea butonului 2 realizează intrarea în modul respectiv; | ||
+ | * **updateModeDisplay()** - Înainte de a se porni modul de redare, pe display va apărea titlul modului ales pentru o mai ușoară gestionare a lor de către utilizator; | ||
+ | * **drawGameMatrix()** - Se creează matricea pentru joc din pătrate. Pentru un 'tile', se va afișa un pătrat plin; | ||
+ | * **startPianoTilesGame()** - Aici este prezentă logică jocului de Piano Tiles. Pe display va apărea o matrice 3x3, care va imita pianul. Ulterior se verifică daca butonul apăsat (Butoanele 3, 4 și 5) corespunde cu cel unde se află clapa pe ecran. În caz de eșec, se incrementează contorul 'misses' și se aprinde ledul roșu. Această variabilă este verificată constant, deoarece, ajunsă la 3, determină finalitatea jocului. Pentru 5 apăsări corecte se aprinde ledul verde, care marchează o rundă câștigată | ||
+ | * **startNostalgiaPlayerGame()** - Se redau piesele citite de pe cardul de memorie. La apăsarea butonului 1, se oprește melodia și se iese din modul Nostalgia Player; la apăsarea butonului 2, se dă skip la piesa curentă; la apăsarea butonului 3, se pune pe pauză melodia. | ||
+ | |||
+ | |||
+ | Printre programele folosite se numără: Arduino IDE (pentru codare), Fritzing (pentru crearea schemei electrice) si draw.io (pentru crearea schemei bloc). | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Ca finalitate, s-a obținut un joc simpatic de Piano Tiles, generat random, care permite jucătorului să își pună la încercare atenția și reflexele. |
</note> | </note> | ||
- | |||
- | ===== Concluzii ===== | ||
===== Download ===== | ===== Download ===== | ||
+ | Arhiva conține codul, schemele și un mic demo. | ||
+ | {{:pm:prj2024:ccontasel:pm_piano_tiles.zip|}} | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | {{:pm:prj2024:ccontasel:jurnal2pm.png?500|}} |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | |
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | **Resurse Hardware** |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * https://cleste.ro/placa-de-dezvoltare-uno-r3-atmega328p.html |
- | </note> | + | * https://cleste.ro/ecra-oled-0-96-inch.html |
- | + | * https://www.optimusdigital.ro/ro/altele/98-modul-cititor-card-sd.html?search_query=Modul+cititor+card+SD&results=5 | |
- | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | + | |