Andrei-Ciprian DOBRE (25408) - PixelSurf

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

PixelSurf este un joc unde poți conduce o navă spațială într-o cursă cu obstacole. Pentru a caștiga, jucatorul este nevoit să evite coliziunea cu obstacolele prin mișcari stanga-dreapta ale placuței.

Sursa de inspirație este jocul AudioSurf, iar ideea inițială a fost să fac un joc controlat prin accelerometru. Utilitatea proiectului provine din experiența de lucru cu microprocesorul și restul componentelor.

Descriere generală

Schema bloc

Componentele principale din care va fi alcătuit proiectul (exceptând plăcuța cu atmega32) vor fi accelerometrul și LCD-ul grafic.

  • Accelerometrul - folosit ca mijloc de preluare a input-ului de la jucator, nava spațială va fi controlată prin mișcari laterale ale placii
  • LCD - folosit pentru reprezentarea traseului și a navei spațiale
  • Buton - folosit pentru resetare sau inceperea jocului

Microprocesorul va genera pentru început trasee cu obstacole amplasate într-un mod aleatoriu, va face verificarea pentru coliziuni și va asigura transmiterea de informație între mediul de input și cel de output.

Jocul începe prin apasarea butonului de start sau de reset, iar jucatorul are o perioada scurtă de acomodare înainte de apariția obstacolelor.

Hardware Design

Lista de piese:

Nume Preț
LCD TFT 2.2” 50 lei
ADXL345 25 lei
Regulator tensiune 3.3v 2.5 lei
30x cabluri mama-mama 15 lei
Baretă pini tata 2×40 ~7 lei
Baretă pini mama 2×10 ~5 lei
Condensator electrolitic x3 ~2 lei
Fludor 10 lei
Placă cu găurele 10 lei

Schema electrică

Schema electrica PixelSurf

Software Design

Dezvoltarea s-a facut intergal pe Linux. Am urmat pasii de pe wiki pentru a instala compilatorul si bibliotecile. Am folosit avr-gcc pentru compilarea surselor, iar scrierea pe micro-controller am făcut-o cu binarul furnizat tot pe site (bootloadHID).

Bibliotecile folosite au fost:

1. Biblioteca pentru controller-ul de LCD ili9341. Singura biblioteca portata pe dispozitive AVR și care nu depinde de vreun framework software se gaseste la adresa: link. Din fericire biblioteca este în același timp bine scrisă cât și ușor de înțeles. A fost nevoie doar de modificări minore pentru a o putea folosi. Biblioteca folosește protocolul SPI și pune la dispozitie mai multe metode de output. Contribuția mea (pe langa redenuirea unor regiștrii și schimbarea altora) a fost doar să adaug funcții de afișare numere și string-uri.

2. Biblioteca pentru ADXL345 Formată inițial din doua biblioteci, una pentru protocolul I2C și una pentru inițializare / comunicare cu ADXL. Forma finală face parte din biblioteca downloads

Am reununțat la biblioteca proprie pentru ADXL pentru ca cea de pe blogul de mai sus are functii mai avansate, cea mai importantă este cea care calculeaza roll-ul.

Implementare

Jocul este unul destul de simplist, cuprinde două părți importante.

  1. Generare de output prin desenarea elementelor jocului și preluare de input (masuratorile accelerometrului)
  2. Verificare coliziuni și menținerea logicii jocului

LCD-ul, deși este puțin încet, are mult potențial pentru a fi folosit la proiecte cu grafică mai complexă. Am încercat să folosesc ASCII art - voiam ca la finalul jocului să ajung la o planetă desenată din ASCII - dar am fost limitat de dimensiunea flash-ului. Binarul deja are 27KB.

Rezultate Obţinute

Proiectul a fost realizat în totalitate. Imagini:

https://www.youtube.com/watch?v=UtgZVNrVtNw

Concluzii

Proiectul m-a învățat o latură a ingineriei pe care nu o cunoșteam deloc și pe care sunt bucuros că am experimentat-o. A fost per total o experiență plăcută din toate punctele de vedere - montarea/lipirea pieselor, interfațarea componentelor, utilizarea, ințelegerea și scrierea de biblioteci, rularea de cod pe un micro-procesor, citirea unui datasheet. Internetul este deja plin de resurse și asta a făcut totul mai ușor, în plus am realizat câte lucruri pot fi facute de fapt cu un minim de cunoștințe și timp la dispoziție.

Realizarea proiectului nu a fost neaparat ușoară, dar asta doar din cauză că am fost neatent și a fost primul proiect de genul (și pentru că nu știu multe lucruri, gen electronică). Protocoalele de comunicație dintre piese sunt ușor de înțeles și folosit, tool-urile la fel. Dupa ce am trecut de stadiul inițial în care nimic nu mergea și nu se aprindea am realizat câtă muncă au depus deja alții pentru ca proiectele de genul ăsta să fie ușor de realizat (ma refer la datasheet-uri și biblioteci). Software puteam face mult mai multe, puteam sa pun niste mitraliere, lasăre, explozii - all the good stuff. Am pierdut însă mult timp încercând sa fac accelerometrul să meargă. Cu siguranță în anii urmatori, avand la dispoziție LCD-uri TFT capabile și biblioteci deja puse pe aici :) or să apară proiecte tot mai colorate.

Download

Arhiva cod sursa: pixel_surf.zip

Jurnal

Saptmana 10-11:

  • Am făcut schema electrică
  • Am cumpărat toate piesele necesare, am terminat plăcuța.

Saptamana 12:

  • Am lipit și montat toate piesele.
  • Am făcut biblioteca pentru LCD să meargă și am scris pe LCD.

Saptamana 13:

  • Am reusit să citesc date de la accelerometru.
  • Am scris codul pentru joc.
  • Cele mai multe greșeli le-am facut aici, mai ales cu accelerometrul. Am pus două fire mai la stânga decat trebuia, dar eram 100% sigur ca e bun montajul, așa că am învățat bine cum merge I2C și ce face biblioteca pentru ADXL crezând ca acolo e problema. Daca nu puneam firele alea aiurea învățam mai puțin.
  • Accelerometrul nu am reușit să îl fac să meargă cu SPI, am folosit I2C. E foarte posbil să fi făcut o greșeală (sau mai multe) cand am folosit SPI, dar nu mi-am dat seama de ea. În plus, conform link-ului de aici există două modele de accelerometru cu cipul ADXL345, iar cel vândut de optimusdigital nu suportă și SPI.
  • Am făcut plăcuța exterioară pe care se montează LCD-ul și accelerometrul.

Bibliografie/Resurse

pm/prj2016/amusat/pixelsurf.txt · Last modified: 2021/04/14 17:07 (external edit)
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