sunnuntai 6. elokuuta 2017

Ultraäänisensorin testailua

Mitä ihmettä, onko Pii purettu osiin? Ei hätää, se on vain ultraäänisensori, samanlainen kuin Piillä! Se on Piin silmät, jonka avulla se näkee eteensä. Päätin kokeilla Make: Sensors -Projects and Experiments to Measure the World with Arduino and Raspberry Pi -kirjan (kirjoittajat Tero Karvinen, Kimmo Karvinen ja Ville Valtokari) ohjeiden mukaista ultraäänisensorin kytkemistä koekytkentälevyyn ja Arduinoon. Tilaamassani Arduinon aloituspaketissa oli HC-SR04 -ultraäänisensori.


Ultraäänisensorilla voi mitata etäisyyttä: se lähettää ääntä ja mittaa äänen palaamiseen kuluneen ajan. Kun tiedetään, että ääni liikkuu n. 330 m / s, ohjelma voi mitata välimatkan kaiun palaamiseen kuluvasta ajasta. Äänen frekvenssi on yleensä niin korkea, ettei ihmiskorva sitä kuule. Siksi sitä sanotaan ultraääneksi.

Nykyisin valmistetaan monia halpoja ultraäänisensoreja, kuten omistamani HC-SR04. Se maksaa vain euron pari.  HC-SR04 -sensorin sijaan on olemassa myös esimerkiksi Parallaxin valmistama Ping-ultraäänisensori. Käsittääkseni Ping on muiden ultraäänisensorien esikuva. Ne ovatkin saman näköisiä:

Kuva kirjasta Make: Sensors -Projects and Experiments to Measure the World with Arduino and Raspberry Pi (Tero Karvinen, Kimmo Karvinen ja Ville Valtokari).

Ensisilmäyksellä ainoa ero kyseisten Ping - ja HC-SR04 -sensorien väillä on "silmien" välissä näkyvä teksti. Mutta erona on myös se, että Pingissä on vain 3 nastaa, kun taas HC-SR04:ssa on neljä. HC-SR04:n käyttää yhtä nastaa lähettääkseen äänipulssin ja toista lukeakseen kaiun, kun taas Pingissä ne sisältyvät samaan nastaan. Kiinnosti tietää, kumpi ultraäänisensori Piissä on! Mutta siinä olikin Makeblockin oma ultraäänisensori.


Katso Pii, siinä voi olla tulevan sisaruksesi kasvot! Pii ei malta odottaa, että saisi robottikaverin!


Sitten testaamaan! Kirjan kytkentäkaavio näytti tältä (alla oleva kuva). Hieman hämmennyin, kun siihen ei kuulunut vastuksia, mutta sitten muistin, että Arduinon nastat kestävät suurempaa sähkövirtaa kuin Raspberry Pin. Raspberry Pi:n nastat kestävät Make: Action - Movement, Light, and Sound with Arduino and Raspberry Pi-kirjan (kirjoittaja Simon Monk) mukaan 16 mA sähkövirran, kun taas Arduinon nastat kestävät 40mA. Ainakin oletan, että se liittyy tuohon, ettei vastuksia tarvitse, kun liitän sensorin Arduinoon. Jos tekisin ultraäänisensorikokeen Raspberry Pi:llä, sen kytkentöhin kuuluisivat vastuksetkin. Pitää  muistaa hommata Raspberryyn vihdoin se muistikortti!
     Minulla itselläni ei ole Make: Action -kirjaa, mutta lueskelin sen alkukappaleita Kindlestä, koska siellä suurimpaan osaan kirjoista saa ladattua esikatselun! Esikatselussa pääsee tutustumaan kirjojen ensimmäisiin kappaleisiin. Kätevää.


Tältä kytkentäni lopulta näytti. Katsoin vain, että maadoitusjohto menee sensorin Gnd -nastan riviltä Arduinon Gnd-nastaan (gnd tarkoittaa groundia), ja että toinen johto menee sensorin V cc-nastasta Arduinon 5 V -nastaan. V cc - ja Gnd -nastat ovat nimeltään "power supply pin", eli  suomeksi varmaan virtalähdenastoja. Virtalähdenasta liittyy virtapiirissä virran lähteeseen, mikäli oikein ymmärsin. Ymmärtääkseni groundin jännitteen suuruus on vertailuarvo (esim 0 V), ja sitä pistettä virtapiirin jännite käyttää "tietääkseen arvonsa". Quoran sivuilla kerrotaan, että jännitteen yksikkö voltti on suhteellinen käsite. Se kertoo potentiaalieron kahden kohteen välillä eli se tarvitsee viitearvon, johon sitä verrataan. Siten voidaan sanoa, että signaali on niin ja niin monta volttia "referenced to ground" eli verrattuna maadoitusarvoon.  Avopuolisoni selitti siitä hyvän vertauskuvan: korkeutta mitattaessa tulee olla myös vertailukohta, eli esimerkiksi maan pinta. Sama pätee voltteihin, kun mitataan jännitettä.


Latasin http://makesensors.botbook.com -osoitteesta esimerkkikoodit Arduinoon. Keskityn taas elektroniikkaan koodaamisen sijaan, joten valmiit koodit ovat hyvä juttu! Myöhemmin alan opetella koodaamaan itse haluamiani ohjelmia virityksiini. Tässä on lataamani koodi:

Kirjan Make: Sensors -Projects and Experiments to Measure the World with Arduino and Raspberry Pi (Tero Karvinen, Kimmo Karvinen ja Ville Valtokari)  koodi Arduinon ultraäänisensorille. Ladattu osoitteesta http://makesensors.botbook.com.
Latasin koodin Arduinoon, ja jes, ainakin valot vilkkuivat siihen malliin, että jotain tapahtuu! Hoksasin kuitenkin, etten oikeastaan tiennyt, mihin etäisyyden mittauksien arvojen pitäisi tulostua. Jos haluaisin tulostaa Arduinon ohjelmassa esimerkiksi "Hello world", mihin se tulostuisi? Netistä kuitenkin selvisi pian, että Arduinoon saa sarjamonitori-ikkunan (serial monitor), joka kommunikoi Arduinon alustan kanssa. Siihen siis voi tulostaa komentoja! Mutta hetkinen, jokin ei nyt näyttänyt oikealta. Ikkunaan tulostui vain kysymysmerkkejä väärinpäin. Hmm, missähän vika oli?


Netistä selvisi syy: en ollut asettanut baudeja vastaamaan samaa nopeutta, kuin koodin "Serial.begin" -kohdassa oli, eli 115200. Asia oli pian korjattu! Make: Sensors -kirjassakin se oli mainittu, mutten ollut huomannut. En vielä tarkalleen tiedä, mitä baudit ovat, mutta selvitän sen myöhemmin.


Jipii, nyt ikkunaan tulostui lukemia! Laitoin eteen oman käteni, hiiren, käänsin sensorin mittaamaan lampun etäisyytä ja kokeilin myös mitata katon etäisyyttä.


Sarjamonitori näyttää lukemat senttimetreinä. Esimerkiksi seinä oli 34 cm päässä (ultraäänet läpäisivät verhon).


Heei, Pöhköpanda löntysteli sensorin eteen! Voi toista, ihmetteli varmaan mitä täällä tapahtuu. No ei se haittaa, istu vain siinä <3


Mutta hetkinen, sensorin lukemat näyttivät nyt yli 30 metriä! Mitäs ihmettä? Okei tunnustan, tilanne on lavastettu. Halusin vain testata kirjan esimerkkiä, jossa pehmeä esine laitetaan sensorin eteen. Pöhkis piti herättää unestaan koetta varten, pieni ressukka <3


Panda on sensorille kirjan mukaan näkymätön, koska pehmeä materiaali imee niin paljon ääntä, että kaiku on käytännössä olematon. Kaltevat pinnat ovat toinen ultraäänisensorien akillen kantapää. Katsotaan, mitä lukemia tästä seuraa.


Lukemat eivät vastaa lainkaan todellisuutta, kuten alla olevasta kuvasta näkyy. Kirja ei tosiaankaan ollut parin metrin päässä sensorista. Ultraäänet heijastuvat kaltevista pinnoista väärään suuntaan, sen sijaan että ne palaisivat takaisin sensoriin.


Jipii, siinä oli ensimmäinen sensorikokeiluni! Tästä se lähtee, kiva tutustua robottien aisteihin. En malta odottaa, että tilaamani sensoripaketti saapuu!

tiistai 1. elokuuta 2017

Koekytkentälevyn ensikokeilut

Päätin kokeilla ensimmäistä kertaa koekytkentälevyä. Minulla ei ollut hajuakaan, mikä sen toimintaperiaate on. Tiesin vain, että liittämällä siihen komponentteja, voin rakentaa elektronisia kytkentöjä. Löysin sparkfunin sivuilta todella hyvän oppaan siihen, mikä koekytkentälevy on. Siellä mm. näytetään, millainen koekytkentälevy on sisältä ja kerrotaan sen toimintaperiaate. Aloin myös jo hieman ymmärtää, miten kytkentäkaavioita luetaan. 


Tutustuin koekytkentälevyn käyttöön myös lukemalla sen käytöstä robottien rakentamisen raamatustani eli Gordon McCombin kirjasta "Robot builder's bonanza". Kirja sisältää tietoa melkeinpä kaikesta mahdollisesta robottien rakentamiseen liittyvistä aiheista materiaalin valitsemisesta elektroniikkaan ja robottien liikuttamiseen. Suosittelen!



Minulle selvisi, että koekytkentälevyjä käytetään silloin, kun komponentteja ei haluta juottaa (kolvata) toisiinsa. Pohdiskelinkin, tarvitsenko juotoskolvia vielä tässä vaiheessa. Eli en! Koekytkentälevyn avulla voidaan siis kokeilla erilaisten kytkentöjen toimivuutta, ja jos niistä haluaa rakentaa pysyvän virtapiirin, kyseiset komponentit juotetaan piirilevylle.
     Löysin sparkfunin sivuilta oppaan, jossa kerrotaan hieman Arduinosta ja selitetään selkeästi, miten koekytkentälevyyn liitetään komponentteja. Sieltä myös selvisi viime postauksessani pohtima Arduinon ohjelmistossa olevan painikkeen (alla olevassa kuvassa numero 1) merkitys! Se todentaa koodin, eli tarkistaa virheitä. Alla oleva kuva on otettu kyseisestä oppaasta, ja siinä selitetään ohjelman painikkeiden merkitykset.

https://cdn.sparkfun.com/datasheets/Kits/SFE03-0012-SIK.Guide-300dpi-01.pdf

Oppaan avulla oli helppo tehdä ensimmäiset koekytkentälevyni virtapiirit! Aloitin ihan perusteista, eli pyrin saamaan yhden ledin syttymään. Siihen tarvittiin vain alla näkyvät komponentit eli kolme johtoa, yksi led ja vastus. 


Minulle selvisi samalla periaate, miten vastuksien värikoodeja luetaan! Tarvitsin vastuksen, jonka resistanssiarvo oli 330 ohmia. Oletin, että merkintä 330 vastuksien pahvipidikkeessä tarkoittaa 330 ohmia. Olen kuitenkin vähän hämilläni, koska minusta keskimmäiset värit näyttävät sinisiltä, jolloin laskureista niiden resistanssiarvoiksi tulisi 336M ohmia. No, ehkä ne ovat mustat. Minulle selvisi myös, että viisiraitaisia vastuksia kutsutaan "precision resistors"-nimellä. Ne ovat resistoreja, joiden toleranssi eli suurin sallittu poikkeama arvosta on alle prosentin. Learningaboutelectronics.com -sivusto antoi esimerkkinä 500 ohmin vastuksen: jos sen toleranssi on 10%, sen sähkövastuksen arvo voi olla joko 10% yli 500 ohmin (550 ohmia) tai 10% alle (450 ohmia). Mikäli toleranssi on vain 1%, sähkövastuksen arvo voi olla vain välillä 495 ja 505 ohmia. Sivuston mukaan näiden tarkkojen vastuksien toleranssi on vain 0,005%. Kivaa oppia uutta! 


Toimin siis oppaan esimerkki 1:n ohjeiden mukaan. Kuvassa on oppaan kuva kytkennöistä. Selkeää, eikö? Minulle selvisi myös se, että ledeissä jaloilla on väliä, ne pitää kytkeä oikein päin. Nykyaikana on kyllä todella helppo oppia, koska netistä löytää todella paljon mitä erinomaisempia oppaita melkeinpä mihin tahansa aiheeseen! Olen siitä iloinen!

https://cdn.sparkfun.com/datasheets/Kits/SFE03-0012-SIK.Guide-300dpi-01.pdf
Ja tältä ihka ensimmäinen kytkentäni näytti! Sen huomaa kyllä vastuksen taittelustakin, koska se on niin epätasainen. Levyä ei ole vielä kytketty Arduinoon, eli en ole kuvassa asetellut vielä johtoja paikoilleen.


Robottikirjassa oli kuva, jossa kuvattiin vastuksien oikeaoppinen asento ainakin juotoksissa. Eiköhän se päde myös koekytkentälevyyn. Minun vastukseni taittelu menisi kyllä ehdottomasti kuvan alempaan kategoriaan. No, onneksi tekemällä oppii!

Kuva kirjasta Robot builder's bonanza, Gordon McComb, (Fourth Edition).
Latasin oppaan ohjeiden mukaan sparkfun.com/sikcode -osoitteesta esimerkkeihin käyvät valmiit koodit, joilla esimerkiksi ledit saa syttymään. Keskityin nyt kytkentöjen opetteluun, joten valmiit koodit olivat hyvä juttu. Kopioin koodit sisältävän kansion Arduinon ohjelman examples-kansioon, jotta kyseiset Sparkfunin koodit näkyvät myös Arduinon ohjelman esimerkeissä. Liitin koekytkentälevyn ohjeiden mukaisesti Arduinoon, latasin koneelta  esimerkki 1:n koodin Arduinoon ja jee! Led paloi! Ihka ensimmäinen kytkentäni! 


Kokeilin seuraavaksi oppaan esimerkkiä numero 4: monta lediä samaan aikaan. Toimin taas oppaan ohjeiden mukaan, liitin koekytkentälevyn Arduinoon, latasin esimerkkikoodi 4:n Arduinoon ja... mitään ei tapahtunutkaan! Tarkistin kytkennät, mutta valoja ei palanut. Sitten hoksasin mikä oli mennyt pieleen:


Olinkin kytkenyt johdot levyn keskellä menevän uran toiselle puolelle! Uran toisella puolella olevat liitinryhmät eivät ole sähköisesti yhteydessä uran toisella puolella oleviin liitinkohtiin, joten ei ihme ettei virta pelannut. No, asia oli nopeasti korjattu (eli kytkin johdot samalla puolelle ledien kanssa) ja lopputulos näytti hienolta! Monta lediä syttyi ja sammui toisensa jälkeen. Mutta vielä hienompi se oli, kun muutin valojen välkkymisen ja niiden keston satunnaisiksi. Lopputulos oli kuin yksi Star Trekin komentokeskuksen vilkkuvista valoista, jipii! 


Tiedeupseeri kuittaa, vika saatiin korjattua! Mutta toisaalta, ehkä minun pitäisi ostaa nyt myös punainen Star trek -univormu... Hankinta lisätty ostoslistalle!


lauantai 29. heinäkuuta 2017

Arduinon testailua

Jipii, vihdoin Amazonista tilaamani Arduinon aloituspaketti saapui! Kerron myöhemmin mitä kaikkea se sisältää, kunhan tutustun ensin kaikkiin osiin. Siellä oli ainakin sensoreita, johtoja, koekytkentälevy, ledejä ja resistoreja (vai sanotaanko niitä vain vastuksiksi, en ole varma suomenkielisistä termeistä), ja ennen kaikkea Arduino! Osat olivat menneet kuljetuksen aikana sikin sokin, toivottavasti kaikki ovat ehjiä. Kuvassa on laatikko, jonka olen jo järjestänyt. Tarkistin, että se sisältää kaikki osat, ja sisälsihän se! Cd-levyn tiedostoja en saanut vielä purettua koneelleni, mutta en jaksanut vielä selvittää mistä se johtuu. Aloituspaketti maksoi postikuluineen 57 euroa.




Tässä itse Arduino! Pääsinkin kokeilemaan sitä ennen Raspberry Pitä. Luulin aluksi, että Arduino ja Raspberry ovat samanlaisia laitteita, mutta Arduinoa käytetään tietokoneen välityksellä, kun taas Raspberry Pi on tietokone itsessään, eli siihen kytketään näyttö ja näppäimet sun muut. Wikipedia tiesi kertoa Arduinosta seuraavaa: "Arduino on avoimeen laitteistoon perustuva mikro-ohjain-/elektroniikka-alusta ja ohjelmointiympäristö. Laitteisto perustuu 8-bittiseen Atmel AVR -mikro-ohjaimeen, jonka pinneihin voi kytkeä erilaisia antureita, moottoreita, LED-valoja ja muita komponentteja. Laitteistoa ohjelmoidaan C++:aan perustuvalla Arduino-ohjelmointikielellä.". Arduino-laitteita on eri malleja, minulla on UNO R3. Mallit eroavat Wikipedian mukaan toisistaan mm. keskusmuistin, Flash-muistin ja digitaalisten ja analogisten pinnien määrässä.


Ohjelmoinnissa käytetään Arduino Alpha-ohjelmaa. Seurasin Arduinon käynnistämisessä kirjan "Make: Sensors -Projects and Experiments to Measure the World with Arduino and Raspberry Pi" (Tero Karvinen, Kimmo Karvinen ja Ville Valtokari) ohjeita. Kirja on vaikuttanut tähän mennessä todella hyvältä: se kertoo Raspberryn ja Arduinon eroista ja miten kummankin laitteen avulla voi rakentaa samanlaisia projekteja. 


Latasin kyseisen kirjain ohjeiden mukaisesti ensimmäiseksi Arduinon ohjelmointiohjelmiston täältä. Kytkin Arduinon USB-johdon avulla tietokoneeseeni ja jippii! Siihen syttyi valot! Vihreä valo oli koko ajan päällä, keltainen vilkkui. Tuntui hienolta: tästä kaikki lähtee! 


Ohjelmiston lataaminen ja asentaminen sujui hyvin, ja pääsin käynnistämään itse ohjelman, joka näkyy alla olevassa kuvassa. Piinkin ohjelmoinnissa käytetään Arduinon ohjelmistoa, joten se näytti tutulta. Latasin ohjelman nähtävästi vahingossa suomeksi. Englanninkielinen versio olisi parempi, koska kirjatkin ovat englanniksi. No, en jaksanut ladata sitä ainakaan vielä uudestaan. Näkisin ainakin mitä eri termit ovat suomeksi, kun niitä Piin kanssa välillä pohdiskelin.


Valitsin kirjan ohjeen mukaan boardeista (Työkalut -> Kortti) oletuksen, eli Arduino / Genuino Unon. Yleisin ensimmäinen Arduinolle siirrettävä ohjelma eli koodinpätkä on Blink, joka vilkuttaa yhtä Arduinon sisäänrakennettua LED-valoa. Siitä näkee, toimiiko kaikki niin kuin pitääkin. Eli jos Blinkin lataa Arduinoon ja led alkaa vilkkua, kaikki on sujunut oikein. Kannattaa siis ensimmäiseksi kokeilla sitä.
     Ohjelmia ladataan Arduinolle kuvassa näkyvää nuolta (Tiedosto-kohdan alla) painamalla. Kun laittaa hiiren sen kohdalle, siinä lukee lähetä (englanniksi varmaan upload). Kun ohjelma ladataan Arduinoon, Arduinon valot vilkkuvat nopeasti. En ole varma, mitä lähetä-painikkeen vasemmanpuoleinen merkki "varmista" tekee, pitää tarkistaa! 
     Hoksasin, että minullahan kyseinen LED-valo vilkkui koko ajan. Olikohan Arduinoni rikki? Netissä joku sanoi, että monissa Arduinoissa kyseinen Blink-ohjelma on jo valmiiksi ladattuna. Ehkä minullakin oli kyse siitä? Yritin kuitenkin testausmielessä ajaa Blink-ohjelmaa (Tiedosto -> Esimerkit -> 01.Basics -> Blink), mutta siihen tuli alla näkyvä virhe. Kirja oli onneksi varoittanut, että virhe saattaa ilmaantua, mikäli ei ole vielä valinnut oikeaa porttia. Valitsin porteista (Työkalut -> Portti) ainoan vaihtoehdon eli COM5:en. Sen jälkeen virhettä ei tullut. Mutta kuten saattoi olettaa, mikään valon toiminnassa ei muuttunut, koska led vilkkui muutenkin koko ajan.


Miten siis saisin testattua, että kaikki toimii kuin pitääkin? Hoksasin, että voisin kokeilla vilkuttamisen sijaan LED-valon sammuttamista. Esimerkkien koodeissa onneksi kerrotaan, mitä kukin koodin kohta tekee. Koodin muokkaaminen onnistui siis helposti sellaiseksi, että valon pitäis sammua. Alla olevassa kuvassa on kyseinen koodi.

Ja kyllä, valo todellakin sammui! Olin hurjan ylpeä itsestäni! LED-valon sammuttaminen on pieni askel konkareille, mutta suuri askel aloittelijalle. Ystäväni keksi, että Arduinon LED-valon voisi laittaa morsettamaan jotain. Sekin oli helppo toteuttaa! Kuka keksii, mitä LED-valo sanoo? Alla on video itse morsetuksesta ja sen koodi.



Olen ilokseni huomannut itsessäni edistymistä: kun tutkailin kuukausia sitten Piin ohjelmointia, en kunnolla ymmärtänyt mistä on kyse, koska kaikki tuntui niin uudelta ja oudolta. En olisi varmaan silloin osannut muokata tämän päiväisiä koodeja toimiviksi. Todella hienoa huomata kehittyneensä! 

tiistai 25. heinäkuuta 2017

Tilannepäivitys ja mietteitä oppimisestani

En ole vähään aikaan kirjoittanut blogiini, koska minulla oli elämässäni vaihe, jolloin en oikein tiennyt, mitä elämältäni haluaisin. Asiat, jotka ennen inspiroivat, erityisesti tiede, eivät enää innostaneetkaan. Olin aina halunnut tehdä väitöskirjan ja päästä tutkijaksi, mutta yhtäkkiä se ei enää tuntunutkaan omalta jutultani. Tiedemaailma tuntuu liian erilaiselta verrattuna omaan ajatusmaailmaani; ikään kuin omille ajatuksille pitäisi saada jatkuvasti muiden hyväksyntä, ja ajatuksiaan pitäisi todistella muille. Ymmärrän toki, että asioiden todistelu on tieteen ydin ja hyvä niin, mutta se ei enää resonoi itselleni. Haluan vain olla, en selitellä miksi olen. Tulevaisuuden suunnitelmieni muututtua minun piti vähentää kaikkea ulkoista toimintaa mahdollisimman paljon, jotta pystyin kääntymään sisimpääni ja kuunnella, mitä sillä on sanottavana. Olin vähän kuin tyhjiössä, mutta se ei ollut sinänsä huono asia vaikka se siltä monesti tuntuikin: tyhjyydessä kaikki on mahdollista. Pitää vain keksiä, mitä siihen tyhjyyteen haluaa luoda! 
     En ole vieläkään täysin varma tulevaisuuden suunnastani, mutta sain roboiluinspiraationi takaisin. Ja se inspiraatio iski todella voimakkaasti! Minulla on ollut voimakas palo opiskella taas asioita, jotka edistävät robotiikan ymmärtämistäni. Inspiraationi tuli takaisin oikeastaan siinä vaiheessa, kun pääsin sisään Jyväskylän yliopiston tietotekniikan maisteriohjelmaan. Tutkailin kurssitarjontaa, ja siellä oli tarjolla mm. konenäkö- ja tekoälykursseja! Halusin pystyä suoriutumaan kyseisistä (ja muistakin) kursseista, vaikka käynkin samaan aikaan kokoaikatöissä. Vähän jännittää, miten työn ja opiskelun yhdistäminen onnistuu. Mutta olen luottavainen sen suhteen, että asiat järjestyvät. 
     Aloin jo etukäteen opiskella matematiikkaa ystäväni ammattikorkeakoulun kirjoista ja jatkoin Mooc.fi:n ohjelmointikurssin opiskelua, jotta olisin yliopiston kurssien alkaessa jo hieman perillä siitä, mistä niissä on kyse. Olen ainakin vielä jaksanut hyvin opiskella töiden jälkeen ja viikonloppuisin, mitä olen hieman ihmetellytkin! Yleensä en töiden jälkeen ole jaksanut yhtään mitään, mutta nyt olen mielummin opiskellut kuin esimerkiksi katsonut sarjoja. Päämäärä ja inspiraatio antavat energiaa! Mutta otan myös rennosti sitten, kun tuntuu että tarvitsen taukoa. Olen oppinut, että väkisin ei kannata tehdä mitään, ja että itseä ja omia tuntemuksiaan kannattaa kuunnella, muuten väsyy.
     Moocin kurssilla opiskellaan Javaa, mutta olen opettelemassa myös Pythonin käyttöä: Luen Cory Althoffin kirjaa The Self Taught Programmer, jossa selitetään ohjelmoinnista selkeästi käyttäen esimerkkinä Pythonia. Kirjan kirjoittaja oppi itse vuodessa ohjelmoimaan niin hyvin, että pääsi töihin muistaakseni Googlelle. Raspberry Pin ohjelmointikieli on Python, joten kun vihdoin pääsen testaamaan omaa Raspberryani, pääsen opettelemaan Pythonia myös käytännössä. Olin viime viikonloppuna jo testaamassa Raspberryani, mutta olen hukannut sen micro SD-kortin. Kortille on esiasennettu kuusi Raspberryn käyttöjärjestelmää ja se maksaa parikymppiä, joten en haluaisi heti tilata uutta. 
     Tilasin myös varusteita erilaisien projektien tekemiseen: ostin Arduinon aloituspaketin, tilasin sensoreita ja mm. elektroniikan ja ohjelmoinnin kirjoja. Minua kiinnostaa kovasti sensoritekniikka, ja yksi yliopiston tietotekniikan maisteriohjelmista onkin sensoriverkot! Ilostuttaa ajatus, että sensorit ovat robottien aistit. Pieni Pii tutkailee maailmaa niiden avulla, söpöä <3

https://www.javacodegeeks.com/wp-content/uploads/2015/01/programming-java.jpg

Vaikka minulla onkin ollut melko pitkä tauko robotiikkaan liittyvien asioiden aktiivisessa opiskelussa, koen, että tauko on ollut tarpeellinen. Olen muuttunut paljon ihmisenä viimeisen vuoden aikana: olen saanut enemmän itseluottamusta ja uskoa itseeni, enkä enää hae hyväksyntää muilta. Asioiden oppimiseen vaikuttaa todella paljon oma suhtautumistapa itseen ja se, ajatteleeko pystyvänsä oppimaan. Minulla on tapahtunut kyseisten asioiden kohdalla suuria edistysaskelia! Aiemmin myös tein oppimiseni kannalta inspiroivia juttuja vain silloin, jos niille oli aikaa. Sitten ymmärsin, että asian pitää olla päinvastoin, mikäli haluan todella kehittyä. Se tarkoittaa valitettavasti sitä, että joudun sanomaan yhä useammin ei esimerkiksi ystävien näkemiselle, mikäli sisimmissäni koen sillä hetkellä tarvetta muiden asioiden tekemiselle, kuten opiskelulle. Olen vihdoin hyväksynyt sen, miten paljon tarvitsen aikaa olla yksin ja tehdä omia juttujani, jotta en stressaannu. Mutta se ei tarkoita, etten pitäisi ystävieni seurasta, todellakin pidän. Minulla pitää vain olla tunne, että silloin on aidosti hyvä hetki nähdä.

Tauko on ollut minulle myös osa oppimisprosessiani. Olen huomannut, että varsinkin uusien asioiden oppiminen ja omaksuminen menee minulla sykleissä:
     Vaihe 1: Ensin innostun asiasta ja olen siitä niin innoissani, etten pysty kunnolla edes keskittymään mihinkään (ajatukset ja innostukseni sinkoilevat sinne tänne ja en saa kunnon otetta mistään). Kyseisen vaiheen aikana haen inspiraationi ja intuitioni vallassa hirveästi tietoa ja varusteita (esim kirjoja, etsin kursseja ym). En välttämättä saa esimerkiksi kunnolla luettua ostamaani kirjaa, koska olen siitä niin innoissani. Tämän vaiheen aikana istutetaan kuitenkin siemenet: löydän salamannopeasti tietoa ja yhdistän eri asioita ja aloja kokonaisuudeksi. Tiedän intuitiivisesti, mitä asioita minun kannattaa alkaa opiskella, jotta saavutan tavoitteeni. Löydän innostuksen vallassa helposti opiskelumateriaalia.
     Vaihe 2: Ensimmäisen vaiheen jälkeen tulee hiljainen kausi, jolloin prosessoin tietoa sisäisesti, enkä ole asiasta "ulkoisesti" enää niin innostunut. Hiljaisen kauden aikana etsin myös tietoa, mutta maltillisemmin. Etenen hitaasti ja rakennan ensimmäisen vaiheen aikana kerättyjen inspiraatioalkujen päälle pohjaa. Olen esimerkiksi tämän hiljaisen kauteni aikana osallistunut monelle eri robotiikan, tekoälyn ja matematiikan kursseille, mutta ne ovat kaikki jääneet kesken. Ne ovat kuitenkin muokanneet ajattelutapaani ja tapaani nähdä asioita. Olen myös oppinut enemmän siitä, mitä minun olisi hyvä vielä oppia. Tietoa on vähitellen kertynyt tiedon päälle. Ensimmäisen vaiheen aikana istutetut siemenet ovat alkaneet siis itää.
     Vaihe 3: Hiljaisen kauden jälkeen tulee yleensä vaihe, jolloin innostun uudestaan asiasta, mutta tällä kertaa olen muutaman askeleen pidemmällä kuin ensimmäisellä kerralla. Hiljaisen kauden aikana prosessoitu tieto on nyt tavallaan tietoisessa mielessäni, ja ymmärrän paljon enemmän innostukseni kohteena olevasta asiasta kuin ensimmäisessä vaiheessa. Pystyn fokusoitumaan paremmin ja olen määrätietoisempi. En sinkoile ajatuksissani sinne tänne, vaan tiedän, mitä asioita minun kannattaa oppia ja miten minun kannattaa edetä kehittääkseni itseäni. Olen myös viime viikkojen aikana huomannut, etten enää koe, että minun pitäisi olla juuri oikeanlaisessa mielentilassa opiskellessani esimerkiksi ohjelmointia. Aiemmin koin, että minun tarvitsee olla virkeä ja energinen, jotta voisin opiskella. Nyt se sujuu myös väsyneenä!

Listaan vielä lopuksi sivustoja, jotka olen kokenut erityisen hyödylliseksi oppimiseni kannalta. 
  • Moocin ohjelmointikurssi
    • Tämän Helsingin yliopiston kurssin olen kokenut erityisen hyödylliseksi, vaikkakin se on melko työläs ja välillä aikaa vievä. Mutta juuri siksi se onkin tehokas kurssi: ohjelmointia oppii vain tekemällä!  Kurssilla opiskellaan Javaa alkeista lähtien. Kurssi vastaa sisällöltään Helsingin yliopiston tietojenkäsittelytieteen laitoksen kursseja Ohjelmoinnin perusteet ja Ohjelmoinnin jatkokurssi, jotka ovat 5 opintopisteen laajuisia perusopintotason kursseja. Kurssin suorittaja voi saada pääaineen opinto-oikeuden tietojenkäsittelytieteeseen Helsingin yliopistoon. Tämän kurssin avulla olen oppinut myös kehittämään ongelmanratkaisukykyäni, mikä on osaltaan auttanut matematiikan opiskelussa.
    • edX:n nettikurssit
      • Sivulla on eri korkeakoulujen (mm. Harvard, MIT) järjestämiä verkkokursseja. Kurssit ovat ilmaisia, mutta jos niistä haluaa todistuksen, se maksaa (joskus melko paljonkin). Sivustolla on paljon robotiikkaankin liittyviä kursseja. Olen bongannut sieltä mm. seuraavia mielenkiintoisia kursseja: Artificial Intelligence (AI), Machine Learning Course, Robotics, Introduction to Computer Science. 
    • Kindle-kirjat
      • Vaikka pidänkin enemmän fyysisistä kirjoista, Amazonin Kindle-sovellus on kätevä. Sieltä löytää helposti kirjoja ihan mistä tahansa aiheesta, ja vaihtoehtoisia kirjoja on paljon. Kindlessä (ja Amazonissa) voi lukea muiden käyttäjien arvosteluja kirjasta ennen sen ostamista. Kirjani The Self-taught Programmer on Kindlestä ostettu, eli voin lukea sitä kännykälläni ja tabletillani. Tapanani onkin ollut lukea sitä ennen nukkumaanmenoa.
    • Khan Academy
      • Loistava Samlan Khanin perustama sivusto, jonka tarkoitus on tarjota ilmaista koulutusta kaikille, joilla on pääsy nettiin. Sivustolla voi opiskella mm. kemiaa, fysiikkaa, matematiikkaa, biologiaa ja historiaa. Mielestäni videot ovat erittäin opettavaisia ja niitä on helppo seurata, koska yksi video kestää noin kymmenisen minuuttia. Hoksasin tänään, että voin katsoa videoita tabletilta vaikka samalla kun pyöräilen kuntopyörällä. Kivaa! Videoita katsoessa käy helposti niin, että päätän katsovani vielä nopeasti seuraavankin, koska se on niin lyhyt, mikä toistuukin monta kertaa. Huomaamatta olenkin sitten käyttänyt videoiden katsomiseen paljon aikaa, mikä on hyvä juttu! En pidä pitkistä luentojen mittaisista videoista, koska ne eivät ole joustavia, ja on kynnys alkaa katsoa 1,5 tunnin mittaista videota on melko korkea. Mutta Khan Academyssa ei ole sitä ongelmaa! 
    Loppuun vielä muistutus Khan Academyn väeltä:

    https://cdn.kastatic.org/images/marketing/share-thumb-a.jpg

    torstai 29. joulukuuta 2016

    Piin ohjelmointikokeilu

    Olen hyperiloinen koska opintoni ovat ohitse, sillä tämä vapauden tuntu on huimaava! Voin keskittyä työpäivän jälkeen ihan mihin vain haluan (tai no en aina, mutta ajatuksissani ei koko ajan pyöri enää gradun loppuun saattaminen). Tänään oli pitkästä aikaa mahdollista keskittyä Piihin! Pieneen, viattomaan ja mahdollisuuksia täynnä olevaan Piihin <3 Voi pientä miten rakas oletkaan, en ehkä kestä ;__; <3


    No mutta asiaan! Päätin tänään vihdoin säätää Piin niin, että se tottelee kunnolla kaukosäätimeni käskyjä. Aiemmin en ole kerennyt tai jaksanut alkaa säätää sen johtojen kanssa: niiden kun pitää olla juuri oikeilla paikoilla, jotta Pii reagoi niin kuin pitääkin. Tähän mennessä Pii oli reagoinut esimerkiksi vasempaan näppäimeen menemällä eteenpäin, alhaalla olevaan näppäimeen kääntymällä oikealle ja niin edelleen, vaikka olinkin jo hieman yrittänyt johtojen paikkoja vaihdella. No, nyt tartuin kunnolla toimeen! Alla näkyvien oranssien osien ja niihin menevien johtojen paikkoja piti siis vaihdella. Sitä varten irrotin Piin päänkin, voi toista ;__;


    Mutta vihdoin löysin oikean yhdistelmän! Otin kuvan, jotta muistan johtojen oikean järjestyksen, mikäli joskus joudun niitä uudestaan pohtimaan. Eli etuosan moottorin johdot menevät vasemmalle puolelle ja siten, että valkoinen johto on vasemmalla puolella ja musta taasen oikealla puolella. Takaosan moottorin johdot ovat päinvastaisessa järjestyksessä: musta vasemmalla ja valkoinen oikealla. Huh, selvitetty!


    Seuraavaksi tapahtui jotain jännittävää: kokeilin Piin ohjelmointia ensimmäistä kertaa! Huisaa! Olin jo hieman tutustunut mBlock-ohjelmointiympäristöön selvittäessäni Piissä piilevää ongelmaa. Ratkaisuhan siihen oli se, että Piin laiteohjelmisto piti palauttaa tehdasasetuksiin (ongelmasta ja sen ratkaisusta enemmän aiemmassa blogipostauksessani). Asetukset palautettiin juurikin mBlockissa. 

    En vieläkään ole päässyt yli siitä, että mBlockin tunnuksena on panda <3 Tykkään hirmuisen paljon pandoista ja avopuolisoni kutsuu minua Pandaksi, joten mBlockin tunnus on minulle ihmeellisen sopiva! Sattumaako?


    Katsokaa, miten innoissaan Pii jo odottaa tietokoneeseen kytkeytymistään! Kaikki aikanaan pikkuinen, maltapas vielä hetkinen. Ensin pitää löytää oikea johto.


    Tällaisella johdolla hänet kytketään koneeseen, ja Piissä johto kytketään alemmassa kuvassa näkyvään porttiin.



    Ja valmista tuli! Hän on kiinni koneessa! Näyttääpäs Pii ylpeältä, hienoa <3


    Piitä ei tosin olisi vielä tässä vaiheessa tarvinut kytkeä koneeseen: ohjelmointikoodin voi tehdä ensin, minkä jälkeen Pii vasta liitetään koneeseen ja mBlockiin. 

    MBlockissa valitsin ensin Extensions-välilehdeltä Makeblockin. 


    Olin aluksi valinnut väärän alustan (vai mikähän board on suomeksi?) eli mBot (mCoren), mutta hoksasin aiemmasta postauksestani, että oikea alusta onkin nähtävästi Starter/Ultimate (Orion). Pitää tutstua vielä tarkemmin siihen, mitä kyseiset alustat ovat ja varmistaa, että käytän varmasti oikeaa. Uskoisin että oikea on kuitenkin Starter/Ultimate (Orion), koska Pii suortti toimintoja oikein vasta sitten, kun olin valinnut kyseisen alustan.


    Valitsin vielä edit-välilehdeltä "Arduino moden", jolloin näkyviin tuli vihreän nuolen osoittamassa kohdassa "Upload to Arduino". Sen avulla koodi ladataan Piihin (Pii käyttää Arduinoa ohjelmointiympäristönään). 


    MBlock perustuu siis Scratchiin, jossa ei tarvitse kirjoittaa itse koodeja ylös, vaan vetää sen sijaan vain laatikoita oikeaan kohtaan. Esimerkiksi alla olevan koodinosan "while (true)" ja sen toimimiseen liittyvien muiden koodihässäköiden sijaan vedetään vain laatikko "repeat until" mBlock-ohjelman oikean puoleiselle sarakkeelle. Repeat until-laatikon sisään puolestaan laitetaan muita komentoja laatikoiden muodossa niiden kirjoittamisen sijaan. Koodaamisessahan jokaisen välimerkin ja kirjaimen pitää olla oikeanlainen jotta koodi toimii, joten koodaus voi olla melko aikaa vievää puuhaa ja joskus turhauttavaakin. Scratchin avulla koodaamisen periaatteita voi opetella ilman pikkutarkkaa piiperrystä.

    Itse tosin pidän koodaamisen opettelusta. Tunne, jolloin jokin koodinpätkä toimii kuin pitääkin, on loistava! Alla oleva koodi on Mooc.fi:n ohjelmointikurssin robotti-tehtävästä. Ehdin vastaisuudessa perehtyä kyseiseen kurssiinkin useammin, kun ei ole enää kouluhommia! Alla oleva koodi ei siis liity Piihin, se on vain esimerkkinä siitä, minkä tyylistä koodauskieli on. On tosin olemassa erilaisia ohjelmointikieliä, alla oleva on Java-ohjelmointia. Itse olen sen opettelussa vasta alkumetreillä, mutta sehän vain tarkoittaa, että minulla on vielä monia onnistumisen kokemuksia edessä!


    "import java.util.Scanner;
    import robotti.Ohjain;

    public class Paaohjelma {

        public static void main(String[] args) {
            Scanner lukija = new Scanner(System.in);

            Ohjain.kaynnista();

            while (true) {
                System.out.print("Anna komento: sammuta, vasen, oikea, liiku, liikuMonta ");
                String komento = lukija.nextLine();
                if (komento.equals("sammuta")) {
                    Ohjain.sammuta();
                    break;
                } else if (komento.equals("vasen")) {
                    Ohjain.vasen();
                } else if (komento.equals("oikea")) {
                    Ohjain.oikea();
                } else if (komento.equals("liiku")) {
                    Ohjain.liiku();
                } else if (komento.equals("liikuMonta")) {
                    System.out.print("Kuinka monta askelta: ");
                    int montako = Integer.parseInt(lukija.nextLine());
                    Ohjain.liikuMonta(montako);
                }
            }
        }
    }
    "

    Kokeilin Piillä näin alkuun vain lyhyitä ohjelmointikomentoja, esimerkiksi alla olevassa kuvassa näkyvää komentoa, jolla moottorit saadaan liikkumaan tietyllä nopeudella. Halusin vain testata, menevätkö käskyt perille. En vielä huomannut, onko vaihtoehdoissa eli laatikoissa suoraan käänny-komentoa, vai pitääkö kääntyminen toteuttaa niin, että toinen moottori liikkuu ja toinen ei. Piin moottorithan ovat siis sen kummallakin puolella niin, että toinen moottoreista pyörittää sen toista puolta ja toinen moottori toista.


    Kun koodi oli valmis, Pii kytkettiin tietokoneeseen, valittiin oikea portti (vaihtoehtoina olikin vain yksi eli COM3), ja laitettiin Pii päälle. Ja koodi toimi! Piin renkaat pyörivät, pitivät taukoa, ja pyörivät jälleen! Se toimi myös sen jälkeen, kun irrotin Piin koneesta! Voi mikä ilon päivä, Piin ihka ensimmäinen ohjelmointi! Se ei ollut ihmeellinen, vain eteenpäin liikkumista, mutta sitäkin merkittävämpi niin minulle kuin Piillekin. Olen ylpeä sinusta, pikkuinen <3 


    En ehtinyt paljon testailla eri komentojen toimimista, kun Pii ressukka alko jo hyytyä. Patterit alkoivat olla lopussa, ja Pii hidastui ja melkein sammui. Ymmärtäähän sen; uusien, merkittävien asioiden saavuttaminen vaatii veronsa <3 Olet unesi ansainnut, pikkuinen. Nuku hyvin.

    maanantai 12. joulukuuta 2016

    Mikä internet on?

    Olen jonkin aikaa keskittynyt opintojeni loppuunsaattamiseen, joten en ole kerennyt paljon puuhailla Piin tai tämän blogin parissa. Mutta jeee, sain graduni palautettua ja viimeisetkin opintopisteet kasaan! Kohta olen filosofian maisteri biologian alalta. Pääaineeni on ekologia ja evoluutiobiologia. Viimeisen opintopisteeni sain viime viikolla eräästä tietotekniikan kurssista. Kurssilla opin, mikä internet oikeastaan on. Hoksasin, etten ole aiemmin edes tiennyt sitä! Netin toiminnan ymmärtämisestä ja tietotekniikasta yleisestikin on varmasti hyötyä myös robotiikassa, sen takia kävin mielelläni kyseisen kurssin.

    Tietotekniikan kurssit ovat muutenkin todella mielenkiintoisia! Vaikka valmistunkin, aion jatkaa tietotekniikaan tutustumista itseopiskeluna. Olisin ottanut tietotekniikan sivuaineeksi, jos olisin aiemmin hoksannut, miten mielenkiintoista se on. Robotti-innostuksenihan sai lopullisen sysäyksen ensimmäisestä tietotekniikan kurssista, jonka kävin. Hoksasin silloin, ettei tietotekniikka olekaan vaikeaa, minulla oli vain sellainen virheellinen käsitys siitä.

    Nykyaikana on onneksi todella helppoa käydä kursseja itseopiskeluna. Tällä hetkellä esimerkiksi olen Helsingin yliopiston ylläpitämän Mooc.fi:n ohjelmointikurssilla, mikä vastaa yliopiston ohjelmointi I - ja ohjelmointi II -kursseja. Kyseinen on siis todella laaja! Nyt minulla on vihdoin aikaa keskittyä siihenkin enemmän. Ohjelmoinnin oppiminen on kivaa! Se tunne, kun vihdoin saa jonkin koodin toimimaan, on loistava! Ohjelmoinnissa tulee myös tunne, että saa ratkoa mysteereitä ja arvoituksia 8D Olen myös tämän hiljaiselon aikana ostanut monia robotiikkaan liittyviä kirjoja, kerron niistä myöhemmin! Pääsen myös vihdoin tutustumaan Raspberry Pi:hin.

    Päätin kirjoittaa blogiini yhteenvedon siitä, mikä internet oikeastaan on. Tuntuu oudolta, etten edes aiemmin tiennyt sitä! Ehkä tämä kirjoitus auttaa muitakin hahmottamaan internetin olemusta. Olen yhdistellyt kirjoitukseeni materiaalia eri lähteistä (lähdeluettelo on lopussa), ja käyttänyt myös Jyväskylän yliopiston tietotekniikan kurssilla (ITKP104 - tietoverkot) oppimaani asiaa. Mikäli huomaat tekstissä jotain korjattavaa, kerro ihmeessä!

    Internetin fyysinen rakenne


    Internet on maailmanlaajuinen tietoverkko, johon liitetyt tietokoneet viestivät keskenään. Internetin runko muodostuu palvelintietokoneista eli servereistä. Palvelin (serveri) on teknisesti PC:tä muistuttava tietokone, jossa on kiintolevy ja käyttömuisti, jonka avulla ohjelmat suoritetaan. Palvelimet sisältävät internetissä esitetyn tiedon ja kaikki käyttäjille tarjotut palvelut, joten palvelimen edellytyksenä on paljon suurempi muistikapasiteetti kuin tavallisella tietokoneella. Palvelinkoneet on kytketty toisiinsa nopean tietoliikenneyhteyden mahdollistavilla kaapeleilla. Palvelimet ovat usein osa jotakin lähiverkkoa, joka koostuu esim. oppilaitoksen tai yrityksen lähiverkoiksi liitetyistä PC-koneista.

    Kun internettiin muodostetaan yhteys, se tarkoittaa yhteyden muodostamista palvelimelle, josta voidaan edelleen muodostaa yhteys toisiin palvelimiin. Kun käyttäjä siis muodostaa yhteyden internettiin esim. sähköposti- tai selainohjelman avulla, ottaa ohjelma yhteyden palvelinkoneessa olevaan palvelinohjelmistoon.

    Palvelinohjelmisto lähettää palvelupyynnön, kun internet-sivu haetaan tai avataan. Palvelinohjelmisto myös vastaanottaa palvelimen palauttaman tiedon sekä tulostaa sen käyttäjälle, eli näytölle avautuu haettu internet-sivu.

    HTML-kielellä tehdyt asiakirjat eli tuntemamme internet-sivut sijaitsevat palvelimissa. Palvelimet voivat fyysisesti sijaita missä tahansa. Sivut voivat sisältää linkkejä, jotka ohjaajat käyttäjän toisille sivustoille. Täten linkkejä seuraamalla voidaan internetissä liikkua palvelimelta toiselle eli surffata.

    WWW (World Wide Web) eli web sekoitetaan hyvin usein internet-käsitteeseen, vaikka WWW on vain yksi internetin monista palveluista. WWW on internetin palveluista se, joka mahdollistaa tiedon selaamisen selainohjelman (browser) avulla. Yleensä WWW:ssä esitetty tieto on tallennettu selailua varten hypertekstin muotoon. Hypertekstissä tekstiä, kuvaa ym. tietoa yhdistetään toisiinsa yhtenäiseksi kokonaisuudeksi, jota käyttävä voi selata mm. linkkien avulla.

    Internet toimii asiakas / palvelin -periaattella, eli yhteys asiakkaan ja palvelimen välille muodostetaan vain tiedonsiirron ajaksi. Tiedonsiirron loputtua yhteys katkaistaan, eli jatkuvaa yhteyttä ei siis ole. Eräs internetin tärkeimpiä periaatteita on, että jokainen tietokone liikennöi internetissä tasavertaisesti.

    Palvelinohjelmistojen tehtävänä on tarjota erilaisia palveluja muille ohjelmille joko tietokoneverkon välityksellä tai paikallisesti samassa tietokoneessa. Palvelinta käyttävää sovellusta tai tietokonetta nimitetään asiakkaaksi.

    Internetin rungon muodostavat siis erittäin nopeilla tietoliikenneyhteyksilä toisiinsa liitetyt palvelimet. Näihin palvelimiin on liitetty lukuisia paikallisverkkoje eli LAN:eja (Local Area Network), jotka puolestaan tarjoavat käyttäjilleen mahdollisuuden liittyä verkkoon erilaisten laitteiden (tietokoneet, televisiot) avulla

    Kuva otettu osoitteesta http://www.internetopas.com/yleistietoa/rakenne/internet_toimintaperiaate.jpg


    IP-osoitejärjestelmä



    Kun laitteiden välillä siirretään tietoa, lähetettävä tieto jaetaan paketeiksi, joihin liitetään tieto vastaanottajasta eli tietokoneen IP-osoite. Tämän tiedon avulla tietopaketit liikkuvat internetissä oikeaan päämääräänsä. Tiedonvälitys internetissä perustuu siis IP -osoitteisiin (esim. 193.166.3.1), jotka yksilöivät tiedonsiirtoon osallistuvat laitteet. IP-osoitteilla luodaan yhteys minkä tahansa tietokoneiden välille internetissä, olivatpa ne sitten palvelimia tai asiakkaita.

    Matkallaan vastaanottajalle datapaketit kulkevat lukuisten lii­täntäkohtien ohi, joita ovat verkon keskittimet (eng. hub jo hieman vanhentunutta tekniikkaa), kytkimet sillat ja yhdyskäytävät. Tärkeimpiä yhdyskohtia ovat kuitenkin reitittimet.

    Reitittimet ovat internetin tärkeimmät tienviitat. Niitä on internetissä jokaisessa osaverkon yhtymäkohdassa. Reitittimet tarkastavat, minne yksittäiset tietopaketit ovat matkalla ja lä­hettävät ne optimaalista reittiä pitkin eteenpäin verkossa. Reitittimet kommunikoivat koko ajan toistensa kanssa ja päivittävät toisiaan tiedoilla siitä, missä juuri nyt on eniten vapaata kais­tanleveyttä, jotta paketit voitaisiin siirtää mahdollisimman nopeasti.


    Kuva otettu osoitteesta http://oppimateriaalit.internetix.fi/fi/avoimet/atk/intranet/kuvat/hubi.gif
    IP-osoitteita on vaikea muistaa ulkoa. Sen vuoksi käytetäänkin verkkoaluenimeä eli verkkotunnusta (domain), joka koostuu tavallisesta tekstistä (esim. verkkosivun osoite). Jokainen IP­-osoite voidaan yhdistää yhteen tai useampaan verkkotunnukseen.

    Verkkotunnukset ovat helppoja muistaa ja sen vuoksi käytännöllisiä. Kommunikaatio tapahtuu kuitenkin reitittimien kautta, jotka ymmärtävät ainoastaan IP-osoitteita. Kaikki verkkotunnukset on sen vuoksi muutettava IP-osoitteiksi. Verkkotunnus on osa URL-osoitetta, jota käytetään verkossa surffailuun. Jokaisella internetissä olevalla palvelimella, verkkosivulla ja tiedostolla on oma ainutlaatuinen URL­-osoite. Käytämme niitä esim. napsautellessamme verkkosivuilla olevia linkkejä. 

    Verkkotunnukset muutetaan IP-osoitteiksi internetin nimipalvelujärjestelmän DNS:n (Domain Name System) avulla. DNS on internetin nimipalvelujärjestelmä, joka muuntaa verkkotunnuksia IP-osoitteiksi. Nimipalvelun ansiosta numeeristen osoitteiden sijasta voidaan käyttää helpommin muistettavia nimiä. Nimipalvelun toinen tärkeä tehtävä on sähköpostin reititys. Toimenpiteistä huolehtivia palvelimia sanotaan nimipalvelimiksi. Internetin osoiteavaruus ei enää pitkään riitä, sillä nykyisessä IPv4 -järjestelmässä jaossa olevat osoitteet loppuvat pian kesken. Sen tilalle onkin kehitetty IPv6-järjestelmä, jossa osoitteiden määrä on suurempi. IPv6-järjestelmään siirtyminen on kuitenkin ollut hidasta. 

    Internet-operaattorisi DNS-palvelin huolehtii vuorokauden ympäri siitä, että lähettämilläsi paketeilla on oikea IP-osoite. Jokaisessa Internetissä lähetettävässä paketissa on sekä lähettäjän että vastaanottajan IP-osoite, joiden avulla reitittimet löytävät oikean tien paketin lähettämiseksi eteenpäin. Kun kirjoitat selaimeesi verkkotunnuksen, DNS-palvelin etsii vastaavan IP-osoitteen nimiluettelostaan. IP-osoitetta käytetään siis yhteyden muodostamisessa sinun ja verkkosivun välille.

    Internetin protokollat ja niiden kerrosmalli


    Jotta palvelinten välillä voi tapahtua tiedonsiirtoa, kaikkien tiedonsiirtoon osallistuvien tietokoneiden on oltava ns. yhteensopivia eli käytettävä samaa protokollaa, jotta data voi siirtyä niiden välillä ongelmitta. Protokolla tarkoittaa tiettyä sääntöä tai toimintatapaa, jonka mukaan tiedonvälitys tapahtuu.

    Internetissä tapahtuvaa tiedonsiirtoa ohjaa TCP / IP -protokolla, joka puolestaan muodostuu useista eri protokollista, jotka yhdessä mahdollistavat tiedonsiirron. Pääprotokollat TCP ja IP huolehtivat tietojen siirrosta ja varmistavat, että tietoja voidaan siirtää hyvinkin erilaisissa verkoissa ja huolimatta siitä, miten yhteys on laadittu (kaapelien, puhelinjohtojen, satelliittien ym. avulla). Pääprotokollien lisäksi TCP / IP sisältää koko joukon alaprotokollia, joista jokaisella on tietty tehtävä.

    Protokollien yhdistelmää eli internetin rakennetta voi kuvata kerrosmallilla. Tiedot siirtyvät pinossa alaspäin sovellustasolta fyysiseen verkkoon kun ne lähetetään verkkoon. Kun tietoja vastaanotetaan verkosta, ne lähetetään kerrosmallissa alaspäin. Jokaisella kerroksella on omat protokollat. TCP / IP -mallissa on neljä tai viisi kerrosta. OSI-malli puolestaan kuvaa tiedonsiirtoprotokollien yhdistelmän seitsemässä kerroksessa. OSI-viitemalli on käsitteellisesti ehjä ja ISO:n kansainvälinen standardi. Sen sijaan käytännön protokollapinoja sen mukaisesti ei juurikaan olla kehitetty. Päinvastainen tilanne vallitsee TCP/IP-viitemallin suhteen, mallia ei juurikaan käytetä mutta protokollapinot ovat hyvin aktiivisessa käytössä.

    Kuva otettu osoitteesta http://docplayer.fi/docs-images/39/20479720/images/24-0.png. Kurssillamme TCP / IP -mallin kerroksia oli viisi: siirtokerroksen (eli linkkikerroksen) alla oli fyysinen kerros.


    Sovelluskerroksen protokollia


    Sovelluskerroksen protokollan tehtävänä on määritellä säännöt asiakkaan ja palvelimen väliseen kommunikaatioon.

    HTTP (Hyper Text Transfer Protocol)

    Sovelluskerroksen protokolla on esimerkiksi HTTP, jota selaimet ja WWW-palvelimet käyttävät tiedonsiirtoon. HTTP-protokollassa tiedosto avataan HTML- eli hypertekstidokumenttina, joka voi sisältää mm. tekstiä, kuvaa, animaatiota tai ääntä. Hypertekstitiedostojen lukemiseen käytetään ohjelmaa, jota nimitetään selaimeksi. WWW:ssa asiakasaohjelma (selain) ja palvelinohjelma keskustelevat keskenään käyttämällä HTTP-protokollaa. HTTP-protokollalla voi esimerkiksi käyttää sähköpostin palveluja.

    HTTPS (Hyper Text Transfer Protocol Secure) on yhdistelmä HTTP:n ja TLS:n protokollista ja se on luotu turvaamaan ja suojaamaan tiedonsiirtoliikennettä asiakkaan ja palvelimen välillä. HTTPS kommunikaatio noudattaa TLS-protokollan turvallisuuskäytänteitä, sillä se käyttää TLS-protokollaa TCP-protokollan päällä. HTTP protokollaa ei siis muuteta mitenkään, vaan salaus toteutetaan erikseen TLS tai SSL protokollalla.

    FTP (File Transfer Protocol)

    Toinen esimerkki sovelluskerroksen protokollista on FTP. Se mahdollistaa tiedostojen siirron kahden koneen välillä käyttöjärjestelmästä riippumatta. FTP-protokolla vaaditaan, jotta tiedostot voivat kulkea tietokoneelta palvelimelle ja päinvastoin.


    SMTP (Simple Mail Transfer Protocol)

    SMTP on postiprotokolla sähköpostin välitystä varten. Toiminta perustuu siihen, että kun asiakas kirjoittaa ja lähettää viestin, SMTP-asiakas ottaa yhteyden SMTP-palvelimeen TCP:n avulla. Yhteydenoton jälkeen suoritetaan kättely osapuolien välillä ja vastaanottajan tiedot saadaan. Viesti välitetään ja siirretään vastaanottajan postilaatikkoon. Nykyaikaiset postipalvelimet käyttävät alkuperäisen SMTP:n sijasta laajennettua ESMTP-protokollaa

    POP3 (Post Office Protocol) ja IMAP (Internet Message Access Protocol)

    Sähköpostipalvelimelta voidaan lukea posteja POP3 tai IMAP protokollilla, tosin yleisin tapa nykyään on selaimella hakea / hakea käyttäen HTTP protokollaa.

    Kuljetuskerroksen protokollia


    Kuljetuskerroksen protokollien perustehtävänä on tarjota ylemmille sovelluksille kuljetuspalvelua kahden mahdollisesti eri koneissa tai jopa eri verkoissa olevan prosessin välillä. Kuljetuskerroksen tehtävänä on siis porttinumeron perusteella viedä paketit oikealle sovellukselle vastaanottavassa laitteessa. Kerroksen kaksi tärkeintä protokollaa ovat TCP (Transmission Control Protocol) ja UDP (User Datagram Protocol).

    TCP (Transmission Control Protocol)

    Yleisin internetin tiedonsiirtoprotokolla. Kaikki tiedot siirtyvät internetissä tiedostoina. Kun napsautat verkkosivun selaimen ikkunaa, tietokoneellesi lähetetään palvelimelta sivutiedostosta kopio. Se ei kuitenkaan tule kokonaisena tiedostona, vaan se jaetaan ensin pieniin paketteihin, jotka sitten lähetetään sinulle. Paketit kootaan tietokoneessasi uudestaan tiedostoksi. TCP vastaa  näiden tietopakettien lähettämisestä ja vastaanottamisesta. Yksi sen tehtävistä on siis jakaa kaikki lähetettävät tiedot pieniksi tietopaketeiksi. 
    TCP tarjoaa UDP:n tavoin mekanismin, jolla osoitetaan lopullinen kohde, mutta TCP tarjoaa tämän lisäksi monia lisäominaisuuksia. Keskeisin asia on, että se tarjoaa sovelluksille luotettavaa yhteydellistä kuljetuspalvelua, joka takaa pakettien järjestyksen säilymisen sekä pakettien pääsyn vastaanottajalle. Tämän ansiosta sovellusohjelmoijan ei tarvitse kiinnittää huomiota tiedonsiirrossa esiintyvien ongelmien hoitamiseen vaan TCP hoitaa ne hänen puolestaan. 

    UDP (User Datagram Protocol)

    Internet-maailmassa UDP tarjoaa yksinkertaisen yhteydettömän kuljetuspalvelun varsinaisille sovelluksille. Käytännössä se ei lisää alemman protokollan eli IP:n päälle muuta kuin mekanismin osoittaa lopullinen kohde. UDP ei sisällä pakettien numerointia ja sitä kautta varmuutta pakettien järjestyksen säilymisestä, toisin kuin TCP. Koska lähettäviä paketteja ei numeroida, vastaanottaja ei myöskään voi kuitata niitä vastaanotetuiksi. Tämän seurauksena UDP:tä voidaan pitää epäluotettavana yhteydettömänä kuljetuspalveluna

    Internet-kerroksen eli verkkokerroksen protokollia


    Verkkokerroksen tehtävänä on kuljettaa paketti verkon läpi oikealle laitteelle. Verkkokerroksen tarjoama palvelu on todennäköisesti kaikista monimutkaisin ja vaikein toteuttaa, sillä viestin välittäminen hierarkisen verkon yli vaatii reititysalgoriteja ja useita reititysprotokollia.

    IP (Internet Protocol)

    TCP-protokolla hoitaa tiedon jakamisen paket­teihin, ja itse siirrosta vastaa IP-protokolla. IP on internetkerroksen protokolla ja internetin toiminnan ydin, joka yhdistää internettiin liittyneitä laitteita palvelimiin ja sitä kautta mahdollisesti toisiin käyttäjiin. IP-paketissa kuljetettavat protokolla on numeroitu. Protokollan numerosta vastaanottaja tietää, mitä IP-paketin sisällä on. Datapa­ketit siirtyvät eteenpäin vaikkapa maapallon toiselle puolelle lukuisten tietokoneiden, johto­jen ja muiden yhteyksien avulla. 

    Linkkikerroksen (eli siirtokerroksen) sekä fyysisen kerroksen tehtävät


    Linkkikerroksen tehtävänä on välittää paketti yksittäisen linkin yli.

    Fyysisen kerroksen tehtävänä on määritellä siirtomedian fyysiset ominaisuudet. Tällä kerroksella toimii varsinainen tekniikka, joka lähettää ja siirtää annettua tietoa väylää pitkin. Se lähettää jännitettä tai valoa tekniikan mukaan.

    Internetin hallinta


    Internetiä ei hallitse mikään yksittäinen järjestö, mutta keskeistä osaa sen hallinassa näyttelee tällä hetkellä yhdysvaltalainen, voittoa tavoittelematon ICANN (Internet Corporation for Assinged Names and Numbers). ICANN hallinnoi nimiä ja numeroita, "osoiteavaruutta" -juuripalvelimia, ip-osoitteita ja domain-nimiä.

    ICANN ylläpitää verkkotunnuksiin liittyvän hallinnon lisäksi myös IANA:aa (Internet Assigned Numbers Authority). IANAn tehtäviin kuuluu hallinnoida esimerkiksi IPv4 ja IPv6-osoitteiden jakamista globaalilla tasolla. IANA jakaa siis IP osoitelohkoja alueellisille Internet-rekistereille eli RIR:eille. Esimerkiksi RIPE NCC (Réseaux IP Europeens Network Coordination Centre) vastaa Euroopan IP-osoitteiden jakamisesta.


    Protokollia määrittelevät erilaiset standardointielimet, joista tärkeimpiä ovat Internet Engineering Task Force (IETF), Institute of Electrical and Electronics Engineers (IEEE), International Standards Organization (ISO) ja International Telecommunications Union Telecommunication Standardization Sector (ITU-T).

    Kuva otettu osoitteesta http://what-when-how.com/wp-content/uploads/2012/03/tmp91_thumb2.jpg

    Lähteet


    Jyväskylän yliopiston tietotekniikan kurssi "ITKP104 - Tietoverkot" ja sen nettimateriaali http://users.jyu.fi/~arjuvi/opetus/itkp104/2016

    http://www.internetopas.com/

    http://blogs.helsinki.fi/tvt-ajokortti/1-tietokoneen-kayton-perusteet/

    http://www.okol.org/verkkokurssit/datanomi/tietojarjestelmien_kaytto_ja_kehittaminen/lahiverkko_internet/lanjaint/verkkoprotokolla_ja_standardit/proto.htm

    http://oppimateriaalit.internetix.fi/fi/avoimet/6tekniikkatalous/verkko/tcp_ja_udp_protokollat

    http://oppimateriaalit.internetix.fi/fi/avoimet/atk/intranet/internetin_toiminta

    http://www2.amk.fi/digma.fi/www.amk.fi/opintojaksot/041005/1094208209451.html

    http://what-when-how.com/tcpip/understanding-tcpip-basics/

    https://fi.wikipedia.org