Differences

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

Link to this comparison view

pm:prj2022:arosca:darian.vrabie [2022/04/21 22:54]
darian.vrabie [Hardware Design]
pm:prj2022:arosca:darian.vrabie [2022/05/24 02:12] (current)
darian.vrabie
Line 1: Line 1:
 ====== Retro Racing Game ====== ====== Retro Racing Game ======
 ===== Introducere ===== ===== Introducere =====
-   * Proiectul va consta intr-un joc similar ​gasit cu cel pe consolele retro de tip 9999 games in 1. Mai exact, jocul cu masini, in care jucatorul controleaza o masina si trebuie sa evite ciocnirea cu alte masini, ce vin din fata. Viteza cu care masinile ce trebuie evitate apar pe ecran creste gradual, jocul devenind din ce in ce mai greuImplementarea NU se va face pe un ecran LCDci se va folosi o matrice de becuri LED. Fiecare LED va reprezenta un pixel al "​ecranului"​. Pentru matricea ​de LED-uri ​se vor folosi shift register iar pentru ​afisarea scorului se va folosi un ecran LCD 1602 +   * Proiectul va consta intr-un joc similar cu cel gasit pe consolele retro de tip 9999 games in 1. Mai exact, jocul cu masini, in care jucatorul controleaza o masina si trebuie sa evite ciocnirea cu alte masini, ce vin pe contrasens. 
- +===== Descriere generala ===== 
-===== Hardware ​Design ​===== +   * Jocul are 2 "​caractere":​ masina controlata de jucatorcare se afla in partea inferioara a matricei ​de LED-uri, si masinile ce vin de pe partea opusa. Scopul jocului este simplu: nu te ciocni cu celelalte masini ​pentru ​cat mai mult timp. 
 +{{:​pm:​prj2022:​arosca:​diag_gen.png?​700|}} 
 +===== Implementare ​Hardware =====
 Componentele necesare: Componentele necesare:
     * Arduino UNO     * Arduino UNO
-    * 10x20=200 LED-uri ​(aceasta este rezolutia unei console 9999 games in 1) +    * 8x8=64 LED-uri ​    
-    * breadboard, care ulterior va fi inlocuit de o placuta permanenta, mai usor de transportat +    * breadboard
-    * LCD 1602, pentru afisarea scorului+
     * shift registers, pentru multiplexarea LED-urilor     * shift registers, pentru multiplexarea LED-urilor
     * butoane, rezistente, fire, the usual stuff     * butoane, rezistente, fire, the usual stuff
 +    * <​del>​LCD pentru scor</​del>​ time constraints,​ procrastination and broken dreams
 +
 +Descriere implementare hardware
 +<note tip>​Stiati ca breadboard-urile au conexiuni comune intre gaurile de pe aceeasi coloana numerica? ​
 +Am aflat prea tarziu. :​^)</​note>​
 +   * Datorita intrebarii retorice de mai sus, partea hardware a proiectului functioneaza in felul urmator:
 +        * Exista 4 linii de cate 8x2=16 led-uri fiecare. Led-urile de pe fiecare linie sunt inseriate la anod.
 +        * Catodurile led-urilor sunt inseriate (short-ate?​) pe orizontala, de la o linie la alta, formand astfel 8 coloane.
 +        * Astfel, daca conectam prima coloana la GND si prima linie la VCC, se aprind primele 2 LED-uri (din moment ce sunt inseriate, cele 2 LED-uri aprinse se numara ca unul singur in software).
 +        * Aprinderea unui anumit set de led-uri de pe anumite randuri si anumite coloane se face cu ajutorul a doua shift-registere (de tip Serial Input Paralel Output, SIPO).
 +        * Un shift registru pentru linii, celalalt pentru coloane.
 +    * Se observa de asemenea prezenta a doua butoane. Ele sunt folosite pentru a misca masina jucatorului in stanga si in dreapta.
 +===== Schema hardware =====
 +{{:​pm:​prj2022:​arosca:​diag_hardware.png?​800}}
  
-===== Bibliografie/​Resurse ​=====+===== Implementare software ​===== 
 +     * "​Desenarea"​ scenei functioneaza asemanator cu un televizor vechi: fiecare coloana este aprinsa, pe rand, insa cu atat de putin delay intre tranzitii incat ochiul uman nu le poate detecta. 
 +     * Scena este defapt statica, desenata la fiecare ciclu al functiei while() din loop(), luand in considerare anumite variabile (numarul liniei pe care se afla jucatorul/​un inamic, coloana pe care se afla un inamic). 
 +     * Variabilele aceseta sunt modificate folosind intreruperi:​ 
 +         * Variabila ce denota linia pe care se afla jucatorul este schimbata in doua functii de intreruperi (pentru directia stanga, respectiv dreapta). Aceste intreruperi sunt atasate celor doua butoane mentionate anterior. 
 +         * Variabila ce denota linia pe care un inamic va aparea este de asemenea schimbata intr-o intrerupere,​ insa de data aceasta folosesc o intrerupere pe timerul intern. 
 +         * Miscarea inamicului este tratata in aceeasi intrerupere. La un anumit interval de timp, creste indexul coloanelor pe care sunt "​desenati"​ inamicii. 
 +     * Inamicii pot veni de pe maxim 3 linii (mereu ramane una libera), la intervale aleatorii. 
 +     * Coliziunea jucatorului cu un inamic este tratata la fiecare ciclu. Daca o masina inamica ajunge pe aceleasi coloane si aceeasi linie cu jucatorul, jocul se opreste, se aprind toate led-urile pentru a semnala acest lucru, si jocul o ia de la capat.
  
 +===== Rezultat final =====
 +   * Video: https://​www.youtube.com/​watch?​v=uSwPenMtLd0
 +===== Concluze =====
 +   * Acest proiect m-a invatat <​del>​ca trebuie sa ma apuc mai devreme de proiecte</​del>​ cum functioneaza un shift register folosit pentru a controla foarte multe LED-uri. De asemenea, am aprofundat conceptul de intrerupere,​ atat intreruperi hardware cat si folosirea unui timer intern.
 +===== Resurse/​Ghiduri folosite =====
 +   * Canalul DroneBot Workshop https://​www.youtube.com/​c/​Dronebotworkshop1 pentru:
 +           * Cum sa folosesc un cip shift register
 +           * Aprofundare intreruperi
 +   * Laboratoare PM
 +===== Download cod sursa =====
 +   * https://​github.com/​darian1901/​retro_racing_game_arduino
 <​note>​ <​note>​
-    Jocul original: https://​www.youtube.com/​watch?​v=H-L_ra5kT3k+    Jocul original, inspiratia acesui proiect: https://​www.youtube.com/​watch?​v=H-L_ra5kT3k
 </​note>​ </​note>​
  
pm/prj2022/arosca/darian.vrabie.1650570842.txt.gz · Last modified: 2022/04/21 22:54 by darian.vrabie
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