• Ei tuloksia

Auton mittaristosovellus Androidille

N/A
N/A
Info
Lataa
Protected

Academic year: 2022

Jaa "Auton mittaristosovellus Androidille"

Copied!
50
0
0

Kokoteksti

(1)

Auton mittaristosovellus Androidille

Jani Laatikainen

Opinnäytetyö

Tietojenkäsittelyn koulutusohjelma 2013

(2)

Tiivistelmä

21.5.2013 Tietojenkäsittelyn koulutusohjelma

Tekijä tai tekijät

Jani Laatikainen Ryhmätunnus

tai aloitusvuosi 2011

Raportin nimi

Auton mittaristosovellus Androidille Sivu- ja lii-

tesivumäärä 38 + 8 Opettajat tai ohjaajat

Irene Vilpponen

Tämän opinnäytetyön tavoitteena on valmistaa auton OBD-järjestelmään kytkeytyvä mittaristosovellus. Sovelluksella tulee olla mahdollista lukea ajoneuvon järjestelmien mittaamia tietoja ja näyttää niitä mobiililaitteen näytöllä. Sovellus toteutetaan Android- alustalle ja julkaistaan Google Play -kaupassa.

Työssä keskitytään Android-ohjelmointiin ja arkkitehtuuriin niiltä osin, kuin sovelluk- sen valmistamiseksi on tarpeellista. Android-ohjelmoinnin lisäksi työssä käsitellään OBD-järjestelmän taustoja ja järjestelmään kytkeytymiseksi tarvittavia työkaluja ja tek- niikoita. Sovellus rakennetaan Bluetooth-tekniikkaa hyödyntäviä ELM327-pohjaisia OBD-sovittimia tukevaksi.

Työn lopuksi sovellus julkaistaan Google Play -kaupassa ilmaiseksi ladattavana ja poh- ditaan miten sovellusta olisi mahdollista jatkossa kehittää.

Asiasanat

Ohjelmointi, Android, autotekniikka

(3)

Abstract

21 May 2013 Degree programme in Information Technology

Authors

Jani Laatikainen Group or year of

entry 2011 The title of thesis

Car dashboard application for Android Number of pag-

es and appen- dices

38+8 Supervisor(s)

Irene Vilpponen

The purpose of this thesis was to develop a car dashboard application for Android mobile platform. The application developed during this project will be released at Google Play store.

The thesis focuses on Android application development and architecture, going to de- tails only when required for developing a car dashboard application. Facts behind the OBD standard and tools and techniques required for connecting to the OBD-system are covered briefly. Support for ELM327-based Bluetooth-OBD adapters will be built into the developed application.

Finally, the developed application will be released at Google Play store, to be down- loaded and installed freely without any fee. Also possibilities of future improvement on the application are discussed.

Keywords

Programming, Android, automotive

(4)

Sisällys

Sisällys ... 1

1 Johdanto ... 1

2 OBD (On-board diagnostics) ... 3

2.1 Järjestelmästä saatavat tiedot ... 4

2.2 Sovittimet ... 4

2.3 ELM327 ... 5

3 Android ... 8

3.1 Järjestelmäarkkitehtuuri ... 9

3.2 Sovellusarkkitehtuuri ... 11

3.3 Sovelluksen elinkaari ... 13

3.4 Sovelluskehitys ... 14

4 Mittaristosovelluksen kehittäminen ... 16

4.1 Kehitysympäristö ... 16

4.2 Pääohjelma ... 18

4.3 Mittaristo-komponentti ... 21

4.4 Bluetooth-liikennöinti ... 22

4.5 OBD-kommunikaatio ... 24

4.6 Sovelluksen käyttöliittymä ... 27

5 Mittaristosovelluksen testaus ja julkaisu ... 30

5.1 Sovelluksen testaus ... 30

5.2 Sovelluksen julkaiseminen ... 32

6 Yhteenveto ... 34

6.1 Jatkokehitys... 35

6.2 Projektin tulokset ... 35

Lähteet ... 36

Liitteet ... 39

Liite 1. Keskeiset käsitteet ... 39

Liite 2. ELM327 AT-komennot ... 41

Liite 3. ELM327 virheilmoitukset ... 45

(5)

1 Johdanto

Kilpa-auton moottorissa on lukuisia asioita, joita kuljettajan tulee pystyä ajon aikana seuraamaan. Kesken kilpailutilanteen ei usein kuitenkaan ehditä seuraamaan mittareita riittävän huolellisesti, jotta havaittaisiin ajoissa esimerkiksi moottorin ylikuumeneminen tai öljynpaineen lasku. Moottorin viat havaitaan usein vasta siinä vaiheessa kun on jo liian myöhäistä ja tuhansien, usein jopa kymmenien tuhansien eurojen tuhot ovat ta- pahtuneet.

Autojen parissa harrastaessani olen jo jonkin aikaa miettinyt ratkaisua yllä kuvattuun ongelmaan. Kaupallisia ratkaisuja on toki saatavilla, mutta ei juurikaan harrastajalle so- pivaan hintaan. Aluksi tarkoituksenani oli kehittää koko mittariston elektroniikka oh- jelmistoineen alusta lähtien itse, mutta ajatukseni muuttuivat tutustuttuani taulutietoko- neisiin ja niiden tarjoamiin mahdollisuuksiin. Taulutietokone olisi melko helppo saada fyysisesti sovitettua autoon, valmiita telineitäkin on saatavilla ja miksi oikeastaan ryhtyi- sin keksimään pyörää uudestaan toteuttamalla koko elektroniikan itse. Taulutietoko- neessa näyttö ja tarpeelliset yhteydet ulkomaailmaan ovat valmiina ja mallista riippuen usein bonuksena mielenkiintoisia ja automaailmassakin hyödyllisiä ominaisuuksia, kuten paikannus ja kiihtyvyysmittaus.

Olen harrastuspohjalta jo vuosia kartuttanut kokemusta ajoneuvojen tietojärjestelmistä, eikä ole ihme että aihe kiinnostaa IT-alan ihmistäkin, ovathan autot nykyisin täynnä tietokoneita ja elektroniikkaa. Ajoneuvojen tietokoneita on jo melko pitkään ollut mah- dollista ohjelmoida uudelleen, niihin on mahdollista kytkeytyä ja muuttaa ohjelmointeja, sekä lukea tietokoneiden havainnoimia asioita omiin tarkoituksiin. Koska nykyautoissa tällaiset järjestelmät ja standardit liityntätavat ovat olemassa ja koska viime vuosina lii- tynnän mahdollistavien laitteistojen hinnat ovat tulleet edullisemmiksi, päätin tehdä mittaristosovelluksen tässä vaiheessa nykyautojen järjestelmien kanssa yhteensopivaksi ja vasta myöhemmin keskittyä sovelluksen muuntamiseksi kilpa-autoihin sopivaksi.

Koska mittaristosovellus tulee olemaan yhteensopiva vähintäänkin kaikkien nykyisin Euroopassa ja Yhdysvalloissa myytävien autojen kanssa, on sovelluksen jatkokehityk- sen kannalta mielenkiintoista julkaista sovellus vapaasti ja ilmaisena ladattavaksi. Sovel-

(6)

luksen oletettu kohdeyleisö on henkilöt, jotka haluavat tarkemmin tietää mitä autossaan tapahtuu. Ohjelman lataajilta ja käyttäjiltä on mahdollista saada palautetta, jonka perus- teella sovellusta voidaan edelleen kehittää. Vastineeksi sille, että sovellus tarjotaan ladat- tavaksi ilmaisena, kehittäjä saa ilmaiseksi käyttöönsä vapaaehtoisia testaajia ja uusien ominaisuuksien innovoijia.

Opinnäytetyössä keskitytään Android-alustaan ja sen tarjoamiin sovelluskehitysmahdol- lisuuksiin, mutta käydään myös läpi hieman ajoneuvojen OBD-järjestelmän teoriaa ja taustaa, jotta lukija saa käsityksen minkälaiseen järjestelmään ja millä keinoin kehittä- mälläni sovelluksella ollaan yhteydessä. OBD-järjestelmää koskevat standardit ovat maksullisia, enkä hankkinut niitä tämän työn tekemiseksi, erityisesti koska Internetin muista lähteistä löytyy riittävän kattavat tiedot ja järjestelmän käyttöä ohjaavat EU- direktiivit ovat vapaasti saatavilla. Tärkeimpinä lähteinäni on ollut ELM Electronicsin ELM327-piirin datalehti, sekä Android-kehittäjien sivusto.

Tämän opinnäytetyön tavoitteena on valmistaa Android-mobiililaitteisiin sopiva ohjel- misto, jolla voidaan olla yhteydessä auton moottorinohjaukseen langattomasti ja saada reaaliaikaisesti mobiililaitteen näytölle näkymään moottorinohjaukselta luettavia mitta- ustietoja ja varoituksia raja-arvojen ylittämisestä. Sovellus on tarkoitus julkaista Google Play-kaupassa maksuttomana.

Tässä opinnäytetyössä keskitytään Android-alustalle ohjelmointiin niiltä osin kuin se mittaristosovelluksen kehittämiseksi on tarpeen. Sovelluksesta tehdään yhteensopiva tavallisten kuluttajille suunnattujen autojen kanssa ja lopullinen kilpa-autoihin sovitta- minen tehdään erillisenä projektina tämän opinnäytetyön ulkopuolella.

(7)

2 OBD (On-board diagnostics)

Nykyiset ajoneuvot ovat täynnä tietotekniikkaa ja tietokoneita. Ajoneuvon eri toiminto- ja varten on omat ohjainlaitteensa ja ohjainlaitteet yhdistyvät toisiinsa ajoneuvon sisäi- sen väylän kautta. Ajoneuvon väylän kautta on mahdollista sopivia ohjelmistoja käyttä- en muuttaa ajoneuvon ohjelmointeja ja parametreja, sekä lukea ulos ohjainyksiköiden tila- ja vikatietoja. Ajoneuvojen korjaus lähteekin nykyään yleensä käyntiin kytkemällä ajoneuvon väylään diagnostiikkatietokone ja lukemalla ajoneuvon ohjainten vikalokit.

OBD-järjestelmä on uudempiin ajoneuvoihin sisäänrakennettu valvontajärjestelmä, jonka tarkoituksena on tarkkailla muun muassa ajoneuvon moottorin kuntoa ja päästö- jä. Järjestelmä ilmoittaa ajoneuvon kuljettajalle havaitusta vikatilanteesta sytyttämällä ajoneuvon mittaristoon vikavalon. Tarkempien tietojen lukemiseen vaaditaan kytkey- tyminen ajoneuvon diagnostiikkaväylään. (Elekma Oy 2010.)

OBD-järjestelmän ensimmäinen sukupolvi otettiin käyttöön Yhdysvalloissa vuonna 1988 ja nykyisin käytössä oleva OBD2 vuonna 1996. Euroopassa vastaava järjestelmä, EOBD, otettiin käyttöön vasta vuonna 2001. OBD2 ja EOBD ovat käytännössä täysin yhdenmukaiset ja yhteensopivat standardit, erona ainoastaan se, että OBD2 on amerik- kalainen standardi ja EOBD eurooppalainen. Kaikkien Euroopassa vuoden 2001 jäl- keen myytyjen bensiiniautojen ja vuoden 2004 jälkeen myytyjen diesel-autojen täytyy sisältää EOBD-järjestelmä. (Elekma Oy 2010.)

Euroopan parlamentin ja neuvoston direktiivin 98/69/EY liite XI määrittelee että kaikkiin (Euroopassa myytäviin) ajoneuvoihin on asennettava sisäinen valvontajärjes- telmä, joka ilmoittaa vioista ja kulumisesta koko ajoneuvon eliniän. Direktiivissä määri- tellään myös, että järjestelmään pääsyä ei saa rajoittaa ja, että pääsyn tulee olla standar- dien mukaista. Järjestelmään kytkeytymisen täytyy olla mahdollista ajoneuvoteollisuu- den standardien mukaisilla laitteilla ja ilman mitään ajoneuvon valmistajan omia pääsy- koodeja tai vastaavia. Käytännössä kuluttajillakin on täysi oikeus käyttää järjestelmää rajoituksetta niin halutessaan. (Euroopan parlamentin ja neuvoston direktiivi

98/69/EY.)

(8)

2.1 Järjestelmästä saatavat tiedot

Euroopan parlamentin ja neuvoston direktiivin 98/69/EY liite XI luettelee tietoja, joi- den tulee olla luettavissa ajoneuvon sarjaportista standardoidun dataliittimen kautta:

valvontajärjestelmän ilmoittamat vikakoodit, moottorin jäähdytysnesteen lämpötila, onko polttoaineen lambda-säätö toiminnassa, polttoaineen syötön asetusarvo, syty- tysennakon arvo, imuilman lämpötila, imusarjan paine, imuilman virtaus, moottorin pyörimisnopeus, kaasuläpän asentoanturin lähtöarvo, lisäilman syöttö, laskennallinen kuormitusarvo, ajoneuvon nopeus ja polttoaineen paine. (Euroopan parlamentin ja neuvoston direktiivi 98/69/EY.)

EU-direktiivin ja OBD-standardien määräämien tietojen lisäksi ajoneuvoista saadaan luettua usein lukuisia ajoneuvon valmistajan määrittelemiä mittausarvoja. Tekniikan maailman numerossa 3/2010 julkaistussa artikkelissa ”Mustan laatikon uumeniin” on testattu halpoja OBD-testereitä ja sitä minkälaista tietoa laitteilla saa ajoneuvoista luet- tua. Artikkelin toimittaja on VAG-konsernin autoissa laitteita testatessaan saanut luet- tua mitta-arvoja yli 20 anturilta. (Parviainen 2010, 44.)

OBD-järjestelmä määrittelee viisi mahdollista protokollaa, joita ajoneuvovalmistajat voivat käyttää. OBD-sovittimien tulee luonnollisesti osata kaikki mahdolliset protokol- lat. OBD-sovitinta käytettäessä käyttäjän tai sovelluksen ei tarvitse tietää mitä protokol- laa kulloinkin käytetään, sovitin hoitaa protokollan muunnokset. (ELM327 datalehti, 34.)

2.2 Sovittimet

OBD-järjestelmään kytkeytymiseksi tarvitaan sovitin tai testeri. Testeri on itsenäinen laite joka sisältää oman näytön ja ohjelmiston esimerkiksi vikakoodien lukemista varten, eikä erillistä tietokonetta tarvita. Testerien käyttömahdollisuudet ovat usein rajatut ja tällöin tarvitaan tietokoneessa suoritettava laajempi ohjelmisto ja sovitin tietokoneen yhdistämiseksi OBD-järjestelmään. (Parviainen 2010, 43.)

Sovitin muuntaa ajoneuvon tietoliikenteen tietokoneen ymmärtämään muotoon. Tieto-

(9)

henkilökohtainen tietokone. Sovittimia on markkinoilla eri liitäntätavoilla, joista ylei- simpiä ovat USB, RS232 ja Bluetooth. Koska tämän opinnäytetyön tuotoksena valmis- tuu sovellus mobiililaitteelle, jonka perusajatuksena on langattomuus ja kannettavuus, on langaton yhteys sovittimeen myös perusteltua, joten sovittimeksi valittiinkin Blue- tooth-yhteydellä varustettu.

2.3 ELM327

Yksi tunnetuimmista OBD-sovittimissa käytettävien mikropiirien valmistajista on Ka- nadalainen ELM Electronics. Yritys on suunnitellut ja valmistaa monia eri OBD- prokollien kanssa yhteensopivia piirejä. ELM327-piiri on valmistajan piireistä suosituin ja tukee kaikkia OBD-protokollia. Vuonna 2005 julkistettiin ELM327-piirin ensimmäi- nen v1.0 versio ja tällä hetkellä tuorein versio on v1.4b. ELM327 pohjautuu Microchip Technologyn PIC-mikrokontrolleriin. (ELM Electronics 2013.)

ELM327:n ytimessä sijaitsee ohjauskomentotulkki, joka vastaa sovellukselta saapuvien viestien kääntämisestä OBD-järjestelmän ymmärtämään muotoon, sekä OBD-

protokollatulkki, joka vastaa OBD-protokollien näkymisestä sovellukselle yhdenmukai- sella tavalla. Näiden lisäksi ELM327 sisältää muun muassa RS232-liitännän, virranhal- linnan, A/D-muuntimen ja tilatietoja ilmaisevien ledien ohjauksen. Kuviossa 1 on esi- tetty lohkokaavio ELM327:n toiminnoista ja toimintojen välisistä yhteyksistä.

Kuvio 1. ELM327 lohkokaavio (ELM327 datalehti, 1.)

(10)

ELM327 oli ensimmäisiä helposti ja edullisesti harrastajien saavutettavissa olevia sovi- tinpiirejä. Piirien valmistaja ei ole koskaan itse myynyt tai valmistanut kokonaisia sovit- timia, vaan valmistaa ja markkinoi ainoastaan sovitinpiirejä. Valmistaja on kuitenkin julkaissut alusta alkaen kytkentäkaavioita, joiden avulla harrastajien on mahdollista ra- kentaa toimiva sovitin kyseisten sovitinpiirien pohjalta. (ELM Electronics 2013.)

Nykyisin ELM327-piiriä hyödyntävät sovittimet käyttävät tyypillisesti RS232, USB tai Bluetooth–yhteyttä tietokoneeseen kytkeytymiseksi. Kaikille yhteystavoille on yhteistä sarjamuotoinen liikennöinti. Käytännössä USB ja Bluetooth-sovittimet muodostavat PC-tietokoneelle virtuaalisen sarjaportin, jonka kautta liikennöinti tapahtuu. ELM327:n datalehdessä (sivu 7) mainitaan ELM327:n olettavan kommunikoinnin tapahtuvan RS232-yhteyttä käyttäen. Oli siis yhteystapa mikä tahansa, ELM327:n kannalta yhteys näkyy aina RS232-yhteytenä. (ELM327 datalehti, 59.)

ELM327:n kanssa kommunikoitaessa käytetään analogisista modeemeista tuttuja AT- komentoja. AT-komennot ovat komentoja, jotka alkavat aina AT-kirjaimilla, jonka jäl- keen tulee varsinainen komento ja siihen liittyvät mahdolliset parametrit. AT-

komentoja käytetään ELM327:n ohjauskomentoina, varsinaiset OBD-järjestelmään liittyvät komennot lähetetään heksadesimaalilukuina. (ELM327 datalehti, 9.) ELM327:n komennot on lueteltu liitteessä 2.

OBD-järjestelmään liittyvät komennot koostuvat tavuista, jotka esitetään heksa- desimaalilukuina. Ensimmäinen tavu määrittelee diagnostiikkamoodin, joita on kym- menen mahdollista. Seuraavat tavut määrittelevät pyydettävän tiedon ja mahdolliset pyyntöön liittyvät lisämääritteet, näitä tavuja kutsutaan PID (parameter identification) - tavuiksi. Kaikissa moodeissa PID 00 on kysely järjestelmän tukemista PID-numeroista kussakin moodissa. Esim. moodin 01 tuetut PID:t kysytään komennolla 0100. Moodi 01 on tila, jossa voidaan lukea ajoneuvosta reaaliaikaisia tietoja. (ELM327 datalehti, 29.)

Virheellisiin viesteihin tai vikatilanteisiin ELM327 vastaa virheviestillä. Virheilmoituksia ei ole mitenkään koodattu, vaan ilmoitukset ilmoitetaan selväkielisinä. Seuraavassa esi-

(11)

tellään tyypillisimpiä virheilmoituksia. Täydellinen virheilmoitusluettelo löytyy liitteestä 2.

Kun ELM327 ei ymmärrä sille lähetettyä komentoa tai komentoa ei voi juuri nyt suorit- taa, ELM327 vastaa komentoon kysymysmerkillä (?) (ELM327 datalehti, 72). Ilmoitus voi johtua monesta syystä, kuten esimerkiksi että yritetään kommunikoida väärän pro- tokollan komennoilla.

Jos kesken komennon suorituksen lähetetään mitä tahansa ELM327:lle, keskeytyy ko- mennon suorittaminen ja ELM327 vastaa ”STOPPED”–ilmoituksella. Komento on suoritettu kokonaan vasta kun ELM327 lähettää komentokehotetta ilmaisevan ”>”- merkin. (ELM327 datalehti, 73.)

Jos ELM327:n sisäinen 256 merkin lähetyspuskuri täyttyy, eli vastaanottava sovellus tai laitteisto ei pysty käsittelemään ELM327:n lähettämää tietovirtaa tarpeeksi nopeasti, raportoidaan siitä ”BUFFER FULL”-viestillä. (ELM327 datalehti, 72.)

Jos ELM327 ei pysty yhdistymään ajoneuvon OBD-järjestelmään ilmoitetaan tästä

”UNABLE TO CONNECT”-viestillä. Tämä ilmoitus voi johtua esimerkiksi siitä, että ajoneuvon virta ei ole kytkettynä tai ajoneuvossa käytetään protokollaa jota ELM327 ei tue. (ELM327 datalehti, 74.)

(12)

3 Android

Android on Googlen kehittämä avoimen lähdekoodin ohjelmistopino, joka sisältää mm. käyttöjärjestelmän, väliohjelmistoja ja perussovellukset puhelin- ja mobiililaitekäyt- töön. Android on maailman suosituin alusta mobiililaitteille ja osaltaan suosiota selittä- vät selkeä, helppokäyttöinen ja muokattava käyttöliittymä, avoimen lähdekoodin alusta, hyvät ja ilmaiset työkalut kehittäjille, sekä Google Play -kauppa, josta voi ladata luke- mattomia ilmaisia tai maksullisia sovelluksia. Ladattavana on tällä hetkellä yli 600 000 sovellusta. (Android 2013a.)

Googlen mukaan Androidin tärkeimpiä ominaisuuksia ovat mm.:

− Sovelluskehys

− Dalvik virtuaalikone

− Integroitu WebKit-moottoriin perustuva www-selain

− Optimoitu grafiikkatuki, OpenGL ES 1.0 määrittelyn mukainen 3D-grafiikka

− SQLite tiedon tallennusta varten

− Multimediatuki yleisimmille formaateille

− GSM puhelintuki

− Bluetooth, EDGE, 3G ja WiFi (vaatii laitteistotuen)

− Kamera, GPS-paikannus, kompassi ja kiihtyvyysmittaus (vaatii laitteistotuen)

− Monipuolinen kehitysympäristö ja työkalut (Android Developers 2013m.)

Tuoreen IDC:n tekemän tutkimuksen mukaan Android-käyttöjärjestelmä on ohittanut markkinaosuuksissa Applen iOS-käyttöjärjestelmän. Vuoden 2013 ensimmäisellä nel- jänneksellä Androidin markkinaosuus on ollut 56,5% ja iOS:n 39,6%. Kahden suosi- tuimman jälkeen seuraavana on Windows, jonka osuus markkinoista on vain 3,3%.

Vielä vuosi sitten kahden johtavan toimijan sijoitukset olivat toisin päin, iOS:n hallites- sa markkinoita. Android on kasvattanut markkinaosuuttaan vuodessa 247,5% ja taulu- tietokoneiden kasvu kaiken kaikkiaan on ollut 142,4% vuoden aikana. (IDC 2013.)

(13)

3.1 Järjestelmäarkkitehtuuri

Androidin arkkitehtuuri koostuu neljästä kerroksesta, joista ylimmällä kerroksella sijait- sevat käyttäjälle näkyvät sovellukset. Sovelluskerroksen alapuolella sijaitsee sovelluske- hyskerros, joka tarjoaa rajapintoja sovellusten käyttöön. Ajonaikaisella kerroksella sijait- see järjestelmän kirjastot, sekä muun muassa Dalvik-virtuaalikone sovellusten suoritta- mista varten. Alimmalla kerroksella on Linux-ydin ja laiteohjaimet. Kuviossa 2 on ku- vattu kerrokset ja niiden sisältämät toiminnot.

Kuvio 2. Android-arkkitehtuuri (Android Developers 2013a.)

Alimpana Androidin arkkitehtuurissa on Linux Kernel-taso. Android käyttää Linux 2.6 ydintä pohjanaan. Linux-ydin huolehtii tietoturvasta, muistin hallinnasta, prosessien hallinnasta, verkkopinosta ja laiteajureista. Linux-ydin toimii myös rajapintana laitteiden ja ohjelmistojen välillä. (Android Developers 2013a.)

Linux Kernel-tason yläpuolella olevalla, ajonaikaisella tasolla sijaitsevat C/C++ kirjas- tot, ydinkirjastot, sekä Dalvik-virtuaalikone. Tällä tasolla sijaitsevia kirjastoja ovat mm.

(14)

System C -kirjasto, media- ja grafiikkakirjastot ja SQLite-kirjasto. Kernel-tasolla anne- taan jokaiselle sovellukselle yksilöity ja käyttöoikeuksiltaan rajattu käyttäjätunnus, jonka oikeuksin Dalvik-virtuaalikonetta suoritetaan. Yksilöidyt käyttäjätunnukset tuovat lisä- varmuutta sovellusten eristämiseen toisistaan. (Android Developers 2013a.)

Dalvik-virtuaalikone on Dan Borsteinin alun perin kirjoittama, pienen Islantilaisen ka- lastajakylän mukaan nimetty virtuaalikone. Virtuaalikoneen alkuperäinen käyttötarkoi- tus oli mahdollistaa sovellusten ajaminen laitteissa, joiden suorituskyky ja resurssit oli- vat rajallisia. Matkapuhelimet ja taulutietokoneet ovat tyypillisesti tällaisia rajoitetuin resurssein varustettuja laitteita, joten Dalvik-virtuaalikone soveltuu näihin mainiosti.

Virtuaalikone on täysin isäntäjärjestelmästä erotettu virtuaalinen tietokone, jossa suori- tetut sovellukset eivät voi suoraan kommunikoida fyysisen laitteiston tai toisten virtuaa- likoneiden kanssa. Dalvik-virtuaalikone suorittaa tiiviiseen .dex -muotoon käännettyjä Java-sovelluksia. Tyypillisesti .dex–muotoon käännetyt sovellukset ovat kooltaan pakat- tuja .jar-tiedostoja selkeästi pienempiä, jotta sovellukset mahtuvat paremmin laitteiden rajalliseen tallennustilaan. Kaikki Android-sovellukset täytyy kääntää Android-

ohjelmistokehityalustasta (SDK) löytyvällä kääntäjällä (dex-translator) .dex -muotoon.

(Gunasekera 2012, 4.)

Ajonaikaisen kerroksen yläpuolella Androidin arkkitehtuurissa sijaitsee sovelluskehys- kerros (Application Framework). Tämä kerros tarjoaa sovellusten käyttöön rajapinnan käyttöliittymäelementteihin ja funktioihin, huolehtii sovellusten elinkaarista, sekä tarjo- aa tallennusratkaisuja sovellusten omaan käyttöön ja keskinäiseen tietojen vaihtoon.

(Gunasekera 2012, 5.)

Ylimpänä Androidin arkkitehtuurissa on sovelluskerros, tällä kerroksella sijaitsevat lait- teeseen valmiiksi asennetut sovellukset, sekä käyttäjän itsensä asentamat sovellukset.

Tällä kerroksella sijaitsevat sovellukset ovat Java-ohjelmointikielellä kirjoitettuja sovel- luksia, joita ajetaan jokaista omassa Dalvik-virtuaalikoneessaan. Sovellukset kommuni- koivat laitteiston kanssa sovelluskehyskerroksen rajapinnan kautta. (Gunasekera 2012, 7.)

(15)

3.2 Sovellusarkkitehtuuri

Konteksti (engl. context) toimii jokaisen Android-sovelluksen komentokeskuksena.

Suurimpaan osaan sovelluksen toiminnallisuuksista voidaan kommunikoida tai viitata kontekstin kautta. Konteksti toimii perustana sovellukselle ja tarjoaa sovelluksen eri osien käyttöön yhteisiä tietoja ja resursseja, sekä liittymän laitteen palveluihin ja resurs- seihin. Sovelluksen konteksti periytetään Context-luokasta (android.content.Context).

(Darcey & Conder 2012, 103.)

Aktiviteetti (engl activity) on yksittäinen, kohdennettu toimenpide joka toimii vuoro- vaikutuksessa sovelluksen käyttäjän kanssa. Aktiviteetit hoitavat ikkunoiden ja näkymi- en luomisen, painalluksiin ja kosketuksiin reagoimisen. Aktiviteetit voivat näkyä käyttä- jälle koko näytön täyttävänä yksittäisenä näkymänä tai sisältyä toisen aktiviteetin sisään.

(Android Developers 2013e.) Aktiviteettia ei tule pitää pelkästään käyttöliittymä- luokkana, koska Activity-luokka (android.app.Activity) perii Context-luokan, sisältäen näin ollen kaiken saman toiminnallisuuden kuin konteksti (Darcey & Conder 2012, 103.).

Aktiviteetteja käsitellään pinona. Kun uusi aktiviteetti käynnistetään, lisätään edellinen aktiviteetti pinoon päällimmäiseksi. Kun aktiviteetti suljetaan, palautetaan pinosta edel- linen aktiviteetti näkyviin. (Android Developers 2013e.)

Aktiviteetilla on neljä mahdollista tilaa:

− Aktiviteetti on aktiivinen ja näkyy näytöllä.

− Aktiviteetti on pysäytetty. Aktiviteetti on käynnissä, mutta toinen aktiviteetti on auennut sen päälle peittäen aktiviteetin näkymästä osan.

− Aktiviteetti on sammutettu. Kun näkymä peittyy toisen aktiviteetin näkymän al- le, sammutetaan aktiviteetti kokonaan.

− Prosessi lopetetaan. Kun aktiviteetti on pysäytetty tai sammutettu, voi järjestel- mä vapauttaa sen käyttämän muistin lopettamalla siihen liittyvän prosessin. Kun käyttäjä palaa aktiviteettiin, täytyy se käynnistää uudelleen ja palauttaa tilaan jos- sa se oli lopetushetkellä.

(16)

Kuviossa 3 on esitetty aktiviteetin elinkaari siihen liittyvine metodeineen. Pyöreäreunai- set laatikot ovat aktiviteetin perustiloja ja suorakulmaiset laatikot metodeita.

Kuvio 3. Aktiviteetin elinkaari (Android Developers 2013e.)

Kun aktiviteetti käynnistetään, kutsutaan ensimmäiseksi onCreate()-metodia, jossa voi- daan tehdä aktiviteettiin liittyviä alustuksia, kuten käynnistää taustaprosessi. OnStart()- metodia kutsutaan onCreate()-metodin jälkeen tai onRestart()-metodin jälkeen, jos käyttäjä palaa näkymään, eikä aktiviteettiin liittyvää prosessia ole vielä sammutettu.

OnResume()-metodia kutsutaan OnStart()-metodin jälkeen tai kun käyttäjä palaa nä- kymään onPause()-metodin kutsumisen jälkeisestä pysäytetystä tilasta. OnResume()- metodin jälkeen aktiviteetti on suoritustilassa., kunnes se keskeytetään. (Android Deve- lopers 2013e.)

Aktiviteetin keskeytys aiheutuu toisen aktiviteetin aktiiviseksi tulemisesta. Kun nykyi-

(17)

todin jälkeen aktiviteetti voi palata aktiiviseksi onResume()-metodin kautta. Kun aktivi- teetti ei ole enää lainkaan näkyvissä kutsutaan onStop()-metodia. Tätä metodia voidaan kutsua onPause()-metodin jälkeen välittömästi, jos aktiviteettiin liittyvä näkymä piilou- tui kokonaan toisen aktiviteetin näkymän alle. OnStop()-metodin jälkeen aktiviteetti voi vielä palata aktiiviseksi onRestart()-metodin kautta, jos käyttöjärjestelmä ei ole ehtinyt resurssitarpeiden takia sulkea aktiviteettiin liittyvää prosessia. Jos aktiviteetti lopetetaan kokonaan kutsutaan onDestroy()-aktiviteettia, jossa voidaan esimerkiksi lopettaa onC- reate()-metodissa luodut taustaprosessit. Tämän jälkeen aktiviteetti on sammutettu ko- konaan ja siihen liittyvä prosessi lopetettu. (Android Developers 2013e.)

Jokaiselle Android-sovellukselle täytyy määritellä AndroidManifest.xml-tiedosto, jossa määritellään sovelluksen ominaisuuksia ja oikeuksia. Manifestissa määritellään sovelluk- sen aktiviteetit, palvelut, tiedon tuottajat ja tiedon vastaanottajat. Lisäksi manifestissa määritetään mille Android-versiolle sovellus on tarkoitettu ja mitkä sovelluskehitysym- päristön versiot ovat tuettuja. (Android Developers 2013h.)

3.3 Sovelluksen elinkaari

Androidissa sovellus käytännössä sulkeutuu, kun sovelluksen viimeinen aktiviteetti sul- keutuu. Sulkeutuminen tapahtuu myös silloin, kun toinen sovellus tuodaan edustalle.

Sovellusta ei jätetä taustalle pyörimään, viemään vähäisiä laitteen resursseja. (Android Developers 2013e.)

Koska sovelluksella saattaa olla tarve suorittaa toimenpiteitä taustalla myös silloin, kun sovellus ei ole käynnissä, on Androidiin kehitetty palvelurajapinta. Palvelut mahdollis- tavat toimintojen suorittamisen taustalla kahdella eri tavalla. Palvelua voidaan suorittaa loputtomasti käynnistyksestä siihen asti, kunnes palvelu suljetaan sovelluksesta tai kun palvelu sulkee itse itsensä. Toinen tapa palvelun suorittamiseen on suorittaa palvelua niin kauan, kuin yksikin palvelu on siihen sitoutuneena. Ensimmäisen sidonnan alussa palvelu käynnistetään ja kun kaikki sitoutuneet asiakkaat ovat katkaisseet yhteyden pal- veluun, palvelu suljetaan. Kuviossa 4 on havainnollistettu molempien palvelumallien elinkaari. (Android Developers 2013i.)

(18)

Kuvio 4. Palvelun elinkaari (Android Developers 2013i.)

Sidottuun palveluun kommunikointi tapahtuu IBinder-liittymän kautta. Palveluun si- toutumiseen käytettävä onBind()-metodi palauttaa IBinder-olion jota käytetään palve- lun kanssa kommunikointiin. (Android Developers 2013j.) IBinder-liittymän kautta välitettävät viestit paketoidaan Parcel-olioiksi. Parcel-olio voi sisältää staattista tietoa tai siinä voidaan viitata olioihin. (Android Developers 2013k.)

3.4 Sovelluskehitys

Sovelluskehitykseen kuuluu neljä vaihetta, joista ensimmäisessä asennetaan tarvittavat työkalut ja ympäristö. Toisessa vaiheessa sovellusta kehitetään ja ohjelmoidaan. Kol- manteen vaiheeseen kuuluu sovelluksen testaus ja virheiden korjaus. Kolmatta vaihetta voidaan suorittaa toisen vaiheen kanssa rinnakkain tai silmukassa peräkkäin. Neljäs vai- he on sovelluksen julkaiseminen valmiina. (Android Developers 2013f.)

Android sovellukset kirjoitetaan Java-ohjelmointikielellä ja koko sovellus paketoidaan ajettavaksi yhteen Android-pakettiin (APK) (Android Developers 2013d). Java-

(19)

osoitteessa http://www.oracle.com/technetwork/java/javase/downloads/index.html.

JDK:n lisäksi tarvitaan Android-ohjelmistokehitysalusta (Software Development Kit, SDK). (Android Developers 2013n.)

Google on tehnyt sovelluskehityksessä alkuun pääsemisen helpoksi paketoimalla kaiken tarvittavan yhteen pakettiin, ADT Bundleen. ADT Bundle sisältää Eclipsen, johon on valmiiksi asennettu ADT-lisäosa, Android-ohjelmistokehitysalustan (SDK), alustatyö- kalut, viimeisimmän Android-alustan, sekä Android käyttöjärjestelmäkuvan emulaatto- rikäyttöön. (Android Developers 2013n.)

Kehitysympäristö tarjoaa monipuoliset työkalut sovelluksen kehittämiseen, perkaami- seen ja virheiden etsintään. Erityisen käyttökelpoinen ja kehitystyötä suuresti helpottava ominaisuus on sovelluksen lokitietojen välittäminen suoraan kehitysympäristön lokitie- dostoon. Lokitiedot voivat olla käyttöjärjestelmän ja Dalvik-ajoympäristön luomia tie- toja tai sovelluksen kehittäjä voi kirjoittaa omia tietoja lokiin sovelluksen suorituksen aikana. (Android Developers 2013o.)

(20)

4 Mittaristosovelluksen kehittäminen

Saadakseen tietoa ajoneuvon antureilta, mittaristosovelluksen tulee avata Bluetooth- yhteys OBD-sovittimeen ja kommunikoida sovittimessa sijaitsevan ELM327 piirin kanssa. ELM327 hoitaa kommunikoinnin sovittamisen mobiililaitteen ja ajoneuvon kanssa. Kuviossa 5 on esitetty periaatekaavio sovelluksen yhdistämisestä ajoneuvoon.

Kuvio 5. Sovelluksen yhteys ajoneuvoon

Sovellukseen luotavia luokkia lähdettiin suunnittelemaan periaatekaavion pohjalta.

Luokkia luotiin Bluetooth-yhteyttä varten, OBD-kommunikaatiota varten ja mittareita varten. Luvussa 4.2 esitetään sovelluksen luokkakaavio, josta luokkien riippuvuudet ja yhteydet selviävät tarkemmin.

4.1 Kehitysympäristö

Mittaristosovelluksen kehittämisessä käytettiin ADT Bundle-ympäristöä joka koostuu Eclipse IDE:stä, johon on valmiiksi asennettu ADT (Android Developer Tools).

Asennus oli helppo ja kehitysympäristö oli heti asennuksen jälkeen käytettävissä. Asen- nukseen sisältyy AVD (Android Virtual Device) -virtuaalilaitteet, jotka tarjoavat virtu- aalisen ajoympäristön Android-sovelluksille. (Android Developers 2013n.)

Virtuaaliset Android-laitteet vievät isäntätietokoneen resursseja, joten mielekkäämmäksi

(21)

oli käytettävissä A-Link –merkkinen 10” –taulutietokone ja Sonyn valmistama matka- puhelin. Sovelluksen suorittaminen oikeassa Android-laitteessa on mahdollista kytke- mällä isäntätietokoneesta USB-kaapeli kohdelaitteeseen ja kytkemällä sovelluskehitys päälle kohdelaitteen asetuksista.

Sovelluksen muodostaman Bluetooth-yhteyden testaus aloitettiin kytkemällä ulkoinen virtalähde OBD-sovittimeen (kuvio 6). Hakusanoilla ”DLC connector pinout” interne- tistä löytyi useita sivustoja joista selvisi DLC-liittimen kontaktien tarkoitus ja kytkentä- järjestys. Osoitteesta http://www.obdtester.com/obd2_connector löytyneen kytkentä- järjestyksen perusteella kontaktiin 16 kytkettiin 12v jännite ja kontaktiin 4 maa. Jännit- teen kytkemisen jälkeen sovittimen power-valo syttyi, joten voitiin olettaa OBD- sovittimen olevan valmis yhteyden muodostamiseen. Järjestelyn toimivuus varmistui, kun OBD-sovittimen ja matkapuhelimen välille onnistuttiin muodostamaan Bluetooth- pari. Parin muodostuksen jälkeen päästiin kokeilemaan vastaako ODB-sovitin kehitteil- lä olevan sovelluksen lähettämiin pyyntöihin, vastausten havainnointia varten sovellus asetettiin raportoimaan kaiken vastaanottamansa tiedon käyttäjälle. Melko pian ensim- mäiset vastaukset OBD-sovittimelta saatiinkin ja sovellusta päästiin testaamaan ajoneu- vossa.

Kuvio 6. Sovelluskehityksessä käytetty Bluetooth OBD-sovitin

Jatkuva sovelluksen testaaminen ajoneuvossa ei ollut mitenkään mielekästä, joten oli tarve löytää testaukseen helpompi ratkaisu. Muutamien Internet-hakujen seurauksena löytyi OBDSim-ohjelmisto, joka simuloi OBD-järjestelmää ja on ELM327-komentojen

(22)

kanssa yhteensopiva. Ohjelmiston käyttöönotto oli helppoa, edes ohjelmiston asennus- ta ei tarvita, vaan ohjelmisto on käytännössä yksi suoritettava tiedosto. Jos OBDSim- ohjelmistoa haluttaisiin käyttää windows-sovelluksen testaamiseen, täytyisi koneeseen asentaa sarjaporttiliikenteen virtualisoiva com0com –sovellus, mutta koska tarkoitukse- na oli testata matkapuhelimessa suoritettavaa sovellusta Bluetooth-yhteyttä käyttäen ei tarvinnut kuin asettaa PC-koneen Bluetooth-asetuksista bluetooth-sarjaportti vastaan- ottotilaan ja ajaa OBDSim-sovellus. Sovellukselle annettiin parametrina sarjaportin ni- mi, johon sovelluksen haluttiin yhdistyvän. Testausympäristössä OBDSim-sovellus suoritettiin komentokehotteesta komennolla: ”obdsim –wcom4”, eli palvelu yhdistet- tiin sarjaporttiin com4. OBDSim osoittautui todella käteväksi sovellukseksi kehitystyön aikana ja todennäköisesti nopeutti työtä huomattavasti. OBDSim on ladattavissa kehit- täjän kotisivuilta osoitteesta http://icculus.org/obdgpslogger/obdsim.html.

4.2 Pääohjelma

Mittaristosovelluksen suoritus alkaa MainActivity-luokasta, jota tässä sovelluksessa kä- sitellään pääohjelmana. Käynnistettävä aktiviteetti määritellään AndroidManifest.xml- tiedostossa ja tässä sovelluksessa se on määritelty seuraavasti:

<activity

android:name="net.laatikainen.mittaristo.MainActivity"

android:label="@string/app_name"

android:configChanges="">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

MainActivity perii android.app.Activity-luokan ja luo ilmentymiä Gauge- ja OBDInter- face-luokista. OBDInterface-luokkaa käytetään OBD-yhteyden muodostamiseen ja OBD-järjestelmän kanssa kommunikointiin. OBDInterface perii java.lang.Thread- luokan ja sitä voidaan ajaa säikeenä, kuten sovelluksessakin tehdään. Gauge-luokka pe- rii android.view.View-luokan ja sitä käytetään mittarikomponenttina näkymissä. Luok- kien riippuvuudet ja yhteydet on kuvattu luokkakaaviossa kuviossa 7.

(23)

Kuvio 7. Sovelluksen luokkakaavio

Käyttöjärjestelmä käynnistää aktiviteetin kutsumalla onCreate()-metodia, tässä sovelluk- sessa ko. metodissa asetetaan näkymäksi R.layout.ctivity_main –näkymä, joka on määritel- ty XML-muodossa sovelluksen resursseissa. Näkymä on erittäin yksinkertainen ja sisäl- tää ainoastaan GridLayoutin, jolle mittarit tullaan sijoittamaan ja tilatietoa varten teksti- kentän. GridLayout muodostaa ruudukon, joka koostuu keskenään samankokoisista soluista. Solujen määrä määräytyy asetettujen rivien ja sarakkeiden määrän mukaan (Android Developers 2013l).

Sovelluksen onCreate()-metodissa ladataan tallennetut asetukset, sekä tulkitaan resurs- seihin tallennettu gauges.xml-tiedosto, johon on tallennettu tiedot sovelluksen tukemis- ta mitattavista asioista. Gauges.xml-tiedoston perusteella luodaan HashMap-taulukko Gauge-olioista. Gauges.xml rakenne suunniteltiin gauge-olion attribuutteja mukaillen seuraavaksi:

<?xml version="1.0" encoding="utf-8"?>

<gauges>

<gauge>

<name>RPM</name>

<title>RPM</title>

(24)

<minValue>0</minValue>

<maxValue>9000</maxValue>

<stepCount>9</stepCount>

<obdpid>010C</obdpid>

<divider>4</divider>

<multiplier></multiplier>

<updaterate></updaterate>

<minLimit>0</minLimit>

<maxLimit>8000</maxLimit>

<offset></offset>

</gauge>

</gauges>

Tiedosto sisältää gauges-elementin, joka koostuu useista gauge-elementeistä, jotka pitä- vät sisällään gauge-olion attribuutteja.

Gauge-olion name-attribuutti kuvaa olion nimeä. Nimeä käytetään esimerkiksi asetuk- sissa. Title-attribuutti on mittarin otsikkotieto, joka sijoitetaan piirrettävään mittaritau- luun. MinValue ja MaxValue asettavat mittaritaulun asteikon alhaisimman ja korkeim- man arvon. StepCount kertoo kuinka moneen osaan asteikko jaetaan. Obdpid-

attribuutti on OBD-järjestelmään lähetettävä koodi, jolla mittarin näyttämää tietoa pyy- detään. Divider-attribuutilla määritellään kuinka monella vastaanotettava luku jaetaan, jotta päädytään oikeaan arvoon. Esimerkissä käytetty moottorin kierrosluku ilmoitetaan

¼ kierroksina, joten luettu luku jaetaan neljällä. Vastaavasti multiplier kertoo millä lu- vulla arvo kerrotaan, jotta päädytään oikeaan arvoon. Updaterate määrittelee kuinka usein mittarin tieto päivitetään, 2 tarkoittaa joka toinen kerta, 3 joka kolmas jne. Min- Limit ja maxLimit määrittävät raja-arvot, joiden ylittämisestä ilmoitetaan vaihtamalla mittarin tausta punaiseksi.

Kun Android-käyttöjärjestelmä havaitsee muutoksen laitteen kokoonpanossa se kutsuu aktiviteetin onConfigurationChanged-metodia (Android Developers 2013e). Muutos voi aiheutua esimerkiksi laitteen kääntämisestä pysty- ja vaaka-asentojen välillä. Mitta- ristosovelluksessa mittareiden piirtäminen on toteutettu tässä metodissa, jotta mittarit piirtyvät aina oikean kokoisina ja laitteen kääntämiseen reagoidaan. Mittareiden piirto on toteutettu tyhjentämällä aluksi näkymälle sijoitettu GridLayout mahdollisista van- hoista mittareista ja sen jälkeen lisäämällä sille uudestaan kaikki päälle asetetut mittarit.

Pääaktiviteetin onDestroy()-metodia kutsutaan kun käyttäjä poistuu näkymästä joko

(25)

paluu-nappia käyttäen. onDestroy()-metodissa lopetetaan OBDInterface-säikeen aja- minen kutsumalla OBDInterface-olion stopThread()-metodia.

4.3 Mittaristo-komponentti

Halusin ohjelmiston ulkoasun näyttävän perinteiseltä auton mittaristolta analogi- mittareineen, mutta Androidin valmiista komponenteista ei löytynyt analogiseksi mitta- riksi soveltuvaa komponenttia valmiina. Visuaalisesti lähimmäksi olisi osunut kello- komponentti, mutta koska komponentin toimintaa ei pystynyt muokkaamaan tarkoi- tukseen sopivaksi, päädyin luomaan kokonaan uuden komponentin.

Helpoiten Androidin komponenttien luominen onnistuu luomalla luokan, joka laajen- taa Androidin View-luokkaa (android.view.View). View-luokka tarjoaa perustan käyttöliit- tymäkomponentteja varten. View-luokan päälle rakennettuja komponentteja voi käyttää XML-Layouteissa tai lisäämällä ne näytölle koodissa. (Android Developers 2013c.)

View-luokan laajentamisessa täytyy toteuttaa muodostimien lisäksi vähintäänkin on- Draw-metodi, jotta komponentti pystytään piirtämään layoutille. Toteuttamani luokan muodostimessa alustetaan mittarin eri osien värit. Jokaiselle käytettävälle värille täytyy Androidissa luoda ilmentymä android.graphics.Paint-luokasta.

onDraw-metodissa tapahtuu varsinainen mittarin piirtäminen. Metodi saa käyttöliitty- mältä parametrina canvas-parametrin, joka on luokalle määritelty piirtokangas. Kan- kaan koko määritetään sijoitettaessa komponenttia layoutille. Piirto aloitetaan piirtämäl- lä mittarin taustaksi mustalla värillä täytetty ympyrä canvas.drawCircle –metodia käyt- täen. Ympyrän säteenä käytetään 45% piirrettävän alueen leveydestä, näin saadaan jätet- tyä hieman tilaa mittarien välille vaikka ne aseteltaisiin layoutilla aivan vierekkäin. Taus- tan jälkeen piirretään asteikkoviivat ja mittarin viisari canvas.drawLine –metodilla.

Viisarin jälkeen mittariin piirretään otsikkoteksti ja mittarin näyttämä arvo numeroina, canvas.drawText –metodia käyttäen. Asteikkoviivojen ja viisarin päätepisteet saadaan laskettua yksinkertaisilla geometrisillä kaavoilla. Mittari viimeistellään piirtämällä lopuk- si kokonaisuuden ympärille harmaa reunus.

(26)

4.4 Bluetooth-liikennöinti

Sovelluksen Bluetooth-liikennöintiä varten luotiin erillinen luokka. Luokkaan tuodaan Androidin android.bluetooth-paketista tarpeellisia luokkia. Tässä sovelluksessa tarpeel- lisia ovat BluetoothAdapter, BluetoothDevice ja BluetoothSocket –luokat. BluetoothAdapter edustaa fyysistä laitetta, jonka kautta on mahdollista suorittaa bluetooth-laitteiden haku- ja, parituksia ja muodostaa yhteyksiä toisiin bluetooth-laitteisiin. BluetoothDevice viit- taa laitteeseen, jonka kanssa on muodostettu pari ja luotu yhteys. BluetoothSocket toi- mii kommunikoinnin päätepisteenä, samaan tapaan kuin esim. TCP-vastakkeet verkko- liikenteessä. (Android Developers 2013b.)

Sovelluksessa Bluetooth-yhteyden muodostus aloitetaan pyytämällä käyttöjärjestelmältä oletusarvoista Bluetooth-adapteria android.bluetooth.BluetoothAdapter-luokasta löyty- vää getDefaultAdapter() –metodia käyttäen. Metodi palauttaa BluetoothAdapter-olion, jota käytetään koodissa jatkossa adapteriin viitattaessa.

Kun adapteri on saatu selville, voidaan siltä kysyä isEnabled()-metodia käyttäen onko sovitin päällä. Jos vastaukseksi saadaan false, ei adapteri ole päällä ja käyttäjää voidaan pyytää aktivoimaan adapteri. Aktivointipyyntö tehdään kutsumalla aktiviteetin startAc- tivityForResult()–metodia. Seuraavassa esimerkki Android Developers-sivustolta:

if (!mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new

Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

}

(Android Developers 2013b.)

Sovelluksen tulee seuraavaksi ottaa yhteys toiseen Bluetooth-laitteeseen. Jos Bluetooth- parittamista vastapään laitteen ei ole kanssa tehty, täytyy se tehdä ennen kuin laitteeseen voidaan muodostaa yhteys. Sovellus voi itse aloittaa Bluetooth-laitteiden etsimisen, näyttää käyttäjälle luettelon löydetyistä laitteista, pyytää valitsemaan luettelosta oikea laite ja suorittaa parituksen. Toinen tapa on käyttää valmiiksi paritettuja laitteita, jota tapaa mittaristo-sovellus käyttää. Testeissä todettiin jälkimmäisen tavan toimivan pa- remmin ja vaativan uudelleen parittamista huomattavasti harvemmin, kuin ensin maini-

(27)

Mittaristo-sovelluksessa pyydetään BluetoothAdapterilta luettelo paritetuista laitteista käyttäen getBondedDevices()-metodia. Metodi palauttaa taulukkomuodossa Blue- toothDevice-olioita. Sovelluksen koodissa etsitään tästä taulukosta asetuksissa asetettu laite vertailemalla laitteiden MAC-osoitteita. Jos taulukosta ei löydy asetuksissa asetet- tua laitetta, palautetaan käyttäjälle virheilmoitus.

Kun BluetoothAdapter ja sen kautta löydetty BluetoothDevice ovat tiedossa, voidaan vastapään laitteeseen yrittää muodostaa yhteys. Sovelluksessa yhteys muodostetaan seu- raavasti:

UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");

mySocket = myDevice.createInsecureRfcommSocketToServiceRecord(uuid);

mySocket.connect();

if (mySocket.isConnected()) {

myOutputStream = mySocket.getOutputStream();

myInputStream = mySocket.getInputStream();

}

Tiedon lähettämistä ja vastaanottamista tarvitaan vastake, joka luodaan BluetoothDevi- cen createInsecureRfcommSocketToServiceRecord-metodia käyttäen. Metodille anne- taan parametriksi UUID, eli palvelun yksilöivä tunniste. Sarjamuotoista liikennettä var- ten käytetään sarjaporttiprofiilin ”00001101-0000-1000-8000-00805f9b34fb”-tunnistetta (Android Developers 2013b). Sarjaporttiprofiilia (SPP, Serial Port Profile) käytetään RS232-sarjaliikenteen emulointiin Bluetooth-yhteyden yli (Bluetooth 2013, 177).

Sovelluksessa pyydetään lähettävää tietoa varten vastakkeelta viittaus tietovirtaan ge- tOutputStream()-metodia kutsumalla. Vastaukseksi saatu olio tallennetaan myOut- putStream-muuttujaan. Vastaavasti vastaanotettavaa tietoa varten asetetaan myInputSt- ream-muuttuja vastakkeen getInputStream()-metodilla saatavalla oliolla. Tietovirrat ovat tavallisia Javan tietovirtoja, InputStream ja OutputStream.

Tiedon lähetys tapahtuu yksinkertaisesti kirjoittamalla tieto myOutputStream-

tietovirtaan write-metodia käyttäen. Metodi voi aiheuttaa IOException-poikkeuksen, joka täytyy käsitellä. Tiedon lähetys tapahtuu seuraavasti:

try {

if (mySocket.isConnected()) { String buffer = text+"\r";

(28)

myOutputStream.write(buffer.getBytes());

} }

catch (IOException ex) {

Log.e("bt-send", "EXCEPTION!");

}

Tässä sovelluksessa poikkeus käsitellään ainoastaan kirjoittamalla tieto siitä lokiin, pa- rempi tapa olisi yrittää tiedon kirjoittamista uudelleen ja vian jatkuessa ilmoittaa siitä käyttäjälle. Sovelluksen ollessa käynnissä tietoa kysellään OBD-järjestelmältä jatkuvasti, eikä ole kovin kriittistä vaikka yksi kysely sattuisi jäämään välistä pois. Kirjoitettava tie- to tuodaan kirjoitusmetodille text-nimisessä String-muuttujassa, josta se täytyy muuntaa binäärimuotoon Javan String-luokasta löytyvällä getBytes()-metodilla. OutputSt-

ream.write-metodi hyväksyy kirjoitettavan tiedon ainoastaan binäärimuodossa (Java API 2013a).

Tiedon vastaanottoa varten sovelluksessa käynnistetään uusi säie, jossa silmukassa ky- sellään vastaanottotietovirrasta onko saapuvaa tietoa odottamassa. Kun tietoa saapuu, se luetaan ja tallennetaan sovelluksen omaan puskuriin. Tällä järjestelyllä varmistetaan, että Bluetooth-laitteen puskurit eivät pääse täyttymää ja tietoa katoamaan. Lisäksi rat- kaisu mahdollistaisi saapuvan tiedon perusteella tapahtumien laukaisemisen, mutta tätä ei tässä sovelluksessa ole toteutettu. Rivien lukemista varten sovellukseen on tehty readLine()-metodi, jossa luetaan puskurista tietoa rivinvaihtomerkin löytymiseen asti, tai kunnes aikakatkaisu tapahtuu. Aikakatkaisu on toteutettu lukemalla metodin alussa järjestelmältä millisekuntien tarkkuudella nykyinen aika ja vertaamalla sitä silmukassa luettavaan uuteen aikaan. Aikakatkaisuksi on asetettu 2 sekuntia, joka osoittautui riittä- väksi. Vastaanotettavasta tiedosta siivotaan tyhjät merkit ja askelpalauttimen merkit kokonaan pois ja rivien alusta välilyönnit ja kehotteen merkki (>). Siivouksella helpote- taan vastaanotettavan tiedon tulkitsemista.

4.5 OBD-kommunikaatio

Kaikki kommunikaatio OBD-järjestelmän ja sovelluksen välillä tapahtuu OBDInterfa- ce-luokassa. Luokka ei vastaa varsinaisesta Bluetooth-yhteydestä, vaan se on hoidettu erillisessä Bluetooth-luokassa, jota OBDInterface käyttää. OBDInterface-luokassa on määritelty järjestelmään lähetettävät komennot ja tulkitaan järjestelmästä saapuvat vas-

(29)

Kun yhteydenmuodostus ELM327-sovittimeen aloitetaan, lähetetään aluksi kaksi rivin- vaihtoa. Rivinvaihtojen lähettäminen tapahtuu siksi, että laitteiden kytkemisen ja käyn- nistämisen yhteydessä on sovittimelle saattanut päätyä ylimääräisiä roskamerkkejä, jotka sotkisivat ensimmäisen komennon lähetyksen. Näin siis pystytään varmistumaan että ensimmäinen komento menee todennäköisemmin perille virheettä. Rivinvaihtojen jäl- keen vielä odotetaan hetki ja tyhjennetään vastaanottopuskuri. Tämän jälkeen ohjelma ilmoittaa käyttäjälle ”Connecting…”–viestin tiedoksi yhteydenmuodostamisen aloituk- sesta.

Ensimmäinen varsinainen lähetettävä komento on ATZ-komento, jolla alustetaan ELM327 virtojen kytkemistä vastaavaan tilaan. Kaikki asetukset palautetaan oletusase- tuksille, mahdollinen yhteys ajoneuvon OBD-järjestelmään katkaistaan ja ELM327 ase- tetaan odottamaan uusia komentoja. ATZ-komennon vastausta ei tarkisteta mitenkään, odotetaan vain että komentokehotteen merkki ”>” vastaanotetaan.

Oletusarvoisesti ELM327 kaiuttaa kaikki vastaanottamansa merkit takaisin lähettäjälle, aivan kuten perinteiset analogiset modeemitkin tekivät. Tämä ominaisuus on käyttökel- poinen oikeastaan vain kun käyttäjä itse lähettää komentoja terminaaliohjelmasta, jol- loin on hyödyllistä nähdä tekeekö käyttäjä kirjoitusvirheitä. Lähetettäessä etukäteen tallennettuja komentoja ei ole mitään syytä kaiuttaa merkkejä takaisin sovellukseen, jo- ten kaiutus kytketään pois päältä lähettämällä ELM327:lle ATE0-komento (Echo off).

Lisäksi ELM327:lle lähetetään ATS0-komento, joka kytkee välilyönti-merkit pois päältä ELM327:lta tulevista viesteistä. Ilman tätä komentoa ELM327 erottelee vastauksen eri osat välilyönnillä lukemisen helpottamiseksi. Koska vastaus luetaan koneellisesti, ei väli- lyönneistä ole etua, vaan enemmänkin haittaa kun ne joudutaan karsimaan pois vasta- uksen tulkinnan yhteydessä.

Tässä vaiheessa perusasiat ovat kunnossa, joten voidaan siirtyä valitsemaan yhteyden- muodostuksessa käytettävää protokollaa. ELM327 tarjoaa mahdollisuuden automaatti- seen protokollan etsimiseen, mutta se voidaan asettaa myös manuaalisesti. Sovellukses- sa tarjotaan käyttäjälle samat mahdollisuudet protokollan valintaan, kuin mitä ELM327 tarjoaa. Protokolla valinta tapahtuu asetuksista, joihin pääsee sovellusvalikon kautta

(30)

valinnalla ”settings”. Sovellus kertoo ELM327:lle asetetun protokollan ATSP-

komentoa käyttäen. Komennolle annetaan parametriksi valittu protokolla numeroina.

Numero 0 vastaa automaattista protokollan hakua ja näin ollen ATSP0-komento aset- taa protokollan automaatti-asentoon. Protokollanumeron lisäksi on mahdollista antaa lisäparametriksi A-kirjain, joka aiheuttaa sen että ELM327 kokeilee aluksi numerolla määritettyä protokollaa ja jos sitä käyttäen yhteys ei onnistu, siirrytään automaatti- tilaan. ATSP-komennon lähettäminen ei saa vielä ELM327:aa kokeilemaan protokollan toimivuutta, vaan tämä tapahtuu vasta kun ensimmäinen OBD-komento lähetetään.

Protokollan valinnan jälkeen lähetetään ”0100”-komento, eli kysytään ajoneuvolta sen tukemia moodin 01 PID-numeroita. Tässä yhteydessä ELM327 valitsee käytettävän protokollan, joten on erityisen tärkeää että komennon valmistumista odotetaan.

ELM327 ilmoittaa protokollan etsimisestä viestillä ”SEARCHING…”. Kun protokol- la on löytynyt, saadaan vastaus alkuperäiseen kysymykseen heksadesimaalilukuina.

Koska kysyttiin moodin 01 tukemia PID-numeroita, vastaus on suunnilleen seuraavan muotoinen: 4100BE1FB810. Ensimmäinen tavu 41 merkitsee vastausta moodin 01 komentoon (01 + 40=41). Seuraava tavu toistaa kysytyn PID-numeron, eli tässä tapa- uksessa 00. Seuraavat 4 tavua (32 bittiä) ilmaisevat bitteinä tuetut PID-numerot väliltä 1-31. (ELM327 datalehti, 29.) Komentoon saapuvaa vastausta ei tässä yhteydessä tulki- ta lainkaan, mutta vastauksesta voidaan päätellä että yhteys toimii ja protokolla on valit- tu onnistuneesti.

Koska tässä vaiheessa on yhteys OBD-järjestelmään muodostettu, voidaan ELM327:lta kysyä käytetty protokolla. Protokollaa kysytään ATDP-komentoa käyttäen. Komento vastaa sanallisesti valitun protokollan, sekä tiedon siitä onko protokolla valittu käsin vai haettu automaattisesti. Sovellus ei tarvitse tietoa protokollasta vielä mihinkään, joten tieto ainoastaan näytetään käyttäjälle.

Kaikki alustukset on nyt tehty, joten OBDInterface-luokassa siirrytään silmukkaan jos- sa lähetetään OBD-järjestelmään jatkuvasti anturien arvoja kyseleviä komentoja. Silmu- kassa käydään läpi Gauge-olioista muodostettu taulukko. Gauge-oliolta kysytään (isEnabled()-metodilla) onko kyseinen mittari asetettu asetuksissa päälle. Jos mittari on

(31)

kan kierroksella päivitetään laskuria jota käytetään päivitystarpeen määrittämiseen. Päi- vitystarve selvitetään laskemalla laskurista jakojäännös päivitysnopeus-luvulla. Jos päivi- tysnopeusluku on esimerkiksi 5, päivitetään mittaria joka viidennellä silmukan suoritus- kerralla.

Mittarin päivitys tapahtuu lähettämällä OBD-järjestelmään luettavaa tietoa vastaava moodin 01 PID-numero. Esimerkiksi moottorin jäähdytysnesteen lämpötila voidaan lukea lähettämällä komento 0105, jossa 01 on moodi ja 05 PID. Mittareihin liittyvät PID-numerot on määritelty gauges.xml-tiedostossa. Lähetetyn komennon jälkeen jää- dään odottamaan vastausta, joka tulkitaan gauges.xml-tiedostossa määriteltyjen sääntö- jen mukaan, jonka jälkeen mittari päivitetään setValue()-metodia käyttäen. Gauges.xml- tiedoston rakenne on kuvattu tarkemmin luvussa 4.2.

4.6 Sovelluksen käyttöliittymä

Sovellus käynnistyy suoraan näkymään, jossa käyttäjälle näytetään asetuksissa päälle asetetut mittarit. Kuviossa 8 on esitetty sovelluksen päänäkymä kahdella mittarilla. Näy- tettävät mittarit sovitetaan mahdollisimman suurina käytettävissä olevaan tilaan. Jos asetuksissa on asetettu yhteyden muodostus automaattiseksi, yrittää sovellus heti käyn- nistyttyään muodostaa yhteyden OBD-järjestelmään.

Kuvio 8. Sovelluksen perusnäkymä

Perusnäkymän oikeassa yläkulmassa on kolmen pisteen kuvake, jota painamalla aukeaa sovelluksen valikko. Valikon kautta on mahdollista päästä sovelluksen asetuksiin. Va-

(32)

likko-kuvakkeen vieressä on connect-painike, jota painamalla käynnistetään yhteyden muodostus OBD-järjestelmään manuaalisesti.

Sovelluksessa on otettu huomioon mahdollinen laitteen kääntäminen pysty- ja vaaka- asentojen välillä. Androidin näkymässä pysyvät tietyt komponentit tietyllä paikalla riip- pumatta näytön asennosta, esimerkiksi sekä Androidin, että sovelluksen yläpalkit pysy- vät aina näytön ylälaidassa. Tämä aiheuttaa sen, että sovelluksen käyttöön annettu tila muuttuu hieman orientaation mukaan. Kuviossa 9 on havainnollistettu näytön kääntä- misen vaikutus mittarien asetteluun. Pystyasennossa mittareita mahtuu kolme näytön pitkälle sivulle, kun taas vaaka-asennossa niitä mahtuu neljä. Vaaka-asennossa pitkä sivu on pysty-asentoa pidempi, koska ainoastaan navigaationapit lyhentävät pitkää si- vua. Koska vaaka-asennossa joudutaan mittarit piirtämään lyhyen sivun lyhyyden takia hieman pystyasentoa pienempinä, mahtuisi samankokoisia mittareita näytölle vielä kolme lisää, kun taas pystyasennossa enää vain yksi lisämittari mahtuisi näytölle.

Kuvio 9. Näytön kääntämisen vaikutus

Koska työn lähtökohtana oli, että ajoneuvon kuljettaja havainnoisi moottorissa tapah- tuvat poikkeamat, on mittareihin rakennettu taustavärin vaihtuminen raja-arvojen ylit- tyessä. Kuviossa 10 on esitetty mittari normaalitilassa, mittari raja-arvojen ylittyessä punaisella taustavärillä, sekä ajoneuvon oma lämpötilamittari. Ajoneuvon mittari on

(33)

(kuviossa kaksi oikeanpuoleisinta) ilmaisevat siis samaa lämpötilaa. Kuviosta voidaan myös havaita ajoneuvon oman mittarin epätarkkuus verrattuna sovelluksen näyttämään tietoon.

Kuvio 10. Mittaristosovellus verrattuna ajoneuvon mittariin

Sovelluksesta poistutaan painamalla Android-käyttöliittymän paluu-painiketta vasem- massa alakulmassa. Sovelluksesta poistuttaessa suljetaan Bluetooth-yhteys ja lopetetaan tiedonsiirtoa varten käynnistetyt taustaprosessit.

(34)

5 Mittaristosovelluksen testaus ja julkaisu

Mittaristosovellusta on kehitystyön aikana testattu sekä ajoneuvossa, että OBDsim- simulaattorilla. Koska ajoneuvoissa käytettäviä protokollia on useita, päätettiin sovellus- ta testata myös useammissa ajoneuvoissa ja tehdä testaustuloksista pöytäkirja. Testauk- sen jälkeen ryhdyttiin valmistelemaan sovelluksen julkaisemista.

5.1 Sovelluksen testaus

Kun kehitettävä sovellus toimi simulaattorin kanssa ja yhden ajoneuvon kanssa ongel- mitta, päätettiin sovellusta testata hieman laajemmin eri merkkisissä ajoneuvoissa. Kos- ka sovellus toimii vain OBD-järjestelmän sisältävissä ajoneuvoissa, oli luontevaa valita testauskohteiksi sellaisia ajoneuvoja joista tiedettiin DLC-liitin löytyvän.

Testauksen alussa sovitin asetettiin ajoneuvon DLC-liittimeen ja ajoneuvo käynnistet- tiin, jonka jälkeen mittaristo-sovellus käynnistettiin mobiililaitteessa. Kun sovellus sai yhteyden ajoneuvoon, se raportoi löytämänsä yhteensopivan OBD-protokollan, joka kirjattiin ylös. Seuraavaksi seurattiin sovelluksen näyttämiä tietoja ja niiden käyttäyty- mistä, mm. lämpötilojen nousua ja loogisuutta havainnointiin ja kierrosluvun reagointia kaasun painallukseen kokeiltiin. Ajoneuvolla ajamista ei koettu testauksen kannalta tar- peelliseksi, mutta osalla ajoneuvoista kuitenkin ajettiin pieni lenkki nopeustiedon toi- minnan varmistamiseksi. Taulukossa 1 on lueteltu testatut ajoneuvot, niiden tukema protokolla, tieto sovelluksen toiminnasta ja mahdollisia huomioita.

(35)

Taulukko 1. Sovelluksen testaukseen käytetyt ajoneuvot

Auto OBD-

protokolla

Toimivuus Huomiot

Ford Kuga 2008 2.0 Diesel

CAN Toimii Polttoaineen määrä näkyy.

VW Golf 2004 Diesel CAN Toimii Hetkittäin kierrosluku

”pomppi”

Nissan Primera 2006 1.8 Bensa

ISO9141-2 Toimii

Fiat Stilo 2002 1.6 Bensa

ISO14230-4 Toimii

Renault Megane 2002 1.4 Bensa

ISO14230-4 Toimii Tietojen päivitys nopean tuntuista

VW Transporter 2009 TDI

CAN Toimii Kaasuläpän asento 94%

tyhjäkäynnillä?

VW Golf 2.0 1999 Ei toimi

Skoda Octavia 2001 Toimii

Citroen Xsara 1999 Ei toimi

Vaikka tiedossa olikin, että EOBD on ollut Euroopassa pakollinen vasta vuodesta 2001 lähtien, testattiin ihan mielenkiinnosta sovellusta kahdessa vuonna 1999 valmistetussa autossa (VW Golf 2.0 ja Citroen Xsara), koska molemmista EOBD:n käyttämä DLC- liitin löytyi. OBD-sovittimeen syttyi virtavalo normaalisti ja sovelluksella saatiin yhteys sovittimeen, mutta yhteensopivaa protokollaa ei löytynyt.

OBD-järjestelmän raportoimissa tiedoissa oli eroja, joistain autoista saatiin enemmän tietoja kuin toisista, mutta kaikista joissa laitteisto toimi saatiin vähintäänkin moottorin kierrosluku, jäähdytinnesteen lämpötila, imuilman lämpötila ja ajoneuvon nopeus. Jäl- jellä olevan polttoaineen määrän raportoi ainoastaan Ford Kuga. VW Golfissa jostain syystä sovelluksessa näytetty kierrosluku muuttui välillä hetkeksi noin kaksinkertaiseksi oikeaan nähden ja palautui heti normaaliksi. Koska tällaista virhettä ei muissa autoissa tapahtunut, arvioitiin virheellisen tiedon tulevan auton moottorinohjaukselta asti. Tark-

(36)

kailemalla OBD-järjestelmältä saapuvaa tietovirtaa saataisiin täysi varmuus siitä, onko vika ajoneuvossa vai sovelluksessa. Tällaiseen kokeiluun ei tämän auton kohdalla kui- tenkaan nyt ollut mahdollisuuksia.

5.2 Sovelluksen julkaiseminen

Android-alustalle tehdyn sovelluksen julkaiseminen ja mahdollinen myynti on helpointa Google Play -kaupassa. Kauppa löytyy osoitteesta https://play.google.com. Verkon lisäksi Google Play on yleensä esiasennettuna sovelluksena Android-pohjaisissa laitteis- sa.

Sovellusten julkaisemiseksi tarvitaan kehittäjätili (engl. developer account). Kehittäjätili voidaan yhdistää johonkin olemassa olevaan Google-tiliin tai sitä varten voidaan luoda kokonaan uusi tili. Kehittäjätilin luominen on maksullista ja 25 USD maksu veloitetaan tilin luomisen yhteydessä luottokortilta. Maksullisuutta Google perustelee sillä, että näin saadaan Google Play kauppa pysymään siistimpänä ja siellä julkaistavat sovellukset tur- vallisempina. (Google Play 2013.)

Sovelluksen julkaiseminen osoittautui yllättävän helpoksi, Google Play–kauppa opastaa käyttäjää julkaisemisessa askel askeleelta. Sovellus täytyi viedä Eclipsestä export-

komennolla Android Application-muotoon, APK-paketiksi. Paketti lähetetään verk- kosivuston kautta järjestelmään, jossa sen yhteensopivuus eri laitteistojen kanssa var- mistetaan. Kehittäjälle ilmoitetaan, mikäli sovellus havaitaan epäyhteensopivaksi jonkin laitteen kanssa.

APK-paketin lähettämisen jälkeen on täytettävä sovelluksen perustiedot, jotka tulevan aikanaan näkymään Google Play-kaupassa sovelluksen kohdalla. Pakollisia tietoja ovat sovelluksen nimi ja kuvaus, sovelluksen tyyppi, kategoria ja jokin kehittäjän yhteystieto.

Lisäksi sovelluksesta täytyy lähettää kuvaruutukaappaus, mielellään useampia ja korkea- laatuinen kuvake. Sovelluksen sisältämälle sisällölle täytyy myös antaa luokitus sen mu- kaan sisältääkö sovellus aikuisille suunnattua sisältöä. Perustietojen lisäksi täytyy valita halutaanko sovellus jakaa ilmaiseksi vai myydäänkö sovellusta.

(37)

Google Play kauppa tarjoaa kehittäjälle tilastotietoa sovelluksen asennuksista, sen saa- mista arvioista ja muun muassa sovelluksen kaatumisista, sekä vastaamattomuuksista.

Jos sovellus on myynnissä, tarjotaan kehittäjälle luonnollisesti raportteja myyntitulok- sesta.

Sovellusta lähetettäessä Google Play -kauppaan sivustolla ilmoitettiin mahdollisesti jopa 7 tunnin viiveestä sovelluksen ilmestymisestä käyttäjien ladattavaksi, mutta tällä kertaa sovellus oli ladattavissa kaupasta jo noin 1,5 tunnin päästä julkaisemisesta. Sovellus on julkaistu Google Play -kaupassa mittaristo-nimellä ja on vapaasti kaikkien ladattavissa ilmaiseksi.

(38)

6 Yhteenveto

Android-alustan valitsin ensisijaisesti sen avoimuuden takia. Muina valintakriteereinä olivat alustan suosio ja alustaa käyttävien laitteiden saatavuus. Vaihtoehtoina olivat Ap- plen iOS tai Microsoftin käyttöjärjestelmät. iOS on rajattu ainoastaan Applen valmis- tamiin tuotteisiin, mutta on melko suosittu silti. Microsoftin käyttöjärjestelmällä taas on niin pieni osuus markkinoista, ettei se tuntunut mieleiseltä vaihtoehdolta.

Lyhyen markkinakatsauksen jälkeen päädyin hankkimaan Android-käyttöjärjestelmällä varustetun tabletin, jolle ryhdyin mittaristosovellusta kehittämään. Android ei ollut mi- nulle aiemmin tuttu, eikä oikeastaan mobiililaitteille ohjelmointikaan, lukuun ottamatta joitain pieniä kokeiluja Symbian-käyttöjärjestelmälle.

Tämän opinnäytetyön tuotoksena syntynyt sovellus on osoittautunut testeissä hyvin toimivaksi, eikä pienten alkukankeuksien jälkeen ole mitään ongelmia havaittu. Sovel- luksen itsensä ei tarvitse tukea kaikkia mahdollisia ajoneuvoista löytyviä protokollia, riittää että sovellus käyttää ELM327-piiriä tarkasti datalehdellä kuvatulla tavalla, piiri hoitaa ajoneuvon kanssa kommunikoinnin kaikilla protokollilla.

Android-ohjelmoinnin opettelun aloitin katselemalla opetusvideoita Youtubesta. Ha- kusanoilla ”Android programming tutorial” löytyy videoita runsaasti ja ensimmäisenä katselin tgent07-nimimerkillä esiintyvän käyttäjän ”How to Program for Android” vi- deot läpi. Opetusvideot ovat erittäin käteviä opiskelussa ja tuntuvat ainakin minulle soveltuvan hyvin. Videoiden katselu vastaa jossain määrin normaalia luokassa tapahtu- vaa opetusta, molemmissa tavoissa luennoitsija opastaa esimerkein kuinka asiat teh- dään. Videossa on se etu, että voit aina pysäyttää videon hetkeksi kokeillaksesi opetet- tuja asioita heti, ilman että jäät heti jälkeen opetuksessa. Toisaalta voit myös kuunnella jonkin asian toiseen kertaan jos et heti ensimmäisellä kerralla saanut juonesta kiinni.

Opettajalta kysyminenkin tuntuu monien opetusvideoiden tekijöiden kanssa onnistu- van kommentointi-ominaisuuden kautta, katsojien kysymyksiin näytettiin vastaavan hämmästyttävän nopeasti.

(39)

6.1 Jatkokehitys

Jatkokehitys tulee keskittymään mittaristosovelluksen yhdistämiseen kilpa-autojen moottorinohjauksiin. Kilpa-autoissa käytetään usein kolmannen valmistajan mootto- rinohjausta ja oman kokemukseni mukaan suurimmassa osassa ohjainlaitteita on oh- jelmointia varten perinteinen RS232-sarjaportti. RS232-sarjaporttiin on saatavilla Blue- tooth-muuntimia, joten teknisesti yhdistäminen on helppoa. Koska ohjelmistokin kommunikoi jo tässä kehitysvaiheessa sarjaliikenteellä moottorinohjauksen kanssa, ei ohjelmistoonkaan tarvita suuria muutoksia.

Sovelluksen käyttöliittymää voisi jatkossa kehittää tukemaan paremmin kosketusnäytön mahdollisuuksia. Mittaritauluja voisi pystyä siirtämään sormella vetämällä ja mittaritau- lujen koon muuttaminen voisi tapahtua ns. pinch-otteella, jota mobiililaitteissa käyte- tään yleisesti koon muuttamiseen. Tällaiset nykyaikaisen käyttöliittymän ominaisuudet tosin todennäköisesti rajoittuisivat ainoastaan sovelluksen asetusten muuttamiseen kun auto on parkissa. Ajon aikana kuljettajalla ei todennäköisesti ole aikaa säätää sovelluk- sen asetuksia, eikä kosketusnäyttö varmaankaan toimi ajokäsineiden kanssa kunnolla.

6.2 Projektin tulokset

Koen projektin onnistuneeksi, koska tavoitteena oli saada kehitettyä Androidille OBD- järjestelmään kytkeytyvä mittaristosovellus ja julkaista se Google Play -kaupassa. Mo- lemmat tavoitteet saavutettiin.

Olen opinnäytetyötä tehdessäni oppinut paljon lisää mobiililaitteiden ohjelmoinnista.

Java-ohjelmointikieli oli minulle opiskelujeni kautta ennestään tuttu, mutta Android- sovellusten ohjelmointi oli minulla täysin uutta. OBD-järjestelmä ja siihen kytkeytymi- seen mahdollistavat sovittimet olivat minulle ennestään tuttuja harrastusten kautta, mutta en ollut koskaan näin perusteellisesti perehtynyt järjestelmään liittyviin protokol- liin.

Opinnäytetyössä hankittu kokemus on erittäin hyödyllistä, enkä usko nyt valmistetun sovelluksen jäävän viimeiseksi Android-projektikseni. Mielenkiintoista olisi myös ko- keilla muita kehitysympäristöjä Eclipsen lisäksi.

(40)

Lähteet

Android 2013a. Google. About Android. Luettavissa: http://www.android.com/about.

Luettu 5.5.2013.

Android Developers 2013a. Google. Android Developers, App Framework. Luettavis- sa: http://developer.android.com/about/versions/index.html. Luettu: 5.5.2013.

Android Developers 2013b. Google. Android Developers, Bluetooth. Luettavissa:

http://developer.android.com/guide/topics/connectivity/bluetooth.html. Luettu:

5.5.2013.

Android Developers 2013c. Google. Android Developers, View. Luettavissa:

http://developer.android.com/reference/android/view/View.html. Luettu: 5.5.2013.

Android Developers 2013d. Google. Android Developers, Application Fundamentals.

Luettavissa: http://developer.android.com/guide/components/fundamentals.html.

Luettu: 11.5.2013.

Android Developers 2013e. Google. Android Developers, Activity. Luettavissa:

http://developer.android.com/reference/android/app/Activity.html. Luettu:

11.5.2013.

Android Developers 2013f. Google. Android Developers, Workflow. Luettavissa:

http://developer.android.com/tools/workflow/index.html. Luettu: 12.5.2013.

Android Developers 2013g. Google. Android Developers, Tools. Luettavissa:

http://developer.android.com/tools/help/adt.html. Luettu: 19.5.2013.

Android Developers 2013h. Google. Android Developers, AndroidManifest.xml. Luet- tavissa: http://developer.android.com/guide/topics/manifest/manifest-intro.html.

Luettu: 19.5.2013.

(41)

Android Developers 2013i. Google. Android Developers, Services. Luettavissa:

http://developer.android.com/guide/components/services.html. Luettu: 19.5.2013.

Android Developers 2013j. Google. Android Developers, IBinder. Luettavissa:

http://developer.android.com/reference/android/os/IBinder.html. Luettu: 20.5.2013.

Android Developers 2013k. Google. Android Developers, Parcel. Luettavissa:

http://developer.android.com/reference/android/os/Parcel.html. Luettu: 20.5.2013.

Android Developers 2013l. Google. Android Developers, GridLayout. Luettavissa:

http://developer.android.com/reference/android/widget/GridLayout.html. Luettu:

20.5.2013.

Android Developers 2013m. Google. Android Developers, Ice Cream Sandwich. Luet- tavissa: http://developer.android.com/about/versions/android-4.0-highlights.html.

Luettu: 20.5.2013.

Android Developers 2013n. Google. Android Developers, SDK. Luettavissa:

http://developer.android.com/sdk/index.html. Luettu: 20.5.2013.

Android Developers 2013o. Google. Android Developers, Tools. Luettavissa:

http://developer.android.com/tools/index.html. Luettu: 20.5.2013.

Bluetooth 2013. Bluetooth-ryhmän virallinen sivusto. SPP-profiili. Luettavissa:

https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=260866&

vId=290097. Luettu: 18.5.2013.

ARC Electronics 2013. RS232 Data Interface. Luettavissa:

http://www.arcelect.com/rs232.htm. Luettu: 19.5.2013.

Darcey, L., Conder, S. 2012. Android Wireless Application Development Volume 1:

Android Essentials, third edition.

Viittaukset

LIITTYVÄT TIEDOSTOT

– Jos kyselyn kohteiden poiminnassa on käytetty satunnaisotantaa, kyselyn tuloksiin sisältyvälle epävarmuudelle ja satunnaisuudelle voidaan muodostaa tilastollinen malli,

Rakkaus äitiä kohtaan ei häviä, mutta Alexin on pakko kohdata se tosiasia, että vielä aikuisena äidin käytös vaikuttaa häneen: äiti nostattaa hänessä edelleen sen lapsen

Tämä näkyvien keskittyminen yhden näkyvän ympärille, tämä ruumiin ryöpsähtäminen kohti asioita, joka saa ihoni värähtelyn muuttumaan sileydeksi ja karheudeksi, joka

Kuten tunnettua, Darwin tyytyi Lajien synnyssä vain lyhyesti huomauttamaan, että hänen esittämänsä luonnonvalinnan teoria toisi ennen pitkää valoa myös ihmisen alkuperään ja

Se ei kuitenkaan ole sama kuin ei-mitään, sillä maisemassa oleva usva, teos- pinnan vaalea, usein harmaaseen taittuva keveä alue on tyhjä vain suhteessa muuhun

Severinon mukaan tämä on länsimaisen ajat- telun suuri erhe, jossa kuvitellaan, että jokin oleva voisi olla rajallinen, katoava ja loppuva ettelee sellaisia suomenkielisiä

Niiden luonne vain on muuttunut: eleet ja kasvottainen puhe ovat vaihtuneet kirjoitukseksi ja ku- viksi sitä mukaa kuin kirjapainotaito on kehittynyt.. Sa- malla ilmaisu on

Hyvinvointiyhteiskunnan kestävyyttä painot- tavissa kannanotoissa nousee esiin, että talouden kasvupotentiaaliin tulee panostaa nyt eikä myö- hemmin, ja että niin tulee