Introducere

Daniil Constantin

Grupa 331 CC


Proiect la Proiectare cu Microprocesoare

Anul 2010

Profesor: Nicolae Tapus

Coordonator de Proiect: Dan Tudose


Titlul Proiectului: Space Invaders (joc realizat folosind o matrice de 8*8 leduri)

Descriere generală

Acest reprezinta o aplicatie realizata folosind o matrice de leduri. Aplicatia este clasicul joc Space Invaders .

Descrierea jocului:

-jucatorul trebuie sa apere eroic planeta sa de hoardele de invadatori extraterestrii

-jucatorul controleaza o nava care se poate deplasa spre stanga, dreapta sau poate trage (se afla pe nivelul inferior al campului de lupta)

-extraterestrii inamici vin in valuri, de la nivelul superior, incercand sa ajunga la cel inferior

-jucatorul are obiectivul de a trage si a omoara toti inamicii, pana ca aceastia sa ajunga la nivelul inferior

Implementarea jocului:

-jocul este implementat folosind o matrice de leduri 8*8 (campul de lupa este de 64 de leduri)

-atat nava, inamicii cat si proiectilele sunt reprezentate prin leduri aprinse

-nava este reprezentata de un led ce se poate deplasa pe randul cel mai de jos

-gloantele sunt reprezentate de un led, care se deplaseaza de jos in sus

-inamicii, reprezentati de cate un led, sunt grupati cate 8 pe un rand si se deplaseaza de sus in jos

-controlul este data folosind 4 butoane

  1. primul buton face ca nava sa traga
  2. al 2-lea buton face ca nava sa se miste spre stanga
  3. al 3-lea buton face ca nava sa se miste spre dreapta
  4. al 4-lea buton da restart la joc

Un screen-shot al jocului original este disponibil mai jos

Hardware Design

Schema:

Componente folosite:

  1. microcontrollerul AT-MEGA16, componentele de baza si placuta aferenta
  2. 2 matrice de leduri 5×8, UVP-2X58XX Series, din care folosim doar 8 coloane din cele 10
  3. 8 rezistente de 220 ohmi
  4. 5 butoane
  5. un integrat ULN2804A
  6. fire de conexiune

Proiectul poate fi vizualizat mai jos

Spatele placutei

Specificatii hardware:

  1. pentru alimentare este suficienta tensiunea data de mufa USB a unui calculator
  2. cele 2 matrice de 5*8 sunt conectate astfel incat ele, practic, sa formeze o matrice de 8*8
  3. integratul ULN2804A reprezinta perechi de tranzistoare darlington, folosite pentru a aprinde eficient matricea de leduri
  4. cele 8 rezistente sunt folosite pentru a “proteja” ledurile
  5. avem 5 butoane in total, toate folosibile, dar, pentru acest joc, vom folosi doar 4
  6. becurile matricii se aprind conform tensiunii date de pinii micro-controllerului

Software Design

Software-ul pentru rulalrea programului este scris in limbajul de programare C.

Reprezinta un singur fisier C numic spaceinv.c.

Pentru a putea rula, programul se complieaza rezultand un program hex, iar acesta se incarca pe microcontroller folosind programatorul USB.

Programul foloseste o matrice 8*8 a, pe care o scrie cu 0 si 1, 1 reprezentand leduri aprinse iar 0 leduri stinse.

Specificatii program:

  1. pentru a putea realiza afisarea am folosit o multiplexare in timp, afisand la un moment dat numai o coloana dar, facand acesta alternanta foarte repede, dam senzatia privitorului ca matricea este mereu aprinsa
  2. inaintarea in timp se face folosind o variabila volatila, care la anumite intervale va muta proiectilele si inamicii
  3. este folosita o metoda originala de delay (pentru butoane), trebuind sa treaca un timpul foarte mic intre 2 apasari de buton succesive

Specificatii joc:

  1. inamicii vor veni cate 8 pe rand, din cand in cand cate un rand si din cand in cand cate 2 randuri de-o-data
  2. idem jocului original, inamicii sunt invulnerabili cum apar pe teren, ei trebuind sa se miste spre jucator pentru a deveni vulnerabili
  3. odata ce oricare inamic a ajuns la nivelul inferior jocul se termina, putand fi restartat la apasarea butonului aferent

Modalitate de control:

Butoanele sunt numerotate astfel:

  1. butonul 1 = butonul cel mai apropiat de matrice
  2. butonul 2 = butonul urmator butonului 1, in sensul acelor de ceasornic
  3. butonul 3 = butonul diametral opus butonului 1, raportat la butonul dummy din mijloc
  4. butonul 4 = butonul diametral opus butonului 2, raportat la butonul dummy din mijloc
  5. butonul 5 = butonul dummy din mijloc

Butoanele au urmatoarele functii:

  1. butonul 1 = deplasare nava la dreapta
  2. butonul 2 = restart joc (poate fi apasat in orice moment)
  3. butonul 3 = deplasare nava la stanga
  4. butonul 4 = lansare proiectil

Avantajele software-ului / hardware:

  1. datorita faptului ca tot ceea de care avem nevoie este un program C si un makefile, putem spune ca spatiul redus ocupat de program este un mare avantaj
  2. programul este usor modificabil, anumite constante precum viteza proiectilelor sau a inamicilor putand fi modificate prin schimbarea unui singur numar
  3. proiectul poate fi usor schimbat sau extins (exista si un buton in plus) doar prin incarcarea altui program pe placuta

Rezultate Obţinute

Primul test a fost aprinderea, pe rand, a tuturor ledurilor de pe matrice, modificand pozitia ledului aprins folosind 4 butoane (sus, jos, stanga, dreapta).

Cel de-al doile test a reprezentat un prototip al joclui, inital existand doar o nava ce se putea deplasa pe o linie si trage.

Urmatorul teste a fost introducerea unui singur rand de inamici ce trebuia distrus.

Varianta finala a jocului a fost testa, existand mai multe randuri de inamici ce vin grupati diferit, jocul putand fi jucat la infinit.

O rulare a jocului poate fi vazuta mai jos

Click pentru video

Concluzii

Folosind numai componente electrice basice, a caror suma nu depaseste 70 RON, am realizat o consola primitiva de jocuri.

In functie de programul incarcat pe ea, pe aceasta “consola” putem joca jocuri precum snake, yams, pong etc.

Nintendo, Sony si Microsoft tremura deja. ;-)

Jurnal

-13 martie 2010 - corodat si gaurit placuta, la placutiada 2010

-19-20 martie 2010 - lipit componentele pe placuta

-22 martie 2010 - pus bootloader si program de test pe placuta → terminat faza 1

-6-8 aprilire 2010 - cumparat componente pentru proiect

-12-19 aprilire 2010 - lipit componentele pentru a crea matricea si butoanele

-28-30 aprilire 2010 - facut conexiunile intre placuta, butoane si matrice

-5 mai 2010 - scris program pentru aprinderea unui led de pe matrice

-10 mai 2010 - scris programul pentru realizarea primului prototipului jocului

-17 mai 2010 - imbunatatit programul prin adugarea unui sir de inamici care ataca si pot fi distrusi folosind proiectile

-26 mai 2010 - terminat de scris si testat varianta finala a jocului pe placuta

-3 iunie 2010 - retusat wikia, adaugat video + prezentat proiect

Bibliografie/Resurse

Componentele au fost luate de la magazinul Conex .

Idea de proiect a venit observand numeroase demonstratii ale unor proiecte pe o matrice de leduri, precum acesta .

Mai jos se afla atasate datasheet-urile de la matricea de leduri, integrat si AT-Mega-16, precum si programul in C, makefile-ul, programul hex si elf.

daniilconstantin.zip

pm/prj2010/dtudose/spaceinvaders.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