BBC Micro:Bit -viikko

11 thoughts
last posted Jan. 18, 2016, 11:05 p.m.
0
get stream as: markdown or atom
0

Micro:Bit - mikä se on?

BBC Micro:Bit on lapsille suunnattu minitietokone jota on helppo ohjelmoida. Englantilaiset 11-vuotiaat koululaiset tulevat saamaan laitteen itselleen myöhemmin tänä vuonna.

Kaverini vinkkasi minua osallistumaan Micro world tour -projektiin, jonka idea on seurata viittä microbittiä kun ne matkaavat maailmalla ja osallistujat vuorollaan kirjoittavat niille pieniä ohjelmia käyttäen Pythonia. Kirjoitan nyt blogia osana tätä projektia ja minulla on viikon ajan käytössä Micro:Bit jolla leikkiä. Englanninkielinen versio blogista löytyy täältä, ja siinä on varmaan vähemmän kirjoitusvirheitä kuin tässä versiossa :).

0

Ensivaikutelmia ja ohjelmointiympäristö

Sain Mei-Xiun haltuuni eilen. Yhdistin sen läppäriini kännykän laturin usb-johdolla. Laite käynnistyi ja ensimmäiseksi näin surullisen naaman, koska edellinen omistaja Eleni Lixourioti oli viimeksi asentanut laitteelle ohjelman, jolla voi seurata onko huonekasveilla tarpeeksi vettä. Sain tästä ajatuksen luoda joku positiivisempi ohjelma joka jättää koneelle ennen kuin lähetän sen edelleen!

Ennen kuin voin alkaa koodaamaan tarvitsin kuitenkin pari ohjelmaa. Ensiksi asensin upyedin joka on selaimessa toimiva editori. Sen avulla pythonilla kirjoitetun ohjelman voi ladata hex-tiedostona omalle koneelle ja siirtää siitä suoraan Micro:bittiin tiputtamalla se microbitin kansioon. Upyed asentui helposti, ja seuraavaksi halusin asentaa komentorivillä toimivan REPL ohjelman microrepl. REPL:in asentaminen olikin yllättävän hankalaa, vaikka noudatin parhaani mukaan ohjeita. Näennäisesti asennus onnistui, mutta kun yritin ajaa ohjelman sain virheen ImportError: No module named console. Kokeilin vaikka mitä ennen kuin viimein tajusin, että minulla oli väärä versio pyserialista asennettuna.

Microrepl asentaminen Ubuntu 14.04

Koska minulla oli jo python ja pyserial asennettuna, piti ensimmäiseksi poistaa pyserialin väärä versio.

sudo pip uninstall pyserial

Sen jälkeen asensin oikean version:

sudo pip install pyserial==2.7

Ja sitten itse microreplin.

sudo pip install microrepl

Tämän jälkeen microrepl alkoi viimein toimia, kunhan muistin käyttää sudoa kun aloitin ohjelman. Jos sudo unohtui niin käyttöoikeuksien kanssa oli ongelmia eikä REPL auennut.

sudo urepl
0

Projekti 1 - Awesome hearts

Kuten jo mainitsin, halusin tehdä ohjelman joka saisi seuraavan käyttäjän hyvälle tuulelle. Ja mikäs sen mukavampaa kuin kauniisti sykkivä sydän?

Micro:Bitillä on valmiiksi joitain kuvia jotka on suunniteltu sen 5x5 LED näyttöä varten. Pienen koheltamisen jälkeen löysin resurssit HEART ja HEART_SMALL. En kuitenkaan löytänyt valmista tapaa animoida sydämen sykkiminen, joten päädyin rakentamaan sen itse.

Halusin myös tehdä jotain Micro:bitin nappuloiden kanssa, joten nyt nappulaa painamalla saa luettavaksi positiivisen viestin. Jos molempia nappuloita painaa yhtä aikaa niin ohjelma päättyy.

Tässä on lyhyt video jolla sydämen sykkiminen näkyy. Lähdekoodi on luettavissa täällä.

0

Project 2 - Pomppiva Pallo

Seuraavassa projektissani halusin saada pallon pomppimaan Micro:Bitin 5x5 LED-ruudulla.

Aloitin luomalla pallon, jolle annoin x- ja y-koordinatit sekä nopeuden kummallakin akselilla. Jokaisella pelikierroksella pallo liikkuu nopeuden verran kumpaakin suuntaan. Jos pallo osui reunaan, sen nopeus kerrotaan luvulla -1 jotta sen suunta vaihtuu.

Huomasin että jos pallon nopeus oli muuta kuin 1 niin se päätyi helposti näytön ulkopuolelle aiheuttaen ohjelman kaatumisen. Korjasin tämän (ei ehkä niin realistisella tavalla) tarkistamalla ennen pallon piirtämistä että olisiko se ruudun ulkopuolella, ja jos olisi, niin vaihtamalla koordinaatin minimi tai maksimi arvoon (riippuen mistä reunasta pallo olisi mennyt yli).

Kirjoittaessani ohjelmaa löysin muutaman tärkeän asian jotka tuli ottaa huomioon. Ensinnäkin minun tuli muistaa sammuttaa pallon edellinen koordinaatti ennen kuin sytytin uuden. Toiseksi pallon piti odottaa hetki piirtämisten välillä tai se näytti liikkuvan aivan liian nopeasti.

Koska 5x5 näyttö on kovin pieni ja pallon liike laskettu yksinkertaisella tavalla, pallo jäi helposti toistamaan yhtä ja samaa liikerataa. Korjatakseni tämän lisäsin ohjelmaan mahdollisuuden muuttaa x- tai y-koordinaattia nappia painamalla, jolloin pallon sai siirrettyä liikkumaan uudella radalla.

Lisäsin myös toiminnon jolla näytölle voi lisätä pallon painamalla molempia nappuloita yhtäaikaa. Huomasin kuitenkin että pallot hidastuivat sitä mukaa mitä useamman pallon lisäsin. Korjasin sitä vähentämällä odotusaikaa piirtojen välissä aina kun mukaan tuli uusi pallo. Rajoitin myös pallojen määrän neljään jottei näyttö puuroutuisi pallojen määrästä. Peli päättyy jos palloja yrittää lisätä useamman kuin 4.

Valitettavasti en heti ottanut videota tästä ohjelmasta ja Mei-Xiu kärähti ennen kuin ehdin kuvata esimerkin. Ohjelman lähdekoodi löytyy kuitenkin täältä joten voit itse kokeilla!

Lisäys

Nyt kun Marja on täällä sain viimein kuvattua esimerkin ohjelmasta.

0

Project 3 - Summeri

Leikittyäni aikani LED näytön kanssa halusin kokeilla tehdä jotain Micro:Bitin GPIO-pinnien kanssa (tai mitä lie ovatkaan). En ole oikein koskaan tehnyt mitään elektroniikan rakentelua, eli oli pakko aloittaa aika pohjalta - päätin saada summerin toimimaan nappulan painalluksella!

CamJam EduKitin (jonka olin juuri tilannut Pi Zeroa varten) mukana tuli koekytkentälevy, summeri sekä johtoja liitäntöjä varten. Valitettavasti minulla ei ollut klipsua tai muuta milla olisi helposti saanut johdon yhdistettyä Micro:Bittiin joten päädyin käyttämään teippiä. (Ei sitä varmaan saisi käyttää mutta...)

Summeri on todella yksinkertainen - jos siinä on virtaa niin se on päällä, muuten se on hiljaa. Asensin summerin koekytkentälevyn keskelle niin, että pidempi jalka yhdistettiin Micro:Bitin pinniin 1 ja lyhyempi maahan (Ground - merkitty GND). Pinni 1 on on siirräntää varten, ja kun se on päällä niin summeri saa virtaa ja pitää meteliä.

Testasin viritelmääni tämän ohjelman avulla nähdäkseni toimiiko se, ja sehän toimi! Koodinpin1.write_digital(1) tarkoittaa että summeri on päällä ja pin1.write_digital(0) tarkoittaa että se on pois päältä. Summerin voin laittaa päälle ja pois nappuloiden avulla.

Olen iloisesti yllättynyt että sain tämän toimimaan ehkä saanut sähköiskua!

0

RIP Mei-Xiu

Olin kirjoittamassa uutta ohjelmaa, jossa olisin hyödyntänyt Microbitin liikkeentunnistinta. Microbitilla on hauskasti tapana näyttää mahdolliset ilmoitukset virheistä koodissa kirjain kerrallaan omalla naytöllään, ja tälläkin kertaa virheilmoitus alkoi rullata kuten oletin. Sitten LED-valot alkoivat yllättäen himmentyä ja sen jälkeen sammuivat kokonaan. Huomasin että laite oli polttavan kuuma ja irrotin sen koneesta. Kokeilin sitä uudelleen myöhemmin kun se oli jäähtynyt, mutta valitettavasti se ei enää käynnisty. Taisi Mei-Xiun matka loppua lyhyeen... vaan olihan se hauskaa niin kauan kuin sitä kesti!

P.S. Mulla ei siis ollut edes mitään teippiviritelmiä siinä kun se kaatui :D

0

Melkein oikea Micro:Bit

Loysin tallaisen lelun korvaamaan sen minka rikoin :).

Voit tehda omia taalla, kiitos Nicholaselle!

0

Tervetuloa Marja!

Sain juuri uuden Micro:Bitin korvaamaan rikkoutuneen Mei-Xiun.

Sain nimetä uuden kojeen ja halusin antaa sille suomalaisen nimen. Kaikilla tämän projektin laitteilla on M:llä alkava naisen nimi. Koska uuden lelun kulma on sininen (niin kuin mustikat), niin annoin sille nimeksi Marja.

Ennen kun pääsin projektien kimppuun, päätin asentaa uuden editorin/REPL clientin Mu.

Noudatin Githubissa olevia ohjeita ja latasin viimeisimmän version Linuxia varten - tiedoston nimi oli mu-2016-01-13_15_15_57. Sen jälkeen käynnistin ohjelman näin:

chmod +x mu-2016-01-13_15_15_57
sudo ./mu-2016-01-13_15_15_57

Jos en käyttänyt sudoa niin ohjelma kyllä aukesi, mutta moni toiminto (kuten REPL ja quit-nappula) eivät toimineet.

Mu vaikuttaa hyvältä ohjelmalta koska koodi on helppo siirtää microbitille. Hex-tiedosto ajetaan suoraan microbittiin ilman että sitä tarvitsee itse siirtää, eli minun ei enää tarvinnut käyttää upyflashed kaltaista scriptiä. On myös mukavaa että koodin voi tallentaa python-tiedostona omalla koneelle, koska hex-versiot eivät ole helposti luettavissa.

Mu varoittaa melkein joka napin painalluksella siitä tai tästä, ja se alkoi pikkuhiljaa ärsyttää. Ensimmäisen kerran toimintoa kokeillessa on ihan kiva saada pop up joka kertoo mitä on tapahtumassa, mutta parin kerraan jälkeen olisi mukavampi jos pop up jäisi pois. Mu on kuitenkin vasta lapsenkengissä ja todennäköisesti tämä ja moni muu asia tulee vielä parantumaan kunhan ohljemaa kehitetään lisää. Se on kuitenkin mielestäni askel oikeaan suuntaan ja helppokäyttöisempip kuin edeltäjänsä.

Loppuviikosta ehdin toivottavasti tehdä uusia projekteja Marjan kanssa!

0

Projekti 4 - Musiikkisoitin

Hankin itselleni krokotiiliklipsullisia johtoja ja halusin kokeilla Microbitin musiikki moduulia. Moduulin dokumentaatiossa selitetään aika hyvin miten se toimii - musiikkia voi soittaa nuotti kerrallaan tai luomalla listan nuotteja. Mukana on myös joitain valmiita musiikinpätkiä joita voi käyttää sellaisenaan.

Ennen kuin pääsin testaamaan musiikkia tarvitsin kaiuttimen jonka yhdistää microbittiin. Käytin vanhoja passiivisia kaiuttimia (joihin ei tarvitse erillistä virtalähdettä). Kokeilin myös kännykän nappikuulokkeiden kanssa ja nekin toimivat, mutta äänenvoimakkuus oli liian kova joten niitä ei voinut laittaa korviin testatessa. Alla kuva käyttämästäni kaiuttimesta:

Yhdistämiseen käytin kaksi klipsullista johtoa. Mustan johdon yhdistin Marjan GND-pinnistä kaiuttimen jakkiliittimen alaosaan. Punaisen johdon yhdistin Marjan pin0:sta joko kaiuttimen jakkiliittimen yläosaan (jolloin musiikki soi vasemmanpuoleisesta kaiuttimesta) tai keskiosaan (jolloin musiikki soi oikeanpuoleisesta kaiuttimesta).

Musiikkimoduuli käyttää oletuksena pinniä 0 musiikin soittamiseen, mutta sen olisi voinut halutessaan vaihtaa asetuksella. Ensialkuun minulla oli vaikeuksia musiikin soittamisessa koska en tajunnut että moduuli pitää importata erikseen. Suuri osa tähän asti käyttämistäni toiminnoista onnistui kunhan ohjelman alussa oli from microbit import *, mutta musiikki piti lisätä erikseen import music avulla.

Musiikin soittaminen "blokkaa" oletusarvoisesti, mikä tarkoittaa sitä on pakko odottaa kunnes kappale loppuu ennnen kuin voi tehdä mitään muuta (kuten reagoida napin painallukseen). Asetuksen pystyi onnkesi vaihtamaan käyttämällä parametria wait=False. Halusin mahdollisuuden vaihtaa kappaletta vaikka edellinen kappale ei olisikaan vielä soinut loppuun asti.

Halusin myös vaihtaa kappaletta ravistamalla mikrobittiä, ja toteutukseen lainasin Martin O'Hanlonin kirjoittamaa koodia. Martinin koodi toimi hyvin huomaamaan ravistelun!

Lähdekoodi on luettavissa täällä.

0

Projekti 5 - Varashälytin

Aloitin tämän ohjelman kirjoittamisen kun olin saanut Mei-Xiun yhdistettyä summeriin, mutta homma jäi kesken kun Mei-Xiu hajosi. Nyt jatkoin ohjelman parissa. Ideana on saada Micro:Bit hälyttämään jos sitä siirretään.

Koska olen nyt krokotiiliklipsujen onnellinen omistaja, yhdistin CamJam EduKitin summerin suoraan Marjaan ilman koekytkentälevyä. Huomasin että krokotiilit oli helpoin kiinnittää Micro:Bitin reunimmaisiin pinneihin, joten yhdistin summerin pitemmän (positiivisen) jalan Micro:Bitin pinniin 0 punaisella johdolla ja lyhyemmän jalan GND-pinniin mustalla johdolla.

Huomasin että ohjelmaan tuli lisätä odotusaikaa nappulan painamisen ja hälytyksen aloittamisen väliin, koska nappulaa painettaessa kone liikkuu helposti. Odotusajan jälkeen mittaan aloituskoordinaatit kiihtyvyysanturin (accelerometer) avulla, ja jos koordinaatit muuttuvat enemmän kuin hiukan niin hälytys aktivoituu. Hälytyksen saa pois päältä painamalla B nappulaa (ei kannata kertoa sitä mahdollisille varkaille).

Alla video ohjelman toiminnasta.

Lähdekoodi on täällä.

0

Kiitos ja näkemiin!

Micro:Bitin kanssa leikkiminen on ollut tosi kivaa ja opettavaista, pääsin kokeilemaan monia juttuja joita en ollut tehnyt aiemmin. Olen iloinen että sain ottaa osaa tähän projektiin ja viettää aikaa Marjan ja Mei-Xiun kanssa. Mutta nyt on aika lähettää Marja edelleen seuraavalle ohjeilmoijalle, Peter Cunderlikille, joka tulee varmasti keksimään uusia, hienoja projekteja. Kiitos jos jaksoit lukea näitä kirjoituksia! Olet loistava!