Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul meu consta in utilizarea unui LCD grafic si al unui senzor cu gyroscop pentru a face un joc in genul lui Space Impact, de pe Nokia 3310 [1], al carei nava spatiala(sau avion) sa fie miscat prin inclinare. Va contine si un senzor de lumina pentru a face schimbare intre zi si noapte. Scopul proiectului este sa se ajunga la o varianta handheld, care sa nu fie prea mare. Ideea vine din pasiunea mea fata de consolele handheld, iar din nevoia de a incerca si eu ceva de genul, am ales un proiect din care pot invata mai multe si experimenta cu modulele/tehnologiile existente.
Ideal as vrea sa adaug o baterie pentru alimentare ca sa poate fi suta la suta handheld. Si mai ideal as vrea sa fac si o carcasa pentru acesta, insa inainte sa adaug toate lucrurile astea, mai intai vreau sa vad ca termin ce este propus deja.
Proiectul va contine microcontroler-ul peste care se va adauga o placa de dezvoltare peste care se vor pune LCD-ul grafic si cateva butoane, iar intre aceste 2 vor fi senzorul cu accelerometru/gyroscop si senzorul de lumina. Comunicatia intre cele 3 module se va face prin:
SPI - LCD grafic I2C - Senzor accelerometru/gyroscop ADC - Senzor de Lumina
Se programeaza un joc in C pentru microprocesor, care va avea un avion/nava spatiala ce va putea fi controlat fie prin butoane sau prin inclinarea device-ului, iar acesta va impusca inamicii ce vor aparea, cat timp se incearca evitarea obstacolelor. Acesta va putea sa-si schimbe culorile in functie de lumina de afara (daca este zi sau noapte).
Switch-ul va fi utilizat pentru schimbarea intre miscare prin gyroscop sau miscare prin butoane si pentru a selecta daca se doreste ramanerea pe varianta zi sau noapte.
Lista de piese:
Placuta cu piesele de baza oferite in sectiunea Cablaj imprimat 2018 LCD grafic ST7735 de 1.8'' sau ILI9341 de 2.8'' Senzor cu accelerometru/gyroscop 3 Axe MPU6050 GY Senzor de lumina ALS-PT19 Butoane Switch Placuta de prototipare
Windows Sublime HIDBootFlash
i2cmaster.h mpu6050.h mpu6050registers.h spi.h (Din laboratorul 5) ST7735R_TFT.h (Din laboratorul 5)
Jocul este impartit pe frame-uri, fiecare actiune luata fiind schimbata la fiecare frame care trece. Din aceasta cauza butoanele si switch sunt implementate prin verificare manuala (nu este nevoie de intrerupere). Switch-ul 1 decide daca se va lua in considerare ziua/noaptea, iar switch-ul 2 decide daca miscarea navei se face prin apasarea butoanelor sau prin inclinare(gyroscop).
SW 1: on = se schimba de fiecare data cand senzorul de lumina detecteaza lumina sau lipsa luminii off = ramane in starea de zi/noapte actuala pana cand se pune pe on SW 2: on = prin inclinare off = prin apasarea butoanelor
Senzorul de lumina este implementat prin folosirea pinilor care au convertorul analog-digital(ADC). Aceste este citit odata la fiecare frame si se ia decizia daca este zi sau noapte.
Se comunica cu gyroscopul prin protocolul I2C. La fiecare frame se verifica inclinarea si se misca nava in functie de inclinare.
Comunicarea cu LCD-ul grafic este facuta prin SPI.
Pentru acuratete, la initializare se face o calibrare pentru a avea usurinta in detectarea miscarii.
LCD ST7735 de la optimus (160×128) (Conform bibliotecii luate din lab-ul 5)
GND, VCC SCL - PB7 SDA - PB5 (MOSI) RES - PB1 DC - PB4 CS - PB0
MPU6050
GND, VCC SCL - PC0 (SCL) SDA - PC1 (SDA)
Senzor Lumina
Minus - GND Plus - VCC OUT - PA0 (alegere dintre toti pinii portului A)
Proiect foarte fun de facut, inveti si repeti cam tot ce ai facut la lab si ai multa versatilitate in ceea ce poti face. Mi-a placut sa lucrez la el (cu exceptia unor lucruri care vor fi spuse in feedback).
Sfaturi pentru oameni ce ar vrea sa faca un joc pe lcd grafic:
- LCD-ul grafic ST7735 este foarte bun, merge bine, are culori frumoase, usor de folosit si aveti deja biblioteca din Lab5. Va propun sa-l folositi, dar aveti grija la urmatorul punct.
- Va sfatuiesc sa aveti grija ce luati de la optimus digital, de exemplu desi lcd-ul era vandut ca lcd SPI, acesta avea pini de I2C (In continuare se putea face pe SPI, insa pinul de SDA era echivalent cu pinul MOSi si cel de SCL cu SCK; nu uitati sa punei CS, este esential, iar daca folositi bilbioteca de la laborator, este pe pinul PB0).
- Alt exemplu ciudat era Accelerometru care era vandut ca MPU6500, insa pe el zicea clar ca este 9225. Acuma nu stiu care e faza aici, dar nu am gasit biblioteci pentru nici una si a fost mai usor sa cumpar un MPU6050, care merge foarte bine si are bilbioteci peste tot.
- Verificati-va din timp componentele, eventual poate pe un arduino ca sa stiti ca merg. Am patit sa am port-ul USB-B din lista pieselor de baza stricat, sa nu faca bine contactul tot timpul si fiindca am ales sa ignor asta pana in ultima noapte, atunci a murit complet si a trebuit sa folosesc placa colegilor.
- Ganditi-va foarte bine la cum vreti sa programati jocul!!! S-ar putea as realizati ca aveti nevoie de structuri de date sau ca e mai greu de programat cum trebuie decat ati fi crezut.
Eu vreau sa-mi fac un handheld device cu RetroPie la vara si simt ca acest proiect m-a ajutat sa inteleg mai bine cum sa ma folosesc de modulele cumparate si cum sa ma interesez despre ce sa cumpar si cum sa ma documentez. M-a ajutat la formarea unei gandiri de ansamblu si simt ca m-am obisnuit sa folosesc letconul si sa lipesc.
Foarte misto sentiment cand iti poti tine tot proiectul terminat in mana, intr-o forma compacta, imi pare foarte rau ca nu am apucat sa fac cu baterie externa, ar fi iesit si mai bine asa.
Atmosfera de la PM Fair este una faina si multa lume cu proiecte foarte interesante, chiar te motiveaza sa vrei sa faci mai bine.
Urasc porturile USB-B care nu merg
Toate bibliotecile folosite se afla in arhiva proiectului. Lab 5 a fost esential si de acolo am luat bibliotecile SPI si ST7735
[1] https://www.youtube.com/watch?v=fvHPcgZy8E8