Maze este un joc ce afiseaza pe ecran un labirint si o minge. Mingea este controlata prin inclinatia placutei fata de pamant, pentru a simula o sfera care poseda masa. Inclinatia se masoara, folosind un accelerometru. Ideea de a folosi un accelerometru am gasit-o uitandu-ma prin proiectele de anul trecut, iar ideea jocului de pe youtube. Utilitatea proiectului nu vine din scopuri practice, fiind doar un joc simplu, ci din deprinderile obtinute prin realizarea lui.
Schema bloc a proiectului este:
In mod logic, aplicatia mea se poate descompune in trei blocuri ce reprezinta cele trei componente principale. Microcontrolerul va transmite semanale de comanda si date catre LCD. Comunicatia cu ecranul trebuie realizata, implementand in program protocolul folosit de catre ecran. Microcontrolerul va primi de la accelerometru informatii. Comunicatia cu accelerometru este mult mai simpla, nu presupune un protocol. Input-ul este sub forma de niveluri de tensiune date la pinii accelerometrului, proportionale cu inclinatiile fata de fiecare dintre axe.
Lista de piese necesare inafara de placuta din etapa I a proiectului:
Schema placutei realizate in etapa I este :
Schema accelerometrului este:
Pentru conectarea accelerometrului am lipit cele 6 diode in serie cu scopul de a reduce tensiunea de alimentare data de placuta (5V) la tensiunea de 2V, o tensiune acceptabila pentru tipul de accelerometru pe care l-am folosit eu. Restul pinilor de pe acelerometru se puteau conecta fara alte componente electronice auxiliare. Pinii X, Y, Z pot fi conectati pe oricare dintre pinii PA0 pana la PA7,iar pinul pentru masa se conecteaza si acesta direct. Eu pe Z l-am lasat liber, neavand nevoie de 3 axe. La acest model de accelerometru mai exita un pin, numit ST (self test). Acesta, cand este adus la masa, comanda accelerometrul sa dea rezultate ce corespund unei valori a acceleratiei, specificata in datasheet, pentru a testa functionalitatea componentei. Si pe acest pin l-am lasat neconectat.
Pentru scrierea programului nu am folosit un mediu de dezvolare, doar Notepad++, Makefile si compilatorul avr-gcc. Programul a constat in initializarea convetorului anlog-digital pentru a citi masurile efectaute de accelerometru, implementarea protocolului pentru comunicatia cu ecranul si logica jocului. In cazul meu comunicatia se face printr-o interfata seriala. Cele mai importante functii implementate pentru interactiunea cu ecranul sunt:
void setX(char value)
void setY(char value)
void setBackgroundBrightness(char value)
void clearScreen()
void drawLine(char startX, char startY, char endX, char endY, char state)
void drawCircle(char startX, char startY, char radius, char state)
Am indeplinit cerintele specifice proiectului meu: afisarea pe ecran, interpretarea semnalelor primite de la accelerometru, doar ca mai exista un bug care strica uneori afisajul.
A fost destul de greu sa inteleg codul din link-ul aferent ecranului si doar dupa aceea am inteles ca nu era necesar sa stiu ce se intampla acolo. Pentru cei interesati sa faca ceva cu un afisaj NU recomand ecrane Nokia. Sunt prea greu de lipit, iar la final daca nu merge de la inceput e destul de greu sa afli care este problema.
Un moment ce trebuie mentionat a fost faptul ca mi s-a defectat ecranul Nokia si l-am inlocuit cu unul de tipul LCD-08884 de la firma SpurkFun Electronics, cumparat de la http://www.robofun.ro.