Näytetään tekstit, joissa on tunniste Makeblock. Näytä kaikki tekstit
Näytetään tekstit, joissa on tunniste Makeblock. Näytä kaikki tekstit

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 


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.

perjantai 26. elokuuta 2016

Unelmia rakentamassa

Katsokaa mikä saapui postissa!! <3 Ihka ensimmäinen liikkuva robottini, Makeblock! Olin niiin innoissani kun näin saapumisilmoituksen siitä. Sen tunnuslausekin sopii hyvin robotti-innostukseeni: construct your dreams.

Tilasin sen verkkokauppa.com:sta perjantaina ja se oli jo maanantaina noudettavissa. En tosin ehtinyt perehtyä siihen tarkemmin kuin vasta eilen. Mutta tutustuin siihen silti hieman jo ennen rakentamista, katsotaan mikä oli ensivaikutelma <3



Voi mikä upeus!! Rakastuin heti sen silmiin ja väritykseen. Nuo silmät ovat konkreettinen osoitus siitä, että pian minulla on edessäni ihka ensimmäinen rakentamani liikkuva robotti. Noissa silmissä on jotain taianomaista, kuin ne katsoisivat suoraan minuun ja sanoisivat: "Olen haaveesi joka on jo olemassa tulevaisuudessa, sinun pitää vain tehdä se todeksi ja rakentaa minut!" En olisi malttanut olla töissäkään vaikka työstäni pidänkin, koska teki vain mieli päästä rakentamaan.



Tässä vielä lähikuva sen värityksestä. Rakastan metallinhohtoisia värejä ja turkoosia <3 Upeaa.


Miltähän ohjekirja näyttää? Katsotaan. Hihi, robottini osaa näköjään jo ajatella! Onpas sööttiä. Tuo ruuvimeisselikombinaatiokin vaikuttaa jostain syystä todella siistiltä. Ensin se onkin ruuvimeisseli, ja sitten: Tadaa! Se onkin toinen työkalu. Nolona tunnustan, etten tiedä kyseisen toisen työkalun nimeä. No siis sellainen, jolla voi kiertää toisenlaisia ruuveja. Noh, olen yleisesti sitä mieltä, etteivät käsitteet ole niin tärkeitä, vaan se todellisuus sen käsitteen takana (paitsi tieteessä niillä on ymmärrettävyyden kannalta väliä). Menipäs aiheen sivusta ja filosofiseksi, palataan robotteihin!


Vautsi, alla olevan ohjekirjan sivulla esitellään Makeblock-robottien sensoreita! Suurin osa niistä kuuluu lisävarustukseen, joita voi tilata erikseen. Tässä paketissa on ultraäänisensori (ultrasonic sensor) ja infrapunan vastaanottosensori (infrared receiver sensor). Todella upeaa, että robottini voi havaita esteitä ultraäänen avulla! (Luin kyvystä väistää esteitä ohjekirjasta). Infrapunan vastaanottosensoria tarvitaan käsittääkseni kaukosäätimeen, ja se taitaa olla eri asia kuin liikkeen tunnistin (motion sensor), josta kuvassa kerrotaan. Liikkesensorikin nähtävästi tunnistaa infrapunasädettä (en ole varma näiden suomenkielisistä nimistä, pitää kysyä Valtterilta joka on opiskellut fysiikkaa). Aion joskus hankkia värisensorin. On jostakin syystä todella mielenkiintoista, jos robotti pystyy erottamaan värejä. Liikkeentunnistin olisi myös enemmän kuin upea ja no, oikeastaan nuo kaikki!

Minua kiehtoo hirveästi robottien sensorit, koska olen kiinnostunut myös ihmisten aisteista ja siitä, miten havainnoimme ja koemme maailmaa niiden läpi. Olen ihan liekeissä kun kuvittelen, mitä kaikkea robotit voidaan saada havaitsemaan. Se saa mielikuvitukseni laukkaamaan. 

Kuvittelen mielessäni esimerkiksi skenaariota, jossa jossakin kaukana (tai eihän sitä tiedä vaikkei niin kaukana) tulevaisuudessa pystyttäisiin erottamaan jonkin laitteen avulla molekyylirakenteita tai DNA:ta toisistaan, ja sitä voisi hyödyntää roboteissa. Esimerkiksi robottini voisi etsiä ja tunnistaa karkkikasasta suklaata muiden karkkien joukosta <3 No, en tiedä onko tuo jo liian science fictionia, koska en tiedä paljoa molekyylirakenteista vaikka biologi olenkin. Minusta on kiva seikkailla mielessäni erilaisten mahdollisuuksien verkostoissa, vaikkeivat kyseiset kuvitelmani olisikaan oikeasti realistisia. 


Robottia voi ohjata joko kaukosäätimellä tai edistyneemmät rakentelijat voivat ohjelmoida sitä itse. Tämä on helppo aloituspaketti niille, joilla ei ole aikaisempaa kokemusta ohjelmoinnista (kuten minulle), koska tässä ohjelmointi tapahtuu Scratch-sovelluksen avulla. Olen hieman jo tutustunut kyseiseen sovellukseen Harvardin yliopiston CS50 - Introduction to computer science -verkkokurssilla, mutta pitää opetella sitä vielä lisää. Sovellus auttaa hahmottamaan, miten ohjelmoinnissa kannattaa ajatella. Komentoja ei sovelluksessa tarvitse kirjoittaa itse, vaan ne sisältyvät palikkoihin, joita vedetään paikoilleen oikeaan kohtaan. Toivottavasti osasin selittää oikein. Tässä kiinnostuneille linkki kyseiseen verkkokurssiin:

CS50-Introduction to computer science

Toivottavasti linkki näkyy kunnolla myös niille, jotka eivät ole kirjautuneina sivuille. Aion ensin tutustua robottiini kaukosäätimen avulla ja myöhemmin, kun Scratch-sovellus on tutumpi, ohjelmoin robottiani itse. En malta odottaa! Yksi iso haaveeni nimittäin on ohjelmoida omaa robottia. Ehkä vähän hassua, koska minulla ei ole paljoa ohjelmointikokemusta. Tiedän kyllä että se on vaikeaa, mutta uskon, että ihminen voi halutessaan oppia melkein mitä tahansa.

Scratch-sovellus.
Alla olevassa ohjekirjan kuvassa on esimakua siitä, mitä Makeblockin avulla voi tehdä lisäosien avulla. Koura olisi todella mahtava hankinta! Katsoin YouTubesta videon, jossa kouraa käytettiin mukin ojentamiseen. Siistiä! Sillä on varmasti loputtomasti soveltamismahdollisuuksia. Huomioni kiinnittyi kuvassa olevaan 3D-printer-tekstiin, mitähän se tarkoittaa? Voisiko Makeblockista oikeasti tehä 3D-tulostimen? Kuulostaa aika uskomattomalta, mikäli se pitää paikkansa. Pitää tutkia lisäosia enemmän! Tällä hetkellä tutkimista tosin riittää ihan tässä aloittelijan paketissakin.


Mikäli kuvat näkyvät liian tummina tai muuten huonoina, kertokaa ihmeessä! Olen hieman epävarma siitä, mikä on kuvilleni esimerkiksi sopiva kirkkaus: kännykkäni jolla käsittelen kuvia näyttää kuvat kirkkaina, mutta koneella ne näkyvät tosi haaleina ja tummina. Ehkä näyttöni asetuksia pitää säätää...

Tässä oli hieman ensitunnusteluja Makeblockiin, seuraavaksi kerron miten itse rakentaminen sujui!