LANGATTOMAN PELIOHJAIMEN TOTEUTUS

Laurila Markus

Opinnäytetyö

Tieto- ja viestintätekniikka Insinööri (AMK)

2021

Opinnäytetyön tiivistelmä

Tieto- ja viestintätekniikka Insinööri (AMK)

Tekijä Markus Laurila Vuosi 2021 Ohjaaja Anssi Ylinampa Työn nimi Langattoman peliohjaimen toteutus Sivumäärä 33

Tämän työn tarkoituksena oli luoda langaton -tyylinen kitarapeliohjain PC:llä olevaa Clone Hero -peliä varten. Tutkin langattoman Guitar Hero -tyylisen kitarapeliohjaimen valmistusta ja siinä käytettäviä komponentteja ja teknologioita. Lopputuloksena oli toimiva langaton kitarapeliohjain, jonka käyttömukavuus on alkuperäistä parempi.

Rakensin kitaran alkuperäisen Guitar Hero -kitaran koteloon ja käytin siinä ESP32-kehitysalustaa, jossa on sisäänrakennettu Bluetooth. Kitarassa on ladat- tava akku, ja siihen on vaihdettu uudet kytkimet.

Käsittelyosiossa esittelen erilaisia kytkinvaihtoehtoja, niiden puolia ja niiden asennusta. Näiden lisäksi esittelen myös kehitysalustoja ja tarvittavia ominai- suuksia. Käyn myös läpi luomani ESP32-ohjelman sekä siinä käytetyt kirjastot ja niiden ominaisuudet.

Avainsanat Bluetooth, kehitysalustat, mikro-ohjaimet, ohjelmointi, soittopelit

Abstract of Thesis

Degree Programme in Information and Communication Technology Bachelor of Engineering

Author Markus Laurila Year 2021 Supervisor Anssi Ylinampa Subject of thesis Creation of a wireless game controller Number of pages 33

The purpose of this study was to produce a wireless Guitar Hero game controller for Clone Hero.

Components and technologies used for producing a wireless game controller were researched. The guitar was built in the shell of an original Guitar Hero guitar and the ESP32 development board, which supports Bluetooth, was used. The guitar has a rechargeable battery and new switches.

The result of this thesis study was a wireless game controller that is more pleas- ant to use than the original guitar Hero guitar. Various switch options, their pros and cons and their installation process, development platforms and required fea- tures, the created program for the ESP32 and the libraries that were used and their features, are all presented in the theory part of this thesis.

Key words Bluetooth, development platforms, microcontrollers, mu- sical instrument games, programming

SISÄLLYS

1 JOHDANTO ...... 6

2 GUITAR HERO -KITARAN OMINAISUUDET ...... 8

3 OHJAIMEN NÄPPÄIMET ...... 10

3.1 Kytkinvärähtely ...... 10 3.2 Ohjaimissa yleisesti käytetyt kytkintyypit...... 10 3.2.1 Kumikupoli ...... 10 3.2.2 Mekaaniset näppäimistökytkimet...... 11 3.2.3 Matalan profiilin kytkimet ...... 13 3.2.4 Elektroniikkakytkimet ...... 13 3.3 Kytkimien asennus kitaraan ...... 13

4 ESP32-KEHITYSALUSTA ...... 17

4.1 Pohjatietoa kehitysalustoista ...... 17 4.2 Tietoa ESP32-alustoista ...... 17 4.3 Energiansyöttö ja virrankulutus ...... 18 4.4 ESP32:n kytkeminen...... 20

5 ESP32-OHJELMA ...... 23

5.1 Määritykset ja muuttujat ...... 23 5.2 setup()- ja loop()-funktiot ...... 25 5.3 setupBouncer()- ja getHatState()-funktiot ...... 27

6 POHDINTA ...... 30

LÄHTEET ...... 32 5

KÄYTETYT LYHENTEET JA TERMIT

ADC Analogue-to-Digital Converter, muuntaa analogisen sig- naalin digitaaliseksi DPAD Directional Pad, peliohjaimen nuolinäppäimet GH Guitar Hero, Activisionin tuottama kitarapohjainen rytmi- peli GPIO General Purpose Input/Output, mikro-ohjaimissa olevia yleiskäyttöisiä datapinnejä PS PlayStation Strummauspalikka kitaran keskiosassa oleva palikka, jonka avulla nuotteja soitetaan Whammy kitarassa oleva vipu, jolla säädetään nuottien korkeutta

6

1 JOHDANTO

Tässä työssä tutkin omatekoisen langattoman Guitar Hero -tyylisen pelikitaran valmistusta, siihen liittyvien valintojen puolia ja analysoin niiden pohjalta tehtyjä kompromisseja. Työn lopputulos tulee omaan käyttööni, joten harkitsen laitteen ominaisuuksia toteutuksen helppouden, toimintavarmuuden, huollettavuuden ja käyttömukavuuden kannalta. Valmiin kitaran on tarkoitus olla parempi kuin alku- peräiset Guitar Hero -kitarat. Tämän työn käsitteet soveltuvat kaikenlaisiin pelioh- jaimiin, eivät vain kitaroihin.

Guitar Hero on Activisionin omistama kitarapohjainen rytmipelisarja, jonka viimei- sin ”vanhantyylisellä” kitaralla pelattava peli nimeltä Guitar Hero: Warriors of Rock on julkaistu vuonna 2010 (Destructoid 2010). Vuonna 2015 yritti tuoda pelisarjan takaisin pop-kulttuuriin julkaisemalla -pelin, mutta se päätti muuttaa kitaran näppäinjärjestelyn, joten se ei sovellu vanhantyylisiin pe- leihin (Polygon 2015).

Guitar Heron ja vastaavien kitarapelien fanit ovat uusien pelien puutteen vuoksi siirtyneet ilmaiseen Clone Hero -nimiseen peliin. Clone Hero on saatavilla vain PC:lle, ja sen kanssa toimivat kaikki ohjaimet, jotka toimivat PC:llä oikein.

Luomani kitaran kohdealusta on PC ja peli on Clone Hero. Kitara ei siis välttä- mättä ole alkuperäisten pelien kanssa yhteensopiva. Guitar Hero -pelejä on to- della vaikea löytää PC:lle, enkä omista konsoleja, joten en pysty testaamaan yh- teensopivuutta.

Kitaran pohjana on alkuperäinen Playstation 3:lle tehdyn Guitar Hero 3:n mukana tullut Les Paul. Alkuperäisissä Guitar Hero -kitaroissa on käytetty halpoja kumi- hattunäppäimiä. Lisäksi tässä GH3-kitarassa on käytetty langatonta tiedonsiirtoa, joka vaatii USB-vastaanottimen. Nämä ovat mielestäni ongelmia, joten vaihdan vanhat kumikupolinäppäimet uusiin mekaanisiin näppäimiin ja vaihdan ohjauspii- rin ESP32 -nimiseen Arduinon kaltaiseen mikro-ohjaimeen. Korvaan kitarasta siis lähes kaiken elektroniikan.

Tämän työn luvussa 2 esittelen alkuperäisen Guitar Hero -kitaran ominaisuudet. Luvussa 3 esittelen yleisiä peliohjaimien näppäimien kytkintyyppejä. Luvussa 4 7 kerron kehitysalustoista ja virtalähteistä. Luvussa 5 käyn läpi kirjoittamani ohjel- man ja selostan sen kulkua.

8

2 GUITAR HERO -KITARAN OMINAISUUDET

Alkuperäisessä Guitar Hero -kitarassa (Kuvio 1) on kahdeksan näppäintä, yksi dpad ja yksi strummauspalikka. Siinä on myös whammy-palkki sekä kallistuksen tunnistus. Kitara on langaton, ja sille on myös langaton vastaanotin. Kitara saa virran kahdesta AA-paristosta. Kitara toimii PC:llä melkein täysin, vain kallistuk- sen tunnistus ei toimi.

Kuvio 1. Kitaran näppäimet 9

Windowsin ohjainominaisuusikkunassa (Kuvio 2) näkyy, että laitteessa on 13 nappia, 1 dpad, X/Y/Z-akselit ja Z-pyöritysakseli. Vain napit 1, 2, 3, 4, 5, 9, 10, 13 ja dpad löytyvät kitarasta. Muut napit eivät siis tee mitään ja ovat vain esillä ikku- nassa. Whammy käyttää Z-akselia, ja kitaran kallistus luultavasti käyttäisi Z-pyö- ritysakselia, jos se toimisi PC:llä.

Kuvio 2. Ohjaimen ominaisuusikkuna

10

3 OHJAIMEN NÄPPÄIMET

3.1 Kytkinvärähtely

Lähes jokainen kytkin värähtelee, eli kytkimen kontaktit pomppivat muutaman millisekunnin ajan, kun kytkin painetaan pohjaan tai vapautetaan. Tämä ei hait- taa, jos kytkintä käytetään esimerkiksi lampun kytkemiseen, mutta jos kytkimen paino pitää tunnistaa vain kerran painallusta kohden, kuten esimerkiksi näp- päimistössä, pitää kytkinvärähtelyt poistaa jotenkin. (Forum Automation 2019.)

Kytkinvärähtelyt voidaan poistaa ohjelmassa tai laitteistossa. Ohjelmassa se voi- daan poistaa siten, että kun kytkimen tila muuttuu, keskeytetään kytkimen tilan kuuntelu, odotetaan muutama millisekunti ja vasta sitten rekisteröidään kytkimen painallus ja aletaan taas kuuntelemaan kytkimen tilaa. Laitteistossa se voidaan poistaa siten, että kytketään kytkimen rinnalle kondensaattori, joka hidastaa jän- nitteen vaihtumista sen koosta riippuen. Värähtelyt ovat jo ohi, ennen kuin mikro- piiri tunnistaa kytkimen tilan muutoksen, jos kondensaattorin jännitetason nousu tai lasku kestää kauemmin kuin värähtelyt. (Forum Automation 2019.)

3.2 Ohjaimissa yleisesti käytetyt kytkintyypit

3.2.1 Kumikupoli

Kumikupolinäppäimet (Kuvio 3) ovat eräs kalvonäppäintyyppi (Gear Gaming Hub 2021), joka on yleisin näppäintyyppi halvoissa moderneissa näppäimistöissä (PC Gamer 2019a; Telcontar 2021), joten nämä näppäimet ovat kaikille tuttuja. Kumi- kupolinäppäin koostuu nimensä mukaisesti kumikupolista, jonka pohjalla on säh- köä johtavaa materiaalia, joka yhdistää kaksi johdinta yhteen, kun näppäin pai- netaan pohjaan. Joidenkin kumikupolien pohjassa ei ole johtavaa materiaalia, vaan kumihattu painaa yhteen kaksi kalvoa, joiden välillä sulkeutuu virtapiiri. 11

Kuvio 3. Kitaran kaulassa vakiona olevat kumihattunäppäimet

Kumikupolinäppäimet ovat halpoja valmistaa, ja ne ovat hiljaisia, mutta niiden huono puoli on, että ne kuluvat käytössä nopeammin kuin mekaaniset kytkimet (Telcontar 2021). Nämä eivät myöskään tunnu yhtä mukavilta kuin mekaaniset kytkimet (PC Gamer 2019a).

Kumikupolinäppäimet ovat yleisiä näppäimiä peliohjaimissa. Esimerkiksi PS4-oh- jaimen x, o, kolmio, neliö sekä nuolinäppäimet ovat kumikupoleja.

3.2.2 Mekaaniset näppäimistökytkimet

Mekaaniset kytkimet (Kuvio 4) ovat näppäimiä, jotka sisältävät jonkinlaisen me- kanismin, joka aktivoi näppäimen. Toisin kuin kumikupoleissa, näissä on liukuvia osia ja jousi, joka vastustaa näppäimen painallusta. Joissain kytkimissä on lisä- mekanismi, joka tuottaa tunnon tai naksahduksen. Lähes kaikki mekaaniset näp- päimet ovat digitaalisia, eli ne ovat joko painettuna tai vapautettuna. (Business Insider 2020.) Analogisia näppäimiä ja näppäimistöjä kuitenkin on olemassa (PC Gamer 2019b).

Mekaaniset kytkimet jaetaan yleisesti kolmeen eri ryhmään niiden tuntomekanis- mien perusteella: lineaarisiin, jossa ei ole tuntoa eikä naksahdusta, tuntuviin, joissa on tunto ja naksuviin, joissa on tunto ja naksahdus (PC Gamer 2019a). Tunnolla tarkoitetaan sitä, että näppäimessä on joku kohta, jossa tuntee sen, että 12 näppäin on aktivoitunut. Naksahdus taas on ääni, jonka näppäin tuottaa, kun se on aktivoitunut.

Kuviossa 4 ylimmät kytkimet ovat Kailhin matalan profiilin kytkimiä. Keskimmäiset ovat Matias-yrityksen valmistamia klooneja Alps -kytkimistä. Alimmaiset ovat Cherry MX -sarjan kytkimiä.

Kuvio 4. Mekaanisia kytkimiä

Mekaaniset kytkimet monesti värikoodataan niiden ominaisuuksien mukaan. Esi- merkiksi Cherryn punainen kytkin on lineaarinen kytkin, kun taas sininen on tun- tuva ja naksahtava. Näppäimillä on muitakin ominaisuuksia kuin tunto ja naksah- dus: painamiseen tarvittava voima, näppäimen aktivointipiste, näppäimen liike- matka ja äänekkyys. Esimerkiksi Cherryn musta kytkin on lineaarinen kuten pu- nainen, mutta sen painamiseen tarvittava voima on korkeampi. (PC Gamer 2019a.) 13

3.2.3 Matalan profiilin kytkimet

Matalan profiilin kytkimet ovat kytkimiä, jotka ovat normaaleja matalampia. Näitä käytetään silloin, kun tila ei riitä isommalle kytkimelle: esimerkiksi silloin, kun ha- lutaan tehdä todella matala näppäimistö. Matalan profiilin kytkimet voivat olla ku- mihattuja tai mekaanisia. Matalan profiilin kytkimissä on lyhyempi liikematka kuin täysikokoisissa kytkimissä. (Switch and Click 2021b.)

Mekaanisia matalan profiilin kytkimiä valmistavat Kailh, Cherry ja Logitech (Switch and Click 2021b). Cherry kutsuu matalan profiilin kytkimiään nimellä MX Low Profile ja Kailh kutsuu kytkimiään nimellä Choc (Switch and Click 2021a). Logitech kutsuu sen kytkimiä nimellä GL (Logitech 2021), ja ne ovat ovat teke- mäni vertailun mukaan muuten samoja kuin Kailhin Choc-kytkimet, mutta niihin ei käy samat näppäinhatut ja kytkimen liikematka on hieman lyhyempi. Niissä myös lukee Kailh, joten luulisin niiden olevan ainakin osalta Kailhin valmistamia. On myös olemassa Gateronin valmistamia Low-Profile KS-21 -kytkimiä, mutta ne ovat lähes identtisiä Kaihin Choc-kytkimien kanssa (MakeUseOf 2020).

3.2.4 Elektroniikkakytkimet

Peliohjaimissa myös käytetään usein myös elektroniikkakytkimiä, joita on kaiken- laisia. Käsittelen tässä osiossa kahta eri tyyppiä: niin sanottuja Snap Action Switch ja Tactile Switch kytkimiä. Niitä kutsutaan useilla nimillä. Omron kutsuu näitä nimillä basic switch ja tact switch (Omron 2021a; Omron 2021b). Digi-Key taas kutsuu näitä nimillä snap action switch ja tactile switch (Digi-Key 2021).

Näiden kytkimien koko on yleensä todella pieni ja liikematka on yleensä todella lyhyt. Snap Action -kytkimiä käytetään esimerkiksi hiirissä. Tactile-kytkimiä taas käytetään esimerksiksi Xbox One -ohjaimen RB- ja LB-näppäimissä.

3.3 Kytkimien asennus kitaraan

Alkuperäisissä GH-kitaroissa lähes kaikki näppäimet ovat kumikupoleja. Strum- mauspalikassa ei ole kumikupoleja, vaan siinä on naksuvat Alps-kloonit (Kuvio 5), joissa on todella raskas palautusjousi ja klikkijousi. 14

Kuvio 5. Strummauspalikan piirilevy, jossa on kloonit Alps-kytkimistä

Harkitsin strummauspalikan kytkimien vaihtoa muunlaisiin kytkimiin, mutta silloin olisi pitänyt luoda uusi piirilevy. En myöskään ollut varma, olisiko strummauspa- likan mekanismi osunut kunnolla muunlaisiin kytkimiin. Päätin vaihtaa strum- mauspalikkaan Matias-yrityksen valmistamat naksuvat Alps-kloonit. Nämä eivät vastaa alkuperäisiä aivan täysin, sillä Matias-yrityksen valmistamissa kytkimissä on heikommat jouset ja kytkimen kotelon reunoissa on ulokkeet, joiden takia piti kytkinpidikkeen reunoja hioa hieman.

Kaulassa on vakiona kumihattunapit (Kuvio 3). Nämä ovat kuluneet jo melko pal- jon, eivätkä tunnu kovin hyvältä edes uutena, joten päätin vaihtaa nämä mekaa- nisiin. Aluksi ajattelin laittaa kaulaan Cherry MX -sarjan kytkimet, mutta ne eivät mahtuneet kaulaan. Muovikoteloa leikkaamalla ne olisivat saattaneet sopia sinne, mutta minulla oli Kailhin matalan profiilin kytkimiä, joten kokeilin niitä. Ne sopivat kaulaan täydellisesti, ja kaulan takaosassa olevat tukitangot pitävät ne paikoillaan. 15

Päätin laittaa kaulaan Kailhin valkoiset Choc-kytkimet (Kuvio 6). Kailhin valkoiset Choc-kytkimet ovat naksuvia; valitsin ne koska kaulan nappeja painellaan pela- tessa nopeasti, joten on pakko tietää, milloin ne aktivoituvat. Näissä on miellyttä- vin tunto ja naksuvuuskin auttaa asiaa.

Kuvio 6. Kitaran kaulaan asetetut Kailh-kytkimet

Start- ja Select-napit ovat myös kumihattuja. Korvasin nämäkin Kailhin valkoisilla Choc-kytkimillä. Näitä varten piti tehdä piirilevy, koska kotelon takaosassa ei ollut sopivaa ”pidikettä”, kuten kaulassa (Kuvio 7). Kotelon takaosassa olevaa piirile- vytukipalkkia piti lyhentää, koska nämä kytkimet ovat paksumpia kuin kumihatut. 16

Kuvio 7. Luotu Start- ja Select-näppäimien piirilevy

PS-nappi ja dpad ovat myös kumihattuja. Näihin en saanut vaihdettua mekaani- sia kytkimiä tilan puutteen vuoksi. Päätin jättää tähän kumihatut, mutta kumihatut ovat samassa piirilevyssä kuin kitaran alkuperäinen mikro-ohjain. Jouduin tähän- kin tekemään uuden piirilevyn (Kuvio 8).

Kuvio 8. Asennettu dpadin ja PS-napin piirilevy

Piirilevy on kaksipuolinen, eli siinä on myös toisella puolella kontaktit, jotka kumi- hattujen johtava materiaali yhdistää. Etsin yleismittarilla kontaktit, jotka kumihatut yhdistävät ja juotin niihin johtimet. Piirilevyn kääntöpuolen kontakteihin piti juottaa hieman tinaa, jotta yhteys parantui. 17

4 ESP32-KEHITYSALUSTA

4.1 Pohjatietoa kehitysalustoista

Kehitysalustat ovat laitteita, jotka sisältävät jonkun mikro-ohjaimen, joka pystyy suorittamaan koodia, joka ”flashataan” laitteelle tietokoneen avulla. Kehitysalus- tat myös sisältävät mikro-ohjaimen käyttöä varten tarvittavia asioita, kuten virta- lähdepiirin, ohjelmointiportin, nappeja ja ledejä. Mikro-ohjaimen GPIO-pinnien avulla voidaan tuoda tai lähettää signaali. (Kolban 2018, 59.)

Arduino on sarja kehitysalustoja, joissa monesti käytetään ATmega328 mikro- ohjainta. Nämä ovat pienitehoisia ja halpoja laitteita. Jos taas halutaan enemmän tehoa, voidaan harkita RaspberryPi-alustoja. Nämä alustat perustuvat ARM-pro- sessoreihin ja sisältävät enemmän tehoa, enemmän muistia, USB host -portteja ja käyttävät MicroSD-korttia tallennukseen. Niitä ei ohjelmoida toisen tietokoneen avulla kuten muita kehitysalustoja, vaan ne toimivat itse tietokoneena. Raspber- ryPi pystyy tehonsa ansiosta pyörittämään -pohjaista RaspiOS-käyttöjärjes- telmää. (Kolban 2018, 59.)

RaspberryPi on liian tehokas, vie liikaa virtaa ja on kooltaan liian suuri tähän pro- jektiin, joten jouduin katsomaan muualle. Arduinossa ei puolestaan ole langa- tonta tiedonsiirtoa, joten se ei toimi langattomana peliohjaimena. Arduinoihin on saatavilla Bluetooth-moduuleja, mutta kaikki näistä eivät tue Bluetooth-sarjapro- fiilia, jota HID-laitteet eli kaikenlaiset ohjaimet käyttävät. Bluetooth moduuliin myös menisi GPIO-portteja. Päädyin lopulta ESP32-kehitysalustaan, jossa on kaikki tarvittavat ominaisuudet paitsi gyroskooppi kallistusta varten. En kuiten- kaan implementoi kallistuksen tunnistusta, sillä se ei toimi alkuperäisessä kita- rassa PC:llä, enkä sitä käytä.

4.2 Tietoa ESP32-alustoista

ESP32 on sarja Espressifin valmistamia vähävirtaisia mikro-ohjaimia, joissa on sisäänrakennettu Bluetooth ja WiFi. Näissä on myös digitaalisia ja analogisia GPIO-pinnejä. Espressif myös valmistaa ESP32-kehitysalustoja, joissa on ESP32-piirin lisäksi muita käyttöä varten tarvittavia osia, kuten jänniteregulaattori 18 ja USB-ohjelmointipiiri. ESP32-alustoja ohjelmoidaan C-kielellä ja Espressifin ESP-IDF-työkalujen avulla. ESP-IDF sisältää kompilointi-, flashaus- ja monito- rointityökalut. Nämä työkalut saa toimimaan Arduino IDE:n ja Visual Studio Co- den kanssa. (Espressif 2021.)

Valitsin AZ-Deliveryn ESP32 NodeMCU Module -alustan, jossa on klooni ESP32- WROOM-mikro-ohjaimesta. Alusta perustuu NodeMCU:n kehitysalustaan. Alus- tassa on CP2102 USB-to-UART -muunnin, jonka avulla ESP32-piirin voi ohjel- moida kytkemällä sen tietokoneen USB-porttiin (Kolban 2018, 74). Siinä on myös 3,3 voltin jänniteregulaattori, pari lediä, pari nappia sekä 32 GPIO-pinniä, joista 18 tukee 12-bittistä analogista sisääntuloa (AZ-Delivery 2021a, 4; AZ-Delivery 2021b, 1).

4.3 Energiansyöttö ja virrankulutus

Jotta ESP32 voi toimia langattomasti, se tarvitsee sähköenergiaa ja -virtaa. AZ- Deliveryn ESP32-alusta voi saada virran USB-liittimen kautta, V5-pinnin kautta tai 3V3-pinnin kautta (Tech Explorations 2021). USB-liittimen ja V5-pinnin kautta syötetty virta menee USB-to-UART-piirille ja 3,3 voltin jänniteregulaattorille, jonka kautta se menee ESP32-mikro-ohjaimelle. Alustan 3V3-pinnin kautta syötetty virta menee suoraan mikro-ohjaimelle (Kuvio 9). (AZ-Delivery 2021b, 1.)

Kuvio 9. Käytetyn ESP32-alustan yksinkertaistettu virransyöttöpiirikaavio

Voin hyödyntää USB-virransyöttötapaa USB-varavirtalähteen avulla. Tässä syn- tisi virtahäviötä, sillä varavirtalähde ensin muuntaisi lithium-ion-akun 3,7 voltin 19 jännitteen viiteen volttiin, jonka jälkeen kehitysalustan 3,3 voltin jänniteregulaat- tori muuntaisi sen takaisin alas. Joissain varavirtalähteissä on ominaisuus, joka katkaisee sähkövirransyötön, jos virrankulutus on liian matala. AZ-Deliveryn mu- kaan sen ESP32-alusta vie keskimäärin 80 milliampeeria virtaa, joten tämä omi- naisuus voi estää varavirtalähteen käytön (AZ-Delivery 2021a, 5). Valmis kitara kuitenkin vie 150 milliampeeria virtaa, joten ei pitäisi tulla ongelmia. Minimivirta- katkaisuominaisuuden voi ohittaa lisäämällä virrankulutusta vastuksen avulla, joka kuluttaa sopivasti virtaa. Tämä keino kuluttaa enemmän virtaa verrattuna seuraavaan tapaan tai järjestelmään, jossa tätä ominaisuutta ei tarvitse ohittaa. Virrankatkaisun voi myös estää käyttämällä hetkellisesti enemmän virtaa tietyin väliajoin. (Kemble 2020.)

Kehitysalustan V5-pinni voi myös toimia virransyöttötapana. V5-pinni on yhtey- dessä USB-portin viiden voltin pinniin, USB-to-UART muuntimen VBUS-pinniin sekä 3,3 voltin jänniteregulaattoriin. Jos USB-johto on irrotettu, kehitysalustan V5-pinniin syötetyn jännitteen ei ole pakko olla viisi volttia. Kehitysalustan jänni- teregulaattori on ams1117-3.3, jonka maksimi sisääntulojännite on 15 volttia (Ad- vanced Monolithic Systems 2021, 2), jonka ansiosta laite voisi saada virran yh- deksän voltin paristosta, jos muut piirit ovat sopivat. Valitettavasti ei voi sitä tehdä, koska USB-to-UART-munninpiiri on yhteydessä suoraan V5-pinniin ja USB-to- UART-muunninpiirin VBUS-pinnin maksimi sisääntulojännite on 5,8 volttia (Sili- con Labs 2017, 6). V5-pinnin maksimijännite on siis 5,8 volttia.

Voisin rakentaa piirin, joka muuntaa esimerkiksi lithium-ion-akun tai yhdeksän voltin pariston jännitteen viiteen volttiin. Tämän viiden voltin jännitteen voi kytkeä kehitysalustan V5-pinniin. Virta sitten menisi 3,3 voltin jänniteregulaattorin kautta ESP32-mikro-ohjaimelle. Tässä myös menisi virta kahden jänniteregulaattorin läpi, joka hukkaisi virtaa.

Voin myös käyttää virransyöttöön 3V3-pinniä, johon kytkisin ostamani virtalähde- piirin. Tässä piirissä on sama AMS1117-3.3 jänniteregulaattori kuin kehitysalus- tassa, jonka maksimijännite on 15 volttia, joten voin käyttää yhdeksän voltin pa- ristoa. 20

4.4 ESP32:n kytkeminen

Käytin näppäimien ja whammyn kytkentään 15 GPIO-pinniä taulukon 1 mukai- sesti. Asetin näppäimien GPIO-pinnit INPUT_PULLUP-tilaan, jolloin niiden sisäi- nen ylösvetovastus on käytössä eli pinnin jännite on oletuksena 3,3 volttia. Jotta pinni tunnistaa näppäimen painalluksen, pitää pinnin jännitteen tippua maan ta- solle. Tein tämän asentamalla kytkimen siten, että kytkimen toinen jalka on kiinni GPIO-pinnissä ja toinen on kiinni maassa (Kuvio 10).

Taulukko 1. Käytetyt GPIO-pinnit ja niiden toiminnot

Whammyn asennon tunnistin potentiometrillä, joten se vaatii analogisen sisään- tulon. Potentiometrin vasen jalka on kiinni maassa ja oikea jalka on kiinni 3V3- pinnissä (Kuvio 10). Keskimmäisen jalan jännite liikkuu 0–3,3 voltin tasolla riip- puen potentiometrin asennosta. Tämä jalka on kiinni GPIO-pinnissä 34. Kuvion 10 ESP32-alustan pinnien välissä olevat tyhjät välit osoittavat, että pinnien vä- lissä on käyttämättömiä pinnejä. 21

Kuvio 10. Kitaran piirikaavio

Valitsin lopulta kitaran virtalähteeksi USB-varavirtalähteen, koska yhdeksän vol- tin paristoissa ei ole tarpeeksi kapasiteettia, eikä paristokoteloon mahdu useam- paa. Harkitsin kahta AA-paristoa, mutta tarvitsisin myös 3,3 voltin virtapumpun, joka nostaa jännitteen 3,3 volttiin, kun sarjassa olevien paristojen jännite tippuu sen alapuolelle. USB-varavirtalähde on myös helppo vaihtaa, jos siinä ilmenee vikoja. Kitaran virrankulutus on 120 milliampeeria viiden voltin virtalähteestä, jo- ten valitsemastani 2500mAh varavirtalähteestä pitäisi riittää virtaa noin 20 tun- niksi.

Loin latausta varten piirilevyn (Kuvio 11), jossa on USB-C-portti, virtakytkin sekä latausledi. Kuten kuviossa 10 näkyy, USB-C-portista lähtevät viiden voltin ja maan johtimet menevät suoraan varavirtalähteen latausporttiin. Punainen ledi on latausportin ja maan välissä, joten se on aina päällä, kunhan USB-johto on kiin- nitetty. Se ei sammu, kun laitteen akku on täynnä. 22

Kuvio 11. Kitaran latauspiiri

Piirilevyssä on myös virtakytkin, joka kytkee kuvion 10 (s. 21) mukaisesti varavir- talähteen ulostuloportin ja ESP32-alustan välissä olevaa USB-johdon viiden vol- tin johdinta. Kytkin kitaran strummauspalkin piirilevyssä (Kuvio 11) olevan ledin ESP32-alustan 3V3-pinnin ja maan väliin. Tämä ledi on aina päällä, kun ESP32- alusta saa virtaa, joten se toimii virtaledinä. 23

5 ESP32-OHJELMA

ESP32 ohjelmoidaan C-kielellä. Käytin ohjelmointiin Arduino IDE:tä sekä ESP- IDF:n sisältämiä työkaluja. Käytin myös Arduino IDE:n Library Managerissa ja GitHubissa olevia MIT-lisenssillä julkaistuja Bounce2 ja ESP32 BLE Gamepad - kirjastoja. Kirjastot ovat uudelleenkäytettäviä koodinpätkiä, jotka hoitavat jonkun tietyn asian. Niiden avulla voidaan toteuttaa monimutkaista toiminnallisuutta suh- teellisen pienellä työllä.

Bounce 2 on Thomas Fredericsin ylläpitämä kytkinvärähtelynpoisto-kirjasto. Käy- tän tätä kirjastoa kytkinvärähtelyjen poistoon. Kirjastossa on kolme eri tilaa. Stable Interval on tila, jossa ohjelma odottaa määritetyn ajan verran, ennen kuin tilan muutos rekisteröidään, ja ajan lasku aloitetaan alusta, jos kytkin värähtelee. Bounce With Prompt Detection on tila, joka on kuin Stable Interval, mutta kytki- men muutos rekisteröidään, ennen kuin ajan lasku aloitetaan. Lock-Out Interval on tila, jossa kytkimen tilan muutos rekisteröidään heti ja ohjelma odottaa aina tietyn ajan verran, ennen kuin seuraava muutos sallitaan. (GitHub 2021.)

ESP32 BLE Gamepad on lemmingDevin ylläpitämä Bluetooth-peliohjainkirjasto. Siinä on tuki 128 napille, kuudelle 16 bitin akselille, kahdelle sliderille ja neljälle POV-hatulle eli dpadille.

5.1 Määritykset ja muuttujat

Kuviossa 12 näkyy ohjelman alussa define- ja include-komennot. Aluksi määritin Bounce2-kirjaston toimintatilan Bounce With Prompt Detection -tilaksi ja otin Bounce-kirjaston ja BleGamepad-kirjaston käyttöön. Sitten määritin kytkinvä- rinänpoiston odotusajan sekä käytettyjen nappien määrän ja ohjaimen ominai- suusikkunassa näkyvän määrän. Lopuksi määritin dpadia ohjaavien nappien pin- nit sekä whammy-pinnin ja sen minimiarvon. 24

Kuvio 12. Ohjelman define- ja include-komennot

Seuraavaksi määritin muuttujat (Kuvio 13). BleGamepad on peliohjainkirjaston instanssi. Määritin tässä ohjaimen nimeksi Custom GH Guitar, valmistajaksi Mar- kus ja lopuksi akun 100 prosenttiin. Seuraavaksi varasin jokaiselle napille Bounce-muuttujan. ButtonPins-taulukko sisältää nappien GPIO-pinnit ja butto- nIDs sisältää nappien ominaisuusikkunassa olevat id:t. WhammyReadiin tallen- netaan whammysta luettu raaka arvo. Lopuksi state-booleanit sisältävät luetut dpadin kytkimien arvot.

25

Kuvio 13. Ohjelman muuttujat

5.2 setup()- ja loop()-funktiot

Kun määritykset ja muuttujat oli luotu, pääsin ajamaan setup()-funktion (Kuvio 14). Setup-funktio ajetaan kerran ohjelman alussa. Ohjelma käy ensimmäiseksi buttonPins-taulukon läpi ja asettaa jokaiselle pinnille Bounce-instanssin se- tupBouncer()-funktiolla. Seuraavaksi ohjelma tekee saman strum-napeille ja dpad-napeille. Dpadia ohjaavat napit käsitellään erillä tavalla kuin muut napit, jo- ten nämä eivät voi olla samassa taulukossa kuin muut. Lopuksi ohjelma aloittaa BleGamepad-instanssin, asettaa sen manuaaliseen reportointitilaan ja aloittaa sarjamonitoroinnin. 26

Kuvio 14. Ohjelman setup()-funktio

Loop()-funktion ajo aloitetaan setup()-funktion jälkeen ja sitä ajetaan jatkuvasti. Kuviossa 15 näkyy ohjelman loop()-funktio, jossa aluksi testataan, onko Bluetooth-yhteys olemassa. Jos yhteys on olemassa, ohjelma käy läpi deboun- cers-taulukossa olevat kytkimet, päivittää niiden tilat ja vie tilat bleGamepadiin. Ohjelma tulostaa myös näppäinpainallukset sarjamonitoriin. Tämän jälkeen oh- jelma hakee dpadin tilan getHatState()-funktiolla ja vie sen bleGamepadiin. Seu- raavaksi ohjelma lukee whammyn arvon ja varmistaa, että arvo on vähintään whammyMinssä määritetty arvo, jonka jälkeen ohjelma muuntaa ADC:ltä saadun 12-bittisen arvon bleGamepadin käyttämäksi 16-bittiseksi arvoksi map()-funkti- olla ja vien arvon bleGamepadiin. Lopuksi ohjelma ajaa bleGamepad.sendRe- port()-funktion, joka vie asetetut arvot Bluetoothin avulla tietokoneelle. 27

Kuvio 15. Ohjelman loop()-funktio

5.3 setupBouncer()- ja getHatState()-funktiot

SetupBouncer() on funktio, joka luo Bounce-instanssin annetuilla arvoilla ja pa- lauttaa sen (Kuvio 16). Funktiolla on kolme parametriä: 8-bittinen integer pin, joka on näppäimen pinnin numero, 8-bittinen integer pinM, joka on pinnin toimintatila ja 16-bittinen integer intervalMS, joka on värinänpoistajan odotusaikaväli. Aluksi funktio asettaa pinnin tilan pinMode()-funktiolla. Tämän jälkeen se luo Bounce- instanssin, liittää siihen pinnin ja asettaa odotusaikavälin. Lopuksi funktio palaut- taa Bounce-instanssin. 28

Kuvio 16. Ohjelman setupBouncer()-funktio

GetHatState() on funktio, joka palauttaa dpadin tilan BleGamepad-kirjaston käyt- tämänä signed char -tyyppinä (Kuvio 17). Aluksi funktio päivittää dpadin kytki- mien Bounce-instanssit ja tallentaa tilat muuttujiin. Dpadin lisäksi myös strumbar voi ohjata dpadin tilaa, joten otan sen tässä vaiheessa huomioon OR-operaattorin avulla. Tämän jälkeen funktio tarkistaa onko ylös- ja alas-napit painettuna yhtä aikaa. Jos on, funktio palauttaa HAT_CENTERED-tilan. Tämä on alkuperäisessä GH-kitarassa oleva ominaisuus, joten toteutin sen tässäkin. Sitten funktio tarkis- taa if-else-lausekkeiden avulla jokaisen mahdollisen näppäintilan ja palauttaa sitä vastaavan tilan. Lopuksi funktio palauttaa HAT_CENTERED-tilan, jos mitään näppäintä ei ole painettu. 29

Kuvio 17. Ohjelman getHatState()-funktio 30

6 POHDINTA

Työn tarkoituksena oli suunnitella ja valmistaa langaton Guitar Hero -tyylinen ki- tarapeliohjain, jossa on alkuperäistä paremmat kytkimet ja joka toimii Bluetoot- hilla. Käytin työssä alkuperäistä GH-kitaraa, mekaanisia kytkimiä sekä AZ-Deli- veryn ESP32-alustaa. Kitara käyttää tiedonsiirtoon Bluetoothia. Työ onnistui hy- vin ja lopputuloksesta tuli miellyttävä.

Laitoin kaulaan Kailhin valkoiset Choc -kytkimet. Nämä kytkimet ovat paljon hel- pompia painaa, ja näppäimen aktivoituminen on selvempi sekä varmempi. Täten ne toimivat paljon paremmin kuin alkuperäiset kumihattunapit.

Strummauspalikan kytkimet vaihdoin Matias Clickyihin. Nämä ovat melko paljon kevyemmät painaa, ja painokohdan tunto on heikompi. On vaikea näin aikaisin sanoa, ovatko Matias-yrityksen kytkimet paremmat vai huonommat kuin alkupe- räiset nimettömät Alps-kloonit. Uudet kytkimet kuitenkin toimivat moitteettomasti.

Start- ja Select-nappeihin vaihdoin myös Kailhin valkoiset Choc-kytkimet. Näistä- kin tuli miellyttävämmät. Näitä kytkimiä varten piti tehdä piirilevy ja piti hioa kitaran rungossa olevia tukipalkkeja, koska uudet kytkimet olivat paksummat kuin kumi- hatut.

Dpadiin ja PS-nappiin piti jättää kumihatut, sillä mekaaniset kytkimet eivät mahdu dpadiin. Näitä ei juurikaan käytetä Guitar Heroa pelattaessa, joten tämä ei hait- taa. Voi olla myös mahdollista, etteivät mekaaniset kytkimet tunnu yhtä hyvältä dpadissa kuin kumihatut. Jouduin tekemään uuden piirilevyn näitä näppäimiä var- ten, koska kitaran alkuperäinen mikro-ohjain oli samassa piirilevyssä kuin dpad ja PS-nappi.

Valmistamani kitara käyttää Bluetoothia, toisin kuin alkuperäinen kitara, joka käytti USB-vastaanotinta. Tämä tekee uudesta kitarasta paljon kätevämmän käyttää. Valitettavasti en ehtinyt tehdä kunnon latenssianalyysiä, mutta en tunte- nut kitarassa ollenkaan viivettä testin aikana. Ihmisaivot eivät kuitenkaan ole täy- delliset, joten viivettä pitäisi oikeasti tutkia, ennen kuin todellisia johtopäätöksiä voi tehdä. 31

Kitarassa on vielä mahdollisia jatkokehityksen kohteita. Strummauspalikassa voisi kokeilla Kailh Navy -kytkimiä, mutta tämä olisi vaatinut uuden piirilevyn ja mahdollisesti jonkinlaisen tukipalan. Dpadille voisi myös voinut suunnitella oikean piirilevyn, jossa kumihattujen kontaktit ovat juuri kumihattuja varten suunniteltu (ks. kuvio 3). Olisi myös ollut hyvä, jos olisin ehtinyt tekemään latenssianalyysin, jossa vertailen langallista yhteyttä, langatonta yhteyttä sekä alkuperäistä kitaraa. 32

LÄHTEET

Advanced Monolithic Systems 2021. AMS1117 1A Low Dropout Voltage Regu- lator. Viitattu 2021 http://www.advanced-monolithic.com/pdf/ds1117.pdf.

AZ-Delivery 2021a. ESP32 NodeMCU Module WLANWiFi Development Board mit CP2102 Datenblatt. Viitattu 4.5.2021 https://cdn.shopify.com/s/fi- les/1/1509/1638/files/ESP_-_32_NodeMCU_Developmentboard_Daten- blatt_AZ-Delivery_Vertriebs_GmbH_10f68f6c-a9bb-49c6-a825- 07979441739f.pdf.

AZ-Delivery 2021b. ESP-32 NodeMCU Developmentboard Schematic. Viitattu 4.5.2021 https://cdn.shopify.com/s/files/1/1509/1638/files/ESP- 32_NodeMCU_Developmentboard_Schematic.pdf.

Business Insider 2020. Mechanical keyboard switches: A guide to the different switch options for mechanical keyboards and their uses. Viitattu 19.4.2021 https://www.businessinsider.com/mechanical-keyboard-switches.

Destructoid 2010. Review: Guitar Hero: Warriors of Rock. Viitattu 2.6.2021 https://www.destructoid.com/reviews/review-guitar-hero-warriors-of-rock.

Digi-Key 2021. Switches. Viitattu 11.5.2021 https://www.digikey.com/en/prod- ucts/category/switches/15.

Espressif 2021. ESP32. Viitattu 4.5.2021 https://www.espressif.com/en/pro- ducts/socs/esp32.

Forum Automation 2019. What is contact Bouncing? Viitattu 4.5.2021 https://fo- rumautomation.com/t/what-is-contact-bouncing/5976.

Gear Gaming Hub 2021. Rubber Dome vs. Membrane Keyboards: Which are Better for Gaming? Viitattu 19.4.2021 https://geargaminghub.com/rubber-dome- vs-membrane-keyboards.

GitHub 2021. Bounce 2 readme.md. Viitattu 4.5.2021 https://github.com/thom- asfredericks/Bounce2.

Kemble, Z. 2020. Smart Power Bank Keep-Alive. Viitattu 23.4.2021 https://blog.zakkemble.net/smart-power-bank-keep-alive.

Kolban, N. 2018. Kolban’s Book on ESP32. Victoria: Leanpub.

Logitech 2021. Advanced Mechanical Gaming Switches. Viitattu 3.6.2021 https://www.logitechg.com/en-us/innovation/mechanical-switches.html.

MakeUseOf 2020. Gateron's Mechanical Switches for 2020: Waterproof, Mag- netic, and Low-Profile. Viitattu 4.5.2021 https://www.makeuseof.com/tag/gate- ron-mechanical-switches-ces-2020.

Omron 2021a. Basic Switches. Viitattu 11.5.2021 https://components.om- ron.com/special/switch/basic02-01. 33

Omron 2021b. Tactile Switches. Viitattu 11.5.2021 https://components.om- ron.com/web/en/special/switch/basic02-03.

PC Gamer 2019a. The complete guide to mechanical keyboard switches for gaming. Viitattu 19.4.2021 https://www.pcgamer.com/best-mechanical-swit- ches-for-gaming.

PC Gamer 2019b. More analog keyboards with pressure-sensitive keys could be on the horizon. Viitattu 4.5.2021 https://www.pcgamer.com/more-analog- keyboards-with-pressure-sensitive-keys-could-be-on-the-horizon.

Polygon 2015. Guitar Hero Live Review. Viitattu 2.6.2021 https://www.po- lygon.com/2015/10/20/9576527/guitar-hero-live-review-ps4-xbox-one-wii-u.

Silicon Labs 2017. CP2102/9 Single-Chip USB-to-UART-Bridge. Viitattu 4.5.2021 https://www.silabs.com/documents/public/data-sheets/CP2102-9.pdf.

Switch and Click 2021a. Low-Profile Switches: Explained. Viitattu 3.6.2021 https://switchandclick.com/low-profile-switches-explained.

Switch and Click 2021b. Low-Profile vs Normal Keyboards: What’s The Differ- ence? Viitattu 19.4.2021 https://switchandclick.com/low-profile-vs-normal-key- boards.

Tech Explorations 2021. ESP32 dev kit power options. Viitattu 6.5.2021 https://techexplorations.com/guides/esp32/begin/power.

Telcontar 2021. Rubber domes. Viitattu 19.4.2021 https://telcon- tar.net/KBK/tech/rubber_domes.