Teekkareiden Juomapeli Mika Taskinen Taneli Veistinen 22.1.2010
Sisältö 1 Johdanto...1 2 Komponentit ja materiaalit...2 2.1 Mikrokontrolleri...2 2.2 Pistematriisinäyttö...2 2.3 Virtalähde ja virran regulointi...2 2.4 Muut materiaalit...3 3 Laitteen valmistus...4 3.1 Suunnittelu...4 3.2 Piirilevyn valmistus...5 3.3 Ohjelmointi...5 3.4 Kotelointi...6 4 Pelin toiminta...7
1 Johdanto Tavoitteena oli tehdä juomapeli, joka on tarkoitettu 2-10 pelaajalle. Elkoma harjoitustyön lisäksi laite osallistuu vuoden teekkarikeksinö kilpailuun. Jokaista pelaajaa kohti tulisi oma led- valaisin. Laitteeseen oli myös tarkoitus laittaa kaiutin sekä pistematriisinäyttö, joka opastaisi pelaajia pelin kulussa ja näyttäisi alas juoksevaa aikaa. Juomapeli oli alunperin tarkoitus tehdä PIC- piirille. Meidän kokemattomuuden takia päätimme tehdä laitteen Atmelin ATmega 328P- piirille, johon on asennettu helposti lähestyttävä vapaaseen lähdekoodiin perustuva Arduino ohjelmointipohja. Piiri oli ihanteellinen tarkoitukseemme, sillä Arduinon kääntäjässä on valmiina kirjasto pistematriisinäytön, sekä kaiuttimen kytkemiseen, joka helpotti työtämme huomattavasti. Arduinon ohjelmointiin löytyy internetistä todella paljon esimerkkejä ja ohjeita esim. Arduinon kotisivuilta www.arduino.cc. 1
2 Komponentit ja materiaalit 2.1 Mikrokontrolleri Kuten jo johdannosta selviää laitteen aivoiksi otettiin Atmelin valmistama ATmega 328P- mikrokontrolleri. Laite on kokoonsa nähden hyvin tehokas. Piirissä on itsessään 32 kilotavua flash muistia, joista 2 kilotavua on Arduinon käytämää; 1 kilotavu EEPROM:ia; 2 kilotavua SRAM:ia sekä 19 ohjelmoitavaa pinniä, joista 6 kykenee pulssinleveysmodulaatioon. Piiri kykenee jopa 20MHz kellotaajuuksiin, mutta Arduino käyttää 16MHz kellotaajuutta. Mikrokontrollerin kellotaajuus saavutetaan ulkoisella 16MHz kideoskillaattorilla tai vaihtoehtoisesti resonaattorilla. Me valitsimme kideoskillaattorin, vaikka se on hieman kalliimpi kuin resonaattori, sekä tarvitsee erilliset kuormauskondensaattorit. Kideoskillaattorin etu verrattuna resonaattoriin on sen tarkkuudessa, sekä ympäristökestävyydessä. Atmel ATmega 328P Datasheet: http://www.atmel.com/dyn/resources/prod_documents/doc8161.pdf 2.2 Pistematriisinäyttö Pistematriisinäytöksi valittiin Hitachin HD 44780- piiriin perustuva 2- rivinen ja 16- merkkinen näyttö. Kyseiseen Hitachin piiriin perustuviin näyttöihin on Arduinon kääntäjässä valmiiksi kirjastot ja koodiesimerkit, jonka takia se oli helppo valinta meidän projektin kannalta. 2.3 Virtalähde ja virran regulointi Virtaa reguloimaan otettiin 7805- regulaattori. Regulaattori on siitä varsin kätevä, että käyttöjännitteeksi kelpaa 7-35 Volttia. Regulaattori hävittää jännite-eron 2
lämmöksi, joten asensimme varmuuden vuoksi. TO-220 paketoituun regulaattoripiiriin jäähdyttimen. Regulaattorin sisäänmenopuolelle laitettiin 100uF elektrolyyttikondensaattori ja ulostulopuolelle 10uF elektrolyyttikondensaattori ja 100nF polymeerikondensaattori postamaan häiriöitä sekä estämään 7805- piirin tuottamaa vähäistä vaihtovirtavuotoa. Koska regulaattori vaatii vähintään 7V toimiakseen päätimme ottaa virtalähteeksi 2kpl 9V neppariparistoa. Laite toimii yhdelläkin paristolla, mutta laitoimme rinnalle toisen, ettei paristoja tarvitse olla kokoajan vaihtamassa. Laitoimme laitteeseen myös DC- liittimen, jotta paristojen säästämiseksi laitteen voi kytkeä muuntajan kautta pistorasiaan. 2.4 Muut materiaalit Juomapeliin asennettiin yhteensä 11- lediä. 10kpl osoittamaan kutakin pelaajaa ja 1kpl osoittamaan laitteen päälläoloa. Jokaiselle ledille tuli tietenkin sopivan kokoiset etuvastukset. Kosteudenkestävä 50mm pienoiskaiutin tuottaa pulssinleveysmodulaation kautta eri korkuisia monofonisia ääniä. Laitteessa on myös 3kpl painonappeja. 2kpl valintojen tekemiseen ja 1kpl juoma-alustan tunnistamiseen. 3
3 Laitteen valmistus 3.1 Suunnittelu Aluksi teimme tarkan työjaon. Taneli vastaa laitteen suunnittelusta ja valmistamisesta ja Mika hoitaa laitteen ohjelmoimisen. Sovimme mitä mikrokontrollerin pinnejä käytämme minkäkin komponentin ohjaamiseen, sekä mitä laitteen pitää tehdä ja mitä sen täytyy sisältää. Tämän perusteella tehtiin kytkentäkaavio laitteeseen ja testattiin laitteen toiminta koekytkentälevyllä. Kun kytkennät ja ohjelma todettiin toimiviksi aloitettiin PCB:n suunnittelu. PCB eli printed circuit board suunniteltiin Cadsoftin tekemän Eagle -sovelluksen avulla. Eagle on todella tehokas suunnitteluohjolma, joka sisältää runsaasti eri valmistajien komponentteja kirjastossaan. Kuva kytkentäkaaviosta. 4
3.2 Piirilevyn valmistus Piirilevy on melko helppo valmistaa tarkasti valotus syövytys- menetelmän avulla. Ensiksi tulostetaan haluttu kuvio kalvolle. Sitten kalvo laitetaan uv-herkällä lakalla päällystetyn piirilevyn päälle ja valotetaan UV-lampun alla noin 90 sekunttia. Piirilevy tämän jälkeen kehitetään natriumhyroksidi- liuoksessa ja syövytetään natriumpersulfaatti- liuoksessa. Kun piirilevy on syöpynyt siihen porataan reiät komponenteille. Tämän jälkeen piirilevystä pestään ylimääräinen lakka ja lika pois esim. asetonilla. Tämän jälkeen piirilevy on valmis komponenttien juottamiseen. Kuva komponenttipuolesta. Kuva juotospuolesta. 3.3 Ohjelmointi Juomapelin ohjelman prosessoijana toimii Arduino piiri, jolle löytyy oma kääntäjäohjelma Arduino alpha 0017. Kyseinen ohjelma toimii pääasiallisesti C++ kielellä, mutta joukossa selkeästi joitakin java kielen ominaisuuksia. Ohjelman saaminen piirille on näennäisen helppoa, jos käytössä on ohjelmointialusta, jonka avulla mikrokontrolleri keskustelee tietokoneen kanssa. Ohjelmointi itsessään ei tietenkään ole ihan niin yksinkertaista. 5
Arduino käy ohjelmointikoodia läpi jatkuvassa silmukassa, jolloin esim. nappien painalluksien tunnistaminen muotoutuu hieman mutkikkaaksi. Periaatteessa piirin toiminta koostuu kolmesta osasta, jossa aluksi määritellään kaikki muuttujat ja alifunktiot, sitten on setup() funktion vuoro, jossa asetukset eri piirin pinneille laitetaan kuntoon. Esimerkiksi lcd näyttö laitetaan päälle ja ilmoitetaan mitkä pinnit antavat virtaa ulos ja mistä menee sisään (ledit, napit, kaiutin). Sitten on vuorossa piirin päävaihe loop() funktio, jossa varsinainen ohjelma suoritetaan. Juomapeli sinällään koostuu neljästä päävaiheesta. Ensin on alkuefektit, sitten pelaajamäärän valinta, sitten juomavaihe ja lopuksi tilastot. Näin vaiheittain ohjelmaa tehdessä säätetään paljon päänvaivaa kun vaiheet voidaan erotella yksinkertaisella if toiminnolla. Lisäksi juomavaiheessa on ns. alivaiheet (pelaajan valinta, juominen, tarkistus), jotka toimivat myös samalla periaatteella. Koko koodin tekemiseen meni noin 1000 riviä koodia ja kokoa tuli jotakuinkin 15kt käännettynä. Arduinolle kuitenkin mahtuu tuplaten, joten tilanpuute ei tullut ongelmaksi. Suurimmat tilan vievät asiat olivat lcd näyttö, eeprom muistin editoiminen ja musiikin eli monofonisen piippausäänen sisällyttäminen laitteeseen. Laitteen ohjelmointi sinällään oli erittäin vaiherikas. Ensimmäinen tyydyttävästi toimiva versio oli peräti 10. versio ja tuohon versioon ei oltu vielä laitettu eepromin muokkausta. Lopullinen versio, joka piirille jätettiin oli versio 13. Ongelma ohjelmoinnissa oli se että kaikki ohjelmointi piti vaihe kerrallaan testata itse laitteella koekytkentälevyillä. Lisäksi jokainen vaihe vaati laajaa ohjelmointia ennekuin siitä tuli edes testauskelpoista. Sitten kun tuo osuus oli valmis olikin kyse enää vain bugien poistosta. 3.4 Kotelointi Laitteen valmistuttua oli jäljellä vain kotelointi. Kotelo päätettiin suunnitella itse ja tilata laserleikattuna, kaiverrettuna, taivutettuna ja hitsattuna. Materiaaliksi valittiin tyylikäs hiottu 2mm AISI 304 ruostumaton teräs. Kotelo piirrettiin Autocadillä, jonka jälkeen valmistus oli firman harteilla josta kotelo tilattiin. 6
4 Pelin toiminta Kun juomapeli kytketään päälle, lähtevät alkuefektit päälle. Näyttöön tulee teksti Tervetuloa juomapeliin! ja valot alkavat vilkkua luoden hienon alkuefektin. Napauttamalla jompaa kumpaa pelinappia siirrytään seuraavaan vaiheeseen. Toisaalta, jos nappia pidetään pohjassa n. 2 sekuntia niin eteen tulee tilastot siitä kuinka monta kertaa peli on käynnistetty ja kuinka monta kertaa peli on pelattu loppuun. Napin vapauttamalla siirrytään tästä vaiheesta seuraavaan. Pelin toisessa vaiheessa valitaan pelaajien määrä. Vähintään kaksi on tietenkin mukana, jotta saadaan kilpailua aikaiseksi. Myöskin pelaajia vastaavat ledit palavat. Napilla 1 valitaan pelaajat ja nappia kaksi painetaan kun pelaajamäärä on sopiva ja siirrytään seuraavaan vaiheeseen. Pelin kolmannessa vaiheessa on varsinainen peli. Valo pyörii ympäri pelialustaa rulettiefektinä, kunnes se osuu pelaajaan, joka on mukana ja joka ei edellisellä kierroksella ole joutunut juomaan. Kun pelaaja on valittu, asettaa hän juomalasin alustalle ja varmistaa napin painalluksella olevansa valmis. Aika lähtee juoksemaan heti kun juoma nostetaan alustalta ja aika näytetään aktiivisesti lcd -näytöllä. Mikäli pelaaja ehtii annetussa ajassa asettamaan lasin takaisin alustalle, kuuluu voittoääni ja sen jälkeen näytetään kuinka kauan juomiseen meni aikaa. Hetken kuluttua kysytään oliko suoritus tarpeeksi hyvä. Jos oli niin painetaan nappia 1, muutoin nappia 2 ja pelaaja poistuu pelistä. Mikäli suoritus oli hyvä niin seuraavalla kierroksella aikaa juomiseen on vähemmän. Mikäli pelaaja epäonnistuu niin aika pysyy samana. Kun pelaajia on jäljellä enää yksi niin tuo pelaaja on voittaja ja siirrytään lopputilastoihin, jossa kerrotaan voittaja, kierrosten määrä, paras alitus, eli pienin aika, josta selvittiin ja paras aika missä juotiin. Sen jälkeen on vielä lopputekstit. Pitämällä jompaa kumpaa nappia pohjassa pari sekuntia siirrytään pelin alkuun ja voidaan aloittaa uusi peli. 7
5 Loppusanat Vaikka projekti oli ehkä vähän liian kunnianhimoinen taidoillemme se oli meidän mielestämme täysi menestys. Tavoitteet tuli täytettyä, jopa ehkä ylitettyäkin. Työ sujui molemmilta melko mutkattomasti ja työnjako oli hyvä. Projektin budjetti ylittyi puolella, mutta ei se taloutta kaatanut. Laite on tähän asti toiminut halutulla tavalla ja kestänyt teekkareiden kovakouraista käsittelyä. Molemmat on oppinnut todella paljon elektroniikasta ja mikrokontrollereista koko kahden kuukauden aikana, kun laitetta on suunniteltu ja rakennettu. Toivomme, että laitteelle on käyttöä ja että voitamme vuoden teekkarikeksintö- palkinnon. Kaikenkaikkiaan voidaan sanoa, että hauskaa oli. 8