10. mars 2017

Hjerte for micro:bit og Processing

For et par uker siden deltok jeg på et micro:bit hackathon arrangert av Lær Kidsa Koding og Åpen sone for eksperimentell informatikk. Da skjedde dette (takk til Jon Haavie som tok videoen):

Tidligere den dagen holdt jeg et foredrag om kreativ programmering, og mot slutten av foredraget demonstrerte jeg hvordan man på en svært enkel måte kan sende akselerometerdata fra en BBC micro:bit og tegne det på en skjerm ved hjelp av Processing. Det jeg viste frem under foredraget så omtrent slik ut:

Her ser du fire streker. Den røde, grønne og blå streken representerer akselerasjonenen til et micro:bit-kort i henholdsvis x-, y- og z-retningen, og den hvite streken representerer den såkalte absoluttverdien til disse verdiene. Dette er et opptak av at jeg holder et micro:bit-kort og (1) beveger det forover og bakover, (2) beveger det fra side til side, (3) beveger det opp og ned, (4) kaster det opp i luften og (5) rister litt på det.

Alle hjertene

For kort siden, på valetindagen, 14. februar, tvitret jeg om hjerter og kjærlighetsbrev. Konteksten var helt enkelt at jeg ikke visste hvordan jeg skulle tegne et hjerte, og derfor bestemte jeg meg for å lage et program som kunne tegne forskjellige hjerter for meg. Noen av disse hjertene endte opp slik:

Jeg klarte aldri å bestemme for hvilken form som var det perfekte hjertet, men jeg innså raskt at jeg kunne få hjertene til å likne på bokstaver. Deretter kunne jeg sette disse hjerte-ordene sammen slik at de liknet på ord. Dermed kunne jeg skrive mitt «kjærlighetbrev»!

Akkurat rett før micro:bit-foredraget mitt den lørdagen, tenkte jeg at det kunne være gøy å koble micro:bit-koretet sammen med hjertetegne-programmet slik at jeg kunne kontrollere hjertene via et akselerometer!

BBC micro:bit

Jeg er en stor fan av BBC micro:bit fordi det er ypperlig introduksjon til informatikkens og matematikkens verden. For kort siden skrev Jon Haavie, Torgeir Waterhouse og jeg en kronikk i Aftenposten hvor vi argumenterte for at også norske barn bør få lære programmering.

BBC micro:bit gjør det forbausende enkelt å programmere en sensor som sender data over radio til en laptop. Her er hva jeg gjorde. Først programmerte jeg en micro:bit til å sende data fra akselerometeret på følgende måte:

Her har jeg brukt JavaScript-blokkeditoren (se microbit.org/no/code), men det går også an å bytte til kodevisning. Da ser koden slik ut:

let s = ""
basic.forever(() => {
    led.toggle(0, 0)
    s = "m" + input.acceleration(Dimension.X) + " " + input.acceleration(Dimension.Y) + " " + input.acceleration(Dimension.Z)
    radio.sendString(s)
})
radio.setGroup(6)

Deretter programmerte jeg en annen micro:bit til å lytte til sin radio og sende videre alt den mottar til en seriellport på følgende måte.

Koden ser slik ut:

radio.onDataPacketReceived(({receivedString: mottattStreng}) => {
    led.toggle(1, 1)
    serial.writeLine(mottattStreng)
})
radio.setGroup(6)

Det som nå gjenstod var å lage et program som kunne lytte til en seriellport og ta imot data. I Processing skrev jeg følgende kode.

import processing.serial.*;
Serial port;

void setup() {
  printArray(Serial.list());
  port = new Serial(this, Serial.list()[7], 115200);
  port.bufferUntil(10);
}

void draw() {
}

void serialEvent(Serial port) {
  String inData = port.readString();
  if (inData.charAt(0) == 'm') {
    inData = inData.substring(1);
    inData = trim(inData);
    String items[] = (split(inData, ' '));
    println("x=" + items[0] + " y=" + items[1] + " z=" + items[2]);
  }
}

Dette er et program som lytter til seriellporten og som skriver til konsollen alt den mottar, og dette er egentlig alt du trenger for å gjøre dette selv. Du må sannsynligvis endre tallet 7 i koden over til et annet tall, men resten burde fungere «ut-av-boksen».

Lykke til!

av Roger Antonsen