Harjoitustyö 2023¶
Huom! Materiaali päivittyy kurssin aikana lisäten selvennyksiä sisältöön Myös kurssin edetessä lisäämme vinkkejä ongelmakohtiin ja muuta tietoa. Joten tarkistakaa sivun sisältö aika ajoin!
Päivitetty viimeksi: 20.11.2023 Updated deadline
TAMAGOTCHI¶
Tehtävänä harjoitustyössä on toteuttaa oma virtuaalinen lemmikki mukaillen 1990-luvulla maailmanlaajuista suosiota lasten parissa saavuttanutta Tamagotchia (kts. video virtuaalilemmikki-ilmiöstä). Idean kehittäjät voittivat vuonna 1997 taloustieteen Ig Nobel-palkinnon perusteluina "for diverting millions of man-hours of work into the husbandry of virtual pets".
Kurssilla harjoitustyöryhmien oma Tamagotchi elelee kurssin IoT-taustajärjestelmässä (engl. backend) palvelimella ja sen kanssa toimitaan (ruokitaan, leikitään, hoivataan, jne) suorittamalla liikkeitä SensorTagilla. Liikkeet tulkitaan SensorTagin anturidatasta ja niitä vastaavat komennot lähetetään taustajärjestelmälle, jossa lemmikki niihin reagoi. Lemmikki myös tarpeen tullen viestittelee takaisin laitteeseen.
Tamagotchin elonpolku¶
Kuten kaikki muutkin lemmikit, virtuaalilemmikki Tamagotchi on pidettävä tyytyväisenä vastaamalla sen tarpeisiin, eli esimerkiksi ruokkimalla, kuntoiluttamalla ja silittämällä sitä. Harjoitustyössä Tamagotchin kanssa vuorovaikutetaan taustajärjestelmän selainpohjaisen käyttöliittymän kautta, josta on alla kaaviokuva.
Vuorovaikutus Tamagotchin kanssa käynnistyy aina alusta kun sivu aukaistaan selaimessa. Ideana työssä on, että lemmikki tarvitsee jatkuvaa vuorovaikutusta, jota kuvaa käyttöliittymässä olevat kolme palkkia (asteikko 1-10). Jokaisessa palkissa lemmikin tyytyväisyys tippuu noin 10 sekunnin välein yhden pykälän. Jos jokin palkeista tippuu nollaan, lemmikki karkaa omistajaltaan. SensorTagilla tehdyillä liikkeillä lemmikki pidetään tyytyväisenä lähettämällä anturidatasta tunnistetut komennot taustajärjestelmään. SensorTagin kolme erilaista liikettä on kartoitettu kullekin kolmelle komennolle, jotka voidaan lähettää Tamagotchille.
Vaatimukset¶
Työssä SensorTag-laitteeseen tehdään sovellus, jossa on oltava seuraavat ominaisuudet:
- Ohjelmassa tulee olla minimaalinen käyttöliittymä. Toteutus esim. painonapeilla, ledeillä tai äänimerkeillä.
- Ohjauskomennot tulkitaan ensisijaisesti kiihtyvyys- ja asentoanturilla (MPU9250) kerätystä datasta.
- Laitetta liikutetaan eri suuntiin (esimerkiksi ylös, alas, vasemmalle ja oikealle) ja niistä tulkitaan liike vaikkapa alla kuvatuilla menetelmillä.
- Liikkeeseen voi liittää painonapin painalluksia, ym ohjelman tilatietoa, joiden avulla voi toteuttaa monimutkaisempia komentoja.
- Liikettä voi toteuttaa halutessaan myös kolmiulotteisesti useampaan suuntaan.
- Ohjelman on lähetettävä viesti taustajärjestelmälle kun komento on tunnistettu.
- Ohjelman on informoitava käyttäjää tunnistetusta komennosta esimerkiksi äänimerkillä tai ledillä.
- Ohjelman on vastaanotettava viestejä taustajärjestelmältä ja reagoitava niihin.
- Ohjelman toteutuksen on perustuttava tehtäväpohjaiseen toteutukseen SensorTagin RTOS:lla sekä tilakoneeseen.
IoT-taustajärjestelmä¶
Järjestelmän yleiskatsaus¶
Taustajärjestelmä on käytettävissä selaimella julkisessa Internetissä ja siihen ollaan yhteydessä työasemaluokissa tai etänä kotona erillisen yhdyskäytävästä ja rajapinnasta koostuvan yhdyskäytäväohjelmiston (engl. gateway) avulla. Taustajärjestelmä on julkaistu Internetissä ja Tamagotchi-peliin pääsee täältä.
Yleinen järjestelmän arkkitehtuuri. Backend-linkki.
Taustajärjestelmän ja gatewayn ohjeistus päivittyy vielä, mutta se on jo käytössä vapaasti.
Taustakäyttöliittymä¶
- Ensimmäisellä käyttökerralla tulee järjestelmään rekisteröityä käyttöliittymässä olevasta linkistä
Register
. - Käyttäjätunnus on ryhmän SensorTagin numero nelinumeroisena ja alkaa aina kolmella. Esimerkiksi jos laitteen numero
35
, tulee siitä käyttäjätunnus3035
. - Salasana. Älkää käyttäkö tässä mitään oikeaa salasanaa!! Oletus on, että taustajärjestelmästä voi tunnukset ja tiedot hävitä milloin vain, joten siihen ei pidä luottaa! Tästä syystä järjestelmään ei tallenneta mitään käyttäjätietoja.
- Rekisteröityminen hoituu napista Register, jonka jälkeen ei (vielä) tule mitään ilmoitusta.
- Järjestelmään voi tämän jälkeen kirjautua sisään etusivulta yo. tunnuksella ja salasanalla.
- Etusivulla näkyy Tamagotchi-peli, jonka voi käynnistää napista Create new Tamagotchi ja sen jälkeen lähettämällä viestejä SensorTagilla.
- Vasemmassa laidassa näkyy myös välilehti
Data
, jonne voidaan lähettää SensorTagilta raakadataa eri antureilta. Tätä voi käyttää myös anturidatan visualisointiin. Viestiformaatti kerrotaan alla ja GitHub-sivulla.
Taustaprotokolla¶
Tunnistettavia liikkeitä ja niistä seuraavia komentoja on tarpeisiin liittyen kolme. Lisäksi ohjelman pitää ottaa vastaan yksi viesti lemmikiltä. Komennot ovat ASCII-muotoisia CSV-merkkijonoja:
EAT:n
EXERCISE:n
PET:n
ACTIVATE:n;n;n
tällä komennolla toiminto laitteessa nostaa kaikkia palkkeja EAT, EXERCISE, PET..- Näissä parametri
n
tarkoittaa montako pykälää (1-10) lemmikin tyytyväisyys kasvaa per tunnistettu liike. - Mikäli jokin palkki tippuu arvoon 2, hakee lemmikki huomiota lähettämällä viestin
id,BEEP
. Esimerkiksi tämä viesti on ilman etunollia100,BEEP
, kun käyttäjän SensorTagin ID on 0100. Tähän viestiin on ohjelmassa reagoitava tuottamalla SensorTagin kaiuttimesta (itse toteutettu) äänimerkki.
Esimerkiksi taustajärjestelmälle voisi SensorTagilla 3 sekuntia kestäneen ylöspäin-liikkeen tunnistamisen jälkeen lähettää komennon
EXERCISE:3
, joka nostaa lemmikin tyytyväisyyttä liikunnan suhteen kolme pykälää. Samassa viestissä voi lähettää useita eri komentoja pilkulla eroteltuna. Esimerkiksi viestiä EAT:2,PET:3,ACTIVATE:1;2;1
tulkitessa arvot summataan, eli viesti on sama kuin EAT:3,EXERCISE:2,PET:4
.Lisäominaisuus: Käyttöliittymässä on kaksi paikkaa omalle, ts. opiskelijoiden vapaasti itse päättämälle, lemmikin ominaisuudelle tai tiedolle, joka voi vaikuttaa esimerkiksi komentojen tulkintaan. Esimerkkinä SensorTagin valoisuusanturilla voidaan tulkita, onko pimeä tai lämpötila-anturilla mitata ympäristön lämpötila. Nämä tiedot voisivat vaikuttaa komentojen tulkintaan laitteessa. Tässä saa vapaasti ideoida omaan työhön.
Oman tiedon välittäminen tapahtuu viestissä (esimerkiksi)
MSG1:Cold
tai MSG2:Sunny
. Tässä tunnuksen MSG1/2
kaksoispisteen jälkeinen merkkijono tulostuu käyttöliittymässä merkittyyn kohtaan sellaisenaan ja voi tietysti sisältää myös numerotietoa.Lisäominaisuus: Taustajärjestelmään on myös mahdollista lähettää kerättyä anturidataa "raakadatana" (sellaisenaan numeroarvoina) CSV-muodossa ja visualisoida sitä selaimessa. Lisää tietoa täältä (katso README.md).
Näiden lisäominaisuuksien toteuttaminen työhön on vapaaehtoista, kts. alla harjoitustyön pisteytys.
UART Gateway¶
UART yhdyskäytäväohjelma on toteutettu Node.js-ohjelmistolla ja se kytkee SensorTagin UART:n kautta julkisessa Internetissä olevaan taustajärjestelmään. Kurssin virtuaalikoneissa on asennettu UART yhdyskäytäväohjelma. Voit myös asentaa sen omalle tietokoneellesi, jos haluat.
Huomaa että ohjelmaa on myös mahdollista käyttää ilman että se kytkeytyy taustajärjestelmään Internetissä.
Asennus (oma tietokone)¶
Asennusvaiheet: Ohjelma voi ladata seuraavasta GitHub-projektista. Asennusohjeet löytyvät README.md tiedostosta
Käyttö¶
Asennuksen jälkeen testatkaa toimivuus seuraavasti:
- Kytke SensorTag kotikoneen USB-porttiin.
- Käynnistä ohjelma komentokehotteessa komennolla
node gateway.js
. - Nyt ohjelman pitäisi automaattisesti yhdistyä SensorTagin UART-sarjaporttiin, josta tulee ruudulle ilmoitus
UART connection opened.
- Ohjelman pitäisi automaattisesti tunnistaa SensorTag, mutta jos näin ei käy, portin voi valita käsin syöttämällä sitä vastaavan numeron.
- Mikäli rajapinta yhdistää automaattisesti väärään porttiin, automaattisen portinvalinnan voi estää käyttämällä
node gateway.js -m
. - Tämän jälkeen ohjelma kytkeytyy netin kautta taustajärjestelmään, josta tulee viesti
Connected to Backend server.
- Ohjelmaa voi käyttää ilman, että se kytkeytyy nettiin komennolla
node gateway.js -o
. Tällöin viestintää voi huoletta harjoitella yksityisesti.
Muita komentoja:
- Yhteyden toimivuutta voi testata lähettämällä laitteelle merkkijonon
ping
, johon yhdyskäytävä vastaa viestilläpong
. Ruudulla näkyisi tällöin seuraavaa:
3035> ping Sent 'pong' to 0x3035
- Kun SensorTag on yhdistetty ohjelmaan, laitteelle voi lähettää mitä tahansa viestejä kirjoittamalla merkkijonon komentokehotteeseen ja painamalla Enter.
- Jos UART-yhteys SensorTagiin katkeaa, sen voi luoda uudestaan kirjoittamalla komennon
.reconnect
. - Muita käyttöliittymän komentoja löytyy komennolla
.help
.
Bugiraportteja, lisätoiminto- ja korjausehdotuksia rajapintaan otetaan luonnollisesti vastaan kurssin sähköpostilistalla, chatissa sekä harjoituksissa.
SensorTagissa¶
Yhdyskäytäväohjelmaan voidaan olla SensorTagista yhteydessä samoilla UART-parametreillä mitä käytettiin laboratorioharjoituksessa eli "9600,8n1".
Viestien lähettäminen:
- UARTin kautta SensorTagista lähetettyjen viestien (=merkkijonojen) täytyy päättyä nollatavuun '\0'.
- Viestien tulee noudattaa tarkasti allaolevaa CSV-muotoa:
- Ensin laitteen osoite (tarvitaan jotta ohjelma kytkee oikean SensorTagin taustajärjestelmään). Esimerkiksi kenttä
id:35
vaaditaan, jos laitteen nettiosoite/boksin numero on 35. - Tämän jälkeen seuraavat viestikentät voivat olla mitä tahansa Tamagotchi-komentoja ja niitä voi olla useita pilkulla erotettuna. Esimerkiksi
EAT:8,ping
. - Tällöin kokonainen lähetettävä viesti (=merkkijono) olisi
id:21,EAT:8,ping
. - Jos viestimuotoa ei noudata tarkasti, ohjelma valittanee virheestä.
Viestien vastaanottaminen SensorTagille:
- Ohjelma lähettää taustajärjestelmästä/käyttäjän kirjoittamat viestit UARTin kautta aina 80 tavun pituisina nollaan ('\0') päättyvinä merkkijonoina.
- Viestit voidaan siis SensorTagin päässä vastaanottaa esimerkiksi merkki kerrallaan merkkiin '\0' asti, tai lukemalla vastaanottopuskuriin keskeytyksenkäsittelijällä tai manuaalisesti 80 merkkiä.
Anturidata harjoitustyössä¶
Seuraavassa ohjeita miten anturidatan keräämiseen ja tulkintaan pohjautuen kannattaa komentojen tulkinta toteuttaa ohjelmassa.
Ohjauskomentojen toteutus SensorTagin liikkeenä, sitä kädessä pitäen, on ryhmän itsensä vapaasti päätettävissä. Mahdollisia vaihtoehtoisia toteutustapoja ovat ainakin seuraavat:
- Laitteen liu'utus pöydänpintaa pitkin
- Laitteen kallistus ja/tai liike
- Laitteen hyppyytys (=käy välillä ilmassa) pöydänpintaa pitkin
- Laitteen liikuttelu ilman tukea "3D:nä" ilmassa.
Yleisiä ohjeita ohjauskomennon tulkitsemiseen:
- Kannattaa määrittää kuinka voimakkaasti ja kuinka pitkä ajallisesti yksi komento on.
- Esimerkiksi onko liike pieni nykäisy vai yhden sekunnin mittainen, hidas liike pöydän pinnalla valittuun suuntaan?
- Anturidatan keräystaskissa aikaväli, ts. kuinka usein anturilta kysytään dataa.
- Esimerkki: kerran sekunnissa ehkä liian hidas aikaväli laitteen liikkeelle, mutta entäpä jos dataa ottaa talteen 5 tai 10 kertaa sekunnissa?
- Ohjauskomennon tulkitsemiseen ei tarvitse toteuttaa kovinkaan hienostunutta algoritmia. Riittää, kun analysoi esimerkiksi kiihtyvyysarvojen muutoksia ajan funktiona. Kts esimerkkidata alla.
- Harjoitustyö ei edellytä lukiotasoa syvällisempää matematiikan osaamista, joten ohjauskomentojen tunnistusalgoritmin laatua ei arvostella. Tietysti saa toteutuksen tehdä itse niin hienoksi kun haluaa.
- Ohjelman tulee kuitenkin reaalimaailman testitilanteessa tunnistaa liikekomennot.
- Ohjauskomentojen ketjuttaminen on ok, eli jatkuvasta/pitkäkestoisesta liikkeestä voi tulkita useammankin komennon. Kts viestiprotokolla alla.
Komennon tulkitseminen¶
1. Työ kannattaa aloittaa siten, että kerää MPU9250-anturilla oman datasetin aikasarjana talteen, samalla kun käsin liikuttaa laitetta. Keräys kannattaa toteuttaa niin, että tekee vain yhden liikkeen kerrallaan ja tallentaa sen omaan tiedostoonsa.
- Mittaustuloksiin on syytä liittää aikaleima mukaan, jotta pystyy laskemaan ajallista kestoa.
- Anturi antaa kurssikirjastomme avulla kuusi eri mittausarvoa per datan kysely, jotka ovat:
- Kiihtyvyys (acceleration) x-, y- ja z-akselit, yksikkönä painovoima g
- Asentomuutos (gyroscope) x-, y- ja z-akseleilla, yksikkönä kulmanopeus
Kun dataa kerätään taulukkoon, saadaan lopputuloksena 7-ulotteinen taulukko. Taulukossa data saattaa näyttää esimerkiksi seuraavalta:
aika, acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z
0, 0.0029, -0.0063, -1.0115, 1.1215, -0.4578, 0.3204
11, 0.0133, 0.0291, -0.9753, 0.0229, -0.0458, -0.2060
19, 0.0028, 0.0964, -1.0406, 5.2948, -14.09, 19.0735
30, -0.085, 0.2474, -1.8069, -1.833, 0.0992, 15.4953
41, -0.20, 0.3864, -2.2000, -6.180, 29.9924, 70.5643
2. Tuloksena kerätystä datasta voidaan visualisoida eri akselien suhteen mitä datassa tapahtui minkäkin liikkeen / komennon suorituksen aikana, ja tätä kautta hahmottaa miten tunnistus kannattaisi tehdä ohjelmallisesti.
Visualisoimalla nähdään helposti siis millaista anturidata on komennon eri vaiheissa, kun laite liikkuu:
- Riittääkö pelkkä liike ja sen keston mittaaminen? Miten liike näkyy datassa?
- Pitääkö komennossa lähteä ja päätyä johonkin asentoon?
- Minkä verran "virhettä" (esim. liikettä muiden akselien suuntaan) komennon suorituksessa sallitaan?
- jne..
3. Datasetin keräämisen ja visualisoinnin jälkeen ohjauskomento voidaan tunnistaa datasta hyvinkin yksinkertaisesti:
- Liikkeen kesto eri akselien suhteen
- Valitun kynnysarvon ylitys/alitus jonkin akselin suhteen
- Aikasarjalle voidaan laskea erilaisia piirteitä kuten keskiarvo, varianssi, keskihajonta, ym, joilla voidaan erottaa komentoja toisistaan (ja halutessa hienosäätää komennon tunnistusta).
- Tästä voi olla myös hyötyä, jos haluaa ketjuttaa komentoja tai toteuttaa monimutkaisempia komentoja (niitä lisäpisteitä?)
- Koska anturidataa saadaan kolmella akselilla (x, y ja z), sitä voi myös käsitellä 2- tai 3-ulotteisena vektorina, jolla on esimerkiksi suunta ja pituus..
- Ihan mitä vaan matikankirjasta / netistä löytyy / tekoälykurssilla kerrotaan.
- Muistakaa mainita koodissa lähteet.
Valmista testidataa¶
Henkilökunta on kerännyt valmiiksi pienen testidata-aineiston erilaisista kädessä olevan laitteen liikkeistä, jota työssä voi käyttää alustavaan komennon tunnistamiseen. Tässä mainitut tavat liikuttaa laitetta eivät välttämättä ole se ainut, helpoin, saati paras tapa toteuttaa komentoja SensorTagilla.
Testidata on kerätty SensorTagin kiihtyvyysanturilla MPU9250. Tiedostoissa datan formaatti on
[aikaleima, acc_x, acc_y, acc_z, gyro_x, gyro_y, gyro_z]
. Data on mitattu siten, että laite on ollut liikkumatta paikallaan mittauksen alussa ja sitten on tehty liike ylös kahdella eri tavalla. Kuvissa data visualisoitu x, y, ja z-akseleille (eri väreillä) ajan suhteen sekä kiihtyvyys- (g) että asentoanturilla (kulmanopeus). 1. Anturidata laitteen ollessa liikkumatta paikallaan:
2. Anturidata, kun laitetta nopeasti nykäistään pöydällä suuntaan ylös kaksi kertaa:
3. Anturidata, kun laite nostetaan irti pöydältä ja siirretään suuntaan ylös:
Omaa testidataa¶
Omatoiminen testidatan keräys onnistuu helpoiten niin, että toteutatte SensorTagiin ihan aluksi erillisen datankeräystaskin erillisenä ohjelmana tai taskina, joka ihan vaan kerää MPU9250-anturin dataa taulukkoon valituin aikavälein. Lopuksi ohjelma tulostaa taulukon rivi riviltä CCS:n debug-ikkunaan, josta se on helppo copy & pasteta editoriin ja/tai tiedostoon. Datan voi visualisoida vaikkapa jollain Python-kirjastolla (köh köh matplotlib) tai ohjelmalla kuten gnuplot:lla tai M$ Excelillä.
Tärkeää omaa testidataa kerätessä on tehdä liike aina samalla tavalla, eli käyttäjä ja anturi samassa asennossa, jne, ja ehdottomasti vain yksi liike kerrallaan. Tämä sen takia että visualisoinnissa näkee selvästi miten datassa tapahtui. Lisäksi eri mittauksissa kerätty data on tällöin keskenään vertailukelpoista eri mittauksien välillä. Ja huomataan, että eri ihmisten kädenliike on yleensä niin erilainen, että esimerkiksi yo. testidata ei suoraan teidän omaan komennon tunnistukseen. Anturi on niin tarkka että pienetkin eroavaisuudet saadaan kiinni.
Vinkkejä harjoitustyöhön¶
Yllättäen moni asia on jo kerrottu ja kysymyksiin vastattu luentomateriaalissa. Materiaaliin kannattaa siis perehtyä kunnolla..
Harjoitustyön toteutusta kannattaa lähteä purkamaan Rakenteellinen ohjelmointi-lisämateriaalin avulla. Näin saadaan isokin ongelma palasteltua helpommin toteuttaviin osasiin.
- Hyvin suunniteltu on 90% tehty!
- Isohko virhe mitä voi tehdä on jättää asiat viimetinkaan ..aloittelija ei varmasti saa työtä viikossa tehdyksi!
- Kannattaa vilkaista mitä kaikkea toiminnallisuutta C-kielen standardikirjastot ja RTOS:n eri kirjastot tarjoavat valmiiksi. Valmiit kirjastot kun helpottavat ohjelmointia suuresti, liittyen esimerkiksi merkkijonojen käsittelyyn..
- Koodatessa voi olla hyödyllistä koodata vaikeat kohdat ensin pc:llä. Myös liikkeentunnistus-algoritmien tms testaaminen PC:ssä on kertaluokkaa helpompaa. Sitten kun koodi on toimivaa, sitten vasta toteutuksen voi siirtää laitteelle ja testata siinä.
- Kannattaa käyttää toistorakenteissa, ehtolauseissa, yms, välitulostuksia, joissa tulostaa konsoli-ikkunalle (System_printf(..) + System_flush(..)) muuttujien arvoja tms oleellista tietoa ohjelman etenemisestä. Tämä nopeuttaa merkittävästi virheiden metsästystä ohjelmasta.
- Tyyppiesimerkki ongelmasta, joka selviää nätisti välitulostuksilla on silmukkarakenteet, joissa tulostatte konsoli-ikkunaan joka iteraatiossa eri muuttujien arvot. Töissäkään pomo tuskin arvostaa, jos käytätte asioiden pähkäilyyn paljon aikaa, kun ne selviäisi hetkessä lisäämällä koodiin debuggitietoa..
- Tärkeää on muistaa, että jos jäätte jumiin, kysykää!! Kurssihenkilökuntahan on palkattu teidän avuksi..
Työkohtaisia vinkkejä¶
Päivitämme tänne vinkkejä sitä mukaan kun harjoitustyön toteutus etenee ja tiedämme lisää..
- Ohjelma on syytä jakaa taskeihin niin, että yhdessä on viestintä, toisessa näytön päivitys, kolmannessa sensoridatan lukeminen, jne.
- Käyttöliittymään kannattaa toteuttaa Komennon tunnistus päälle/pois-toiminto.
- Esimerkki MPU9250-anturin käytöstä löytyy Git-varastosta.
- Sensoridataa kannattaa tietysti kerätä taulukkoon, josta sitä on helppo käsitellä aikasarjana.
- Huomioikaa tässä taulukon koko tavuina mihin olette keräämässä dataa, jotta se mahtuu laitteen muistiin! Käytössä on noin 20kB muistia, jonne siis pitää kaiken muunkin tavaran mahtua.
- Anturidataa voi tarvittaessa siistiä (esimerkiksi poistaa kohinaa) vaikkapa laskemalla liukuvaa keskiarvoa tai muuta menetelmää käyttäen. Se harjoitustehtävä..
- Testidataan mittausajanhetken saa kysyttyä RTOS:n Clock-kirjaston funktiolla
Clock_getTicks()
. - Laitteen komponenttien alustuksia ei pidä laittaa
main
-funktioon vaan taskien alkuun. Tämä mm. siitä syystä, että työssä halutaan tehtäväpohjainen toteutus ja osa komponenteista tarvitsee RTOS:n toiminnallisuutta joka käynnistyy vasta main:n lopussa. - Luentomateriaalissa on esimerkki tilakoneesta, jota kannattaa soveltaa harjoitustyössä.. suora copy & paste SensorTagiin ei tietenkään toimi.
- Jos käytätte SensorTagia patterin kanssa / ilman USB-piuhaa) niin se patterihan kuluu loppuun. Varsinkin jos laitteen epähuomiossa jättää. Toteuttakaa koodiin virtanappi. Uuden patterin saa toki hakemalla harjoituksista.
- Syksyllä 2023 SensorTagin näytön käyttämistä harjoitustyössä mietitään, johtuen siitä ettei niitä välttämättä ole tarpeeksi kaikille ryhmille. Mikäli laitteet näyttöineen riittävät, niiden käyttö harjoitustyössä voidaan ottaa huomioon ja arvostelua muutetaan siltäosin. Opiskelijoille, joilla on laite ilman näyttöä, mietitään korvaava ratkaisu.
Kohti parempaa arvosanaa¶
Harjoitustyön pistemäärää voi nostaa toteuttamalla työhön lisätoiminnallisuuksia, joista alla esimerkkejä. Listaa täydennetään vielä:
- 1 pisteen ominaisuuksia: Käyttöliittymässä lisäjuttuja
- Käyttöliittymässä jonkinlainen menurakenne painonappeja ja äänimerkkejä käyttäen.
- Kannustetaan käyttäjää äänimerkeillä tai ledeillä.
- Käsitellään muiden sensorien dataa ja lähetetään taustajärjestelmälle sellaisenaan (kts. taustajärjestelmän käyttöliittymän kuvaus).
- Käyttöliittymän omat ominaisuudet (per toteutus).
- ...
- 2 pisteen ominaisuuksia: Monipuolista laitteen ominaisuuksien käyttöä
- Erilaisia monimutkaisempia liikkeitä käyttäen useita suuntia, eri antureita, painonappeja, tilatietoa, ym, liikkeiden tunnistamisessa apuna (per toteutus).
- Kaiutin soittaa musiikkia.
- Virherajojen käyttö liikkeen tunnistuksessa.
- ...
Jokainen toteutettu toiminnallisuus lasketaan vain kerran. Toiminnallisuuksien pistemäärien arvioinnissa käytämme maalaisjärkeä sekä opetushenkilökunnan työkokemusta sulautettujen järjestelmien ohjelmoinnista.
Toteutusjärjestys¶
Alla ohjeellinen (henkilökunnan mielestä toimiva) toteutusjärjestys harjoitustyölle. Eli ensin toteutetaan vaadittu toiminnallisuus ja sen jälkeen voi lähteä hakemaan parempaa arvosanaa toteuttamalla lisäominaisuuksia.
- Työsuunnitelma, jonka ei tarvitse olla lopullinen, mutta ryhmä hahmottaa mitä oikein ollaan tekemässä. (Suunnitelmahan saa muuttua, kts. alla)
- Laitteessa sensoridatan keruu ja analyysi komentojen tulkitsemista varten.
- Tunnistusalgoritmin toteutus C-kielellä ensin työasemalla kerättyyn dataan perustuen.
- Toimivan algoritmin siirto laitteeseen, toiminnallisuuksien testaus livenä.
- Käyttöliittymän tuunaus, viestien lähetys/vastaanotto sarjaliikenteenä.
- Lisäominaisuudet.
Työsuunnitelma¶
Harjoitustyöstä tulee osana kurssisuoritusta tehdä lyhyt työsuunnitelma. Suunnitelmia ei näytetä julkisesti muille, tarkoitus on että autatte itseänne lopputyön tekemisessä. Suunnitelman tekeminen voi tuntua turhalta, mutta aiemman opiskelijapalautteen perusteella se todellakin laittaa ajatukset liikkeelle, miettimään mitä työssä oikeastaan pitää tehdä! Samalla tulee mietittyä työn aikataulutusta.
Suunnitelmassa ei tarvitse mennä kovinkaan tarkasti toteutukseen, korkea abstraktiotaso riittää. Asiat voi kertoa ranskalaisilla viivoilla lyhyesti. Suunnitelman koko max yksi a4. Suunnitelma ei ole mitenkään sitova, ts. todennäköisesti se elää työn toteutuksen edetessä. Esimerkki suunnitelmasta alla.
Sisältö:
- Hahmotelma mitä oheislaitteita käytetään (painonapit, sensorit, jne) ja niiden tarkoitus ohjelmassa.
- Lyhyesti kuvattuna mitä toiminnallisuutta ohjelmassa on.
- Tehtävät, omat funktiot, ...
- Tietorakenteet, vakiot, globaalit muuttujat, ...
- Anturidatan keräys: taulukon koko, aikaväli, ym.
- Tilakone, joka toteuttaa harjoitustyön. Helpoin esittää kuvana.
- Tilakone riittää ohjelman tehtävien päätasolla, alemmille abstraktiotasoille ei tarvitse mennä.
- Mietityt lisäominaisuudet.
- Alustava aikataulu, mukaan lukien välitavoitteet ja työmäärän jakautuminen
Suunnitelman palautus viimeistään Maanantaina 23.10. klo 23:59. Suunnitelma on pakollinen osa harjoitustyötä. Jos suunnitelmaa ei palauta tai palauttaa myöhässä, kts. arvosteluperusteet alla. Riittää, että yksi opiskelija harjoitusryhmästä palauttaa suunnitelman Lovelaceen. Kurssin henkilökunta käy suunnitelmat läpi ja lähettää siitä tarvittaessa palautetta. Kuitenkin jos teillä on kysymyksiä, niin ne on parasta esittää harjoituksissa assistenteille suoraan.
Hox! Lopputyön toteutuksen saa toki aloittaa ennen suunnitelman esittelyä!
Hox! Suunnitelmia saatetaan käyttää myöhemmin akateemisessa tutkimuksessa lähdemateriaalina, tällöin ne tehdään nimettömiksi ja tunnistamattomiksi. Voitte halutessanne kieltää oman suunnitelman käytön tutkimusmateriaalina mainitsemalla siitä suunnitelmassa.
Työn palautus¶
Harjoitustyön deadline on perjantai 24. marraskuuta klo 23:59.
Harjoitustyön koodit palautetaan ao. palautusboxiin ennen deadlinea. Tämä palautettu koodi on se arvosteltava koodi.
- Ryhmät tekevät yhteisen ryhmäpalautuksen, jolloin pisteet päivittyvät kaikille.
- Tallennus Lovelaceen on tehtävä, koska Suomen laki vaatii meitä säilyttämään opiskelijoiden kurssisuoritukset vähintään 6 kuukauden ajan.
- Projektin ohjelmakoodista tarvitaan ainoastaan omat lähdekooditiedostot: esimerkiksi
paaohjelma.c
sekä mahdollisetomakirjasto.c
jaomakirjasto.h
. - Projektitiedostoja, RTOS:n valmiita tiedostoja eikä sensors- ja wireless-hakemistoja ei tarvita.
- Kommenteissa tekijöiden nimet. Kerro kuka teki mitä ryhmässä (esim. Aki teki suunnittelun, Eva teki toteutuksen ja Veeti teki testauksen)
- Lisäpisteitä varten mahdollinen lähdemateriaali, data-analyysitulokset, ym, joita haluatte otettavaksi arvostelussa huomioon.
- Paketoikaa useat tiedostot samaan zip-tiedostoon.
- Missään nimessä ei palauteta koko projektihakemistoa zipattuna!! Siellä on isoja debug-tiedostoja ym. arvostelussa turhaa, joka vie myös säilytystilaa palvelimelta.
Harjoitustyön arvostelu¶
Työn arvostelu tehdään ryhmittäin palautustilaisuudessa deadlinen jälkeen. Tilaisuus järjestetään työasemaluokassa.
- Tarkistus vie noin 30 min per ryhmä.
- Koko ryhmän on oltava paikalla joko luokassa tai etänä. Poissaoleva(t) ei saa arvosanaa, ennen kuin on selvittänyt osuutensa työhön.
- Ohjelman toiminnallisuus ja koodi esitellään opettajalle. Opettaja kyselee toteutuksesta.
- Opettajat käyttävät opiskelijoiden ennen deadlinea toimittamaa koodia. Opettajat käyttävät samaa kehitysympäristöä kuin se, joka on asennettu virtuaalikoneisiin koodin kääntämiseen ja suorittamiseen.
- Opiskelijoiden tulee pystyä vastaamaan kysymyksiin, jotka liittyvät Tamagotchi-sovelluksen toimintaan. Kaikkien opiskelijoiden tulee pystyä vastaamaan tällaisiin kysymyksiin. Opiskelijoilta voidaan myös kysyä teoreettisia kysymyksiä, jotka liittyvät kurssiin.
- Jos opiskelija ei pysty vastaamaan peruskysymyksiin, jotka liittyvät ohjelman rakenteeseen tai erilaisiin toteutuspäätöksiin, HÄN EI VOI LÄPÄISTÄ TÄTÄ KURSSIA (Harjoitustyön arvosana olisi 0).
- On välttämätöntä, että Tamagotchi-sovellus kääntyy, se voidaan ladata SensorTagiin ja se toimii perustoiminnallisuuden osalta. Muussa tapauksessa projektityö arvostellaan numerolla 0 ja opiskelija/t ei/eivät voi läpäistä kurssia.
Pisteytys¶
Harjoitustyön pistemäärä on enintään 30p, joka muodostaa 50% kurssin arvosanasta
Harjoitustyön pisteytys:
- Suunnitelma: 3p
- Harjoitustyö: 24p
- Kysymykset työarvostelun aikana: 3p
Yksityiskohtaiset arviointikriteerit löytyvät palautuslaatikosta sekä suunnitelmalle että ohjelmakoodille. Tarkista arvosteluperusteet vastaavasta palautuslaatikosta
Loppuarvosana
Toiset 50% kurssiarvosanaan tulevat aiemmista C-kielen harjoitustehtävistä (max 30p), joten maksimiyhteispistemäärä on 60p.
Toiset 50% kurssiarvosanaan tulevat aiemmista C-kielen harjoitustehtävistä (max 30p), joten maksimiyhteispistemäärä on 60p.
Kurssiarvosanaan 1 riittää, että harjoitustyöstä on hyväksytty toteutus ja kasassa on yhteensä 31 pistettä. Molemmista osa-alueista (C-kielen harjoitukset ja harjoitustyö) tulee siis olla suorituksia.
FAQ¶
- Voiko työn tehdä itsekseen?
- Jos on oikeita syitä yksintekemiselle niin olkaa yhteydessä opettajaan.
- Voiko työn tehdä isommassa ryhmässä kuin pari?
- Työn voi tehdä 2-3 hengen ryhmässä. Aiempina vuosina kolmen hengen ryhmien piti tehdä lisätehtäviä, mutta syksyllä 2023 tämä käytäntö ei ole voimassa. Neljän hengen ryhmät eivät ole sallittuja.
- Koodi toimi kotona, mutta ei harjoitustyön arvostelun aikana. Voinko kokeilla omalla tietokoneellani? Voinko näyttää sen etänä kotoa?
- Ei. Tarkista, että koodi toimii kurssin virtuaalikoneille asennetussa kehitysympäristössä ennen palauttamista.
- Saako työstä jutella kaverin kanssa?
- Saa tietenkin keskustella harjoituksissa, illanistujaisissa, jne, mutta joskun kaksi ryhmää palauttaa saman koodin, saatatte syyllistyä plagiointiin. Tästä syystä yhteistyötä tehneet ryhmät tulee ilmoittaa koodin kommenteissa tms.
- Raja menee siinä, että tehtävästä saa keskustella, mutta koodi pitää kuitenkin itse tehdä!
- Voiko työn palauttaa myöhässä?
- Ei.
- Saako jonkun muun (tai netistä löytynyttä) koodia käyttää?
- Samalle kurssille osallistuvien koodia ei saa käyttää, vaikka ilmoittaisi lähteenkin. Ts. toisten lopputyöstä koodia ei saa kopioida omaan työhön.
- Muutoin saa, kunhan ilmoittaa mistä koodi on haettu (www-sivu tms), ettette syyllisty plagiointiin.
- Voinko käyttää tekoälyä?
- Kyllä, kunhan kerrot koodissasi, mitä tekoälyä olet käyttänyt, mitä kehotteita ('prompt') olet käyttänyt ja miten olet muokannut koodia tekoälyn antaman vastauksen perusteella.
- Mites plagiointi?
- Yliopistolla on ohjeistus miten plagioinnin kanssa menetellään. Noudatamme niitä.
Temporary code sharing space¶
Use this return box to share code with your team members. DO NOT USE THIS RETURN BOX TO UPLOAD THE FINAL VERSION OF YOUR CODE. CODE IN THIS RETURN BOX WILL NOT BE EVALUATED