Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul meu ese reprezentat de jocul Labyrinth Ball, ce consta in miscarea unei bile cu ajutorul accelerometrului (in functie de nivelul de inclinare al placii) printr-un labirint.
Scopul jocului este ca utilizatorul sa mute bila prin labirint pentru a ajunge la targetul final si, astfel, sa castige jocul. Pe parcursul traversarii labirintului, jucatorul trebuie sa se fereasca de obstacole, adica sa faca bila sa ocoleasca gaurile de pe parcurs.
Ideea de la care am pornit a fost utilizarea accelerometrului (joculetul de la ultimul laborator mi s-a parut destul de interesant) si crearea unui joc pe baza acestuia, prin miscari ale placii (ideea fiind inspirata dintr-un joc de pe Android).
Oricand este binevenita o pauza de la o tema la SO in care sa treci un nou nivel al jocului.
Schema bloc:
In functie de acceleratia masurata pe cele 3 axe, bila se va deplasa prin labirint, prin update-ul LCD-ului grafic.
Lista de piese:
Schema electrica:
PCB aditional pentru accelerometru si LCD(+ conectari):
In cadrul software-ului, am folosit 3 biblioteci gasite: cea pentru LCD-ul Nokia 5110 (ce apartine lui Tony Myatt - www.quantumtorque.com) si cele pentru accelerometrul ADXL345(ce apartine lui Davide Gironi), respectiv biblioteca ce implementeaza I2C Master folosind TWI (a lui Peter Fleury - http://jump.to/fleury). Am inceput prin a incerca sa inteleg mai bine interactiunea cu aceste biblioteci, prin a apela diverse functii din ele de care am avut nevoie: in cadrul accelerometrului initializarea comunicatiei cu acesta si citirea datelor de la el, cu functia getRawData(unde am folosit biblioteca i2c master implementata cu twi), precum si la LCD prin printarea de diferite caractere sau stringuri la pozitii diverse pentru a intelege mai bine plasarea caracterelor pe display.
Apoi, am unit aceste 2 biblioteci(am testat afisand output-ul accelerometrului pe lcd) pentru a obtine informatiile necesare jocului meu si a urmat etapa de implementare efectiva a jocului: crearea labirintului prin obstacole, ziduri si puncte de start, respectiv finish, implementarea miscarii bilei cu ajutorul datelor citite de la accelerometru.
Dupa terminarea jocului cu labirintul, mi s-a parut destul de interesant modul in care am reusit sa interactionez cu elemenele hardware si am vrut sa continui, astfel ca m-am gandit sa implementez inca un mod de joc (beat the clock), astfel ca player-ul sa isi poata selecta la inceput ce fel de mod vrea sa joace(am mai adaugat 2 butoane).
Jocul pot sa spun ca a iesit destul de bine. Are doua moduri de joc, unul dintre acestea avand 2 nivele. Este putin greu la inceput pana te obisnuiesti cu sensibilitatea accelerometrului(mai ales pe axa y).
Diverse stagii ale jocului:
Ca si concluzii, pot spune ca proiectul m-a ajutat sa inteleg mai bine cum functioneaza anumite elemente hardware si cum se realizeaza interactiunea cu acestea. In plus, mi s-a parut interesant faptul ca a trebuit sa imi realizez singur placa de test pe care mi-am lipit componentele in functie de schema electrica realizata.
Dezvoltarea de software a fost, de asemenea, una interesanta motiv pentru care am creat si al doilea mod de joc, din dorinta de a experimenta mai mult interactiunea dintre LCD si accelerometru si de a face jocul mai interesant.
Schema electrica(eagle schematic):schema-electrica.sch
Arhiva cod proiect:labyrinthball.zip
12 aprilie - Alegerea temei proiectului
19 aprilie - Creare si completare pagina de wiki cu lista de piese si schema bloc + descriere
26 aprilie - Finalizare lipit placa de baza
3 mai - Stabilire schema electrica de conectare pentru componentele aditionale(butoane,lcd si accelerometru) si placa de baza
10 mai - Finalizare lipit PCB aditional(cu butoanele,lcd si accelerometru) si conectare fizica cu placa de baza
12 mai - Integrare biblioteci lcd si accelerometru(afisat pe lcd datele date de accelerometru)
19 mai - Finalizare implementare software a proiectului
22 mai - Fixare proiect pe un suport de lemn pentru o utilizare mai facila
23 mai - Terminat de completat pagina de wiki + eventuale corecturi
Resurse Hardware:
Resurse Sofware: