lauantai 24. helmikuuta 2018

Piin ohjelmointia Arduinolla ja säikäyttäviä tilanteita

"Pieni Pii, niin viaton ja vapaa" ajattelin mielessäni, kun mietin pientä Piitäni. Mutta sitten hoksasin että hetkinen, vapaako? Eihän se pidäkään paikkaansa, sillä olen ohjaillut Piitä vain kaukosäätimellä. Se ei siis ollut vielä liikkunut ohjelmoinnin avulla satunnaista kokeilua lukuunottamatta! Kokeilin joskus kauan sitten Scratchia eli ohjelmaa, jolla palikoita siirtämällä voidaan ohjelmoida. Mutta tietotekniikan opinnoissani olin jo oppinut jonkin verran ohjelmointia, ja siitä itseluottamukseni syttyikin! Halusin tarjota Piille vapauden kaukosäätimen kahleista ja kokeilla, miten saisin sitä ohjelmoitua kunnolla. No, onhan se koodatessakin koodien vanki, mutta ei kerrota sitä vielä hänelle...katsokaa, miten touhuissaan se lähtee kohti seikkailuja!



En oikeastaan ollut täysin varma, voiko Makeblockin robottia ohjelmoida muutoin kuin mBlockilla, mikä siis on graafinen ohjelmointiympäristö, joka perustuu Scratchille:

MBlock-ohjelmointiympäristö, joka perustuu Scratchille.


Kesti oma aikansa selvittää asiaa, mutta sain vihdoin googlen avulla selville, että mBlockilla pitäisi pystyä siirtymään Arduinon kehitysympäristöön ja koodata siellä. Sen löytää avaamalla mBlockin, valitsemalla Edit ja Arduino mode, jolloin koodilaatikko ilmestyy oikealle puolelle. Jee, olin askelen lähempänä!




Mutta ei kyseisestä laatikosta vielä voinut siirtää koodia Piihin. Sitten hoksasin pienen Edit with Arduino IDE-napin yläkulmassa:


Jipii, tein sen! Paitsi hetkinen, mitään ei tapahtunut, kun painon kyseistä nappia. Googlettamalla selvisi, että mBlockin päivityksen pitäisi auttaa avaamisongelmiin. Päivitystä etsiessäni törmäsin alla olevaan kuvaan ja innostuin valtavasti mBlock 5:sta: pääsisinkö sen avulla harjoittelemaan Pythonia?! Olen haaveillut Pythonin opettelusta, koska sitä kuulema käytetään tekoälyn kanssa työskennellessä. No, voihan sitä kyllä opetella helposti miten vain, mutta olisi kiva, jos voisin yhdessä Piin kanssa harjoitella sitä <3 Vielä ei kuitenkaan ole Pythonin aika, sillä kädet on tällä hetkellä täynnä Java-kielen opettelussa, koska käyn ohjelmoinnin kakkoskurssia. Se on melko työläs kurssi! Oli ihme, että löysin aikaa edes tämän blogin kirjoittamiseen!

mblock 5, joka tukee Python-kieltä. Jee!

Jihuu, päivitys auttoi! Pääsin avaamaan mblockista Arduinon kehitysympäristön! Se on siis alla olevassa kuvassa näkyvä turkoosi laatikko. Siihen vain koodia kirjoittamaan!



Latasin Makeblockin Arduinon koodikirjaston täältä. Sen avulla voin siis avata Arduinon kehitysympäristössä valmiita koodeja, joilla esimekiksi testata Piin toimivuutta. Testaaminen on hyvä tehdä aina aluksi, koska siten nähdään heti, toimiiko kaikki kuin pitääkin. Jos koodia kirjoittaessa ja ladatessa kaikki ei toimikaan kuin pitää, voi siten olla varmempi siitä, ettei vika ole ns. perusjutuissa, vaan todennäköisesti itse koodissa. Valitsin ensin työkaluista oikean alustan, eli "Työkalut - Kortti: Arduino/Genuino Uno". Tarkistin myös, että portti on oikea, mutta siinä ei ollutkaan muita vaihtoehtoja kuin yksi. Testasin ensin moottoreita valitsemalla alla olevan kuvan mukaisesti kirjastosta esimerkkikoodin, painoin lähetä-nuolta (Pii oli tässä vaiheessa jo kytkettynä koneeseen), ja laitoin Piin päälle:



Ja hyvin moottorit hurisivat! Näettehän, miten hurjasti Piin telaketjut rullaavat, en haluaisi olla tuon pikkukaverin tiellä!


Päätin kokeilla, saisinko Piin kulkemaan ympyrää. Otin mallia, miten moottoritestikoodi toimi, ja muokkasin sitä niin, että toinen moottori pyörii vauhdikkaammin kuin toinen. 


Erittäin yksinkertainen koodi, mutta sitäkin riemastuttavampi kokemus, kun Pii alkoi piirtää lempimuotoani eli ympyrää! Tuntui, että mikä tahansa on mahdollista, koska sain sellaisen aikaan. Voi Pii, rakas apurini elämän leikkikoulussa <3



Halusin sen jälkeen testata koodin avulla Piin ultraäänisensoria. Se olikin hieman kinkkisempi toteuttaa, koska en aluksi saanut Piitä pysähtymään, kun jokin tulisi liian lähelle. Ultraäänisensori näytti kyllä toimivan, koska sarjamonitori näytti sen lukemia. Koodi ei vain toiminut niin, että Pii olisi pysähtynyt, kun välimatka on tarpeeksi pieni. Arduino käyttää käsittääkseni ohjelmointikielenä C:tä tai C++:aa, eikä kumpikaan ole minulle tuttuja. 

Olin kuitenkin oppinut jotain koodauskursseilla, joten jonkin ajan kuluttua koin valtavan upean jipii-elämyksen, kun Pii vihdoin pysähtyikin seinän sattuessa kohdalle! En valitettavasti enää viikon parin jälkeen muista, mikä koodissa alunperin oli minulle ongelmana ;__; Harmittaa, etten päässyt tarpeeksi ajoissa dokumentoimaan touhujani. Käytin koodissa Makeblockin koodikirjaston moottori- ja ultraäänisensoripohjia, mutta rakensin koodin kuitenkin lopulta itse, mistä olen ylpeä <3 Vielä vuosi sitten en edes ymmärtänyt, mistä koodaamisessa oli kyse! Todella upeaa huomata oma kehittymisensä. Käytin seuraavanlaista koodia:

Koodissa on käytetty pohjana makeblockin koodikirjaston moottoripohjaa.

Alla vielä avopuolisoni kuvaama taiteellinen otos siitä, miten hienosti Pii pysähtyy seinän sattuessa liian lähelle <3


Touhuillessa sattui tosin vielä tilanne, mikä säikäytti: en saanutkaan millään johtoa enää irti Piistä! Mietin kauhuissani, olinko innoissani runnonut johdon liian ronskisti Piihin. Pieni raukka... Kauhukuvat vilisivät silmissäni, joudunko kenties ostamaan Piille uuden alustan? Jonkin aikaa meni, ennen kuin vihdoin sain johdon irti. Mutta nähtävästi kaikki sujuu vielä kuin pitääkin. Johto taas irtoaa, sen jälkeen, kun sen laittaa liittimeen. Huh! Pitää olla tästä lähin varovaisempi.


Lopuksi vielä vihjekuva siitä, mitä seuraava projektini tulee sisältämään. Jeee, sain vihdoin hommattua hieman työkaluja! Yksisarvinen ei valitettavasti tule kuulumaan mukaan projektiin, se vain halusi mukaan kuvaan <3