Level 1PXT: Kompass

Skrevet av: Kolbjørn Engeland, Julie Revdahl

Kurs: Microbit
Tema: Blokkbasert, Elektronikk
Fag: Programmering, Naturfag, Matematikk
Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse

Introduksjon

Micro:biten har en magnetisk sensor innebygd, noe også de fleste smarttelefonene har. Vi kan bruke denne sensoren til å lage et digitalt kompass. I et vanlig analogt kompass har vi en magnetisk nål som peker mot nord uansett hvilken vei vi snur det. På en lignende måte skal vi få micro:biten til å vise en pil som alltid peker mot nord.

Bilde av en microbit som viser en pil

Steg 1: Vi finner kompassretning

Micro:biten leser av kompassretningen i grader. 0o er Nord, 90o er øst, 180o er sør og 270o er vest. Siden vi vet i hvilken retning micro:biten peker, kan vi beregne i hvilken retning et pilbilde på micro:biten må peke for å vise retning mot nord.

Bilde av en kompassrose

checkSjekkliste

let retning = 0
basic.forever(function () {
    retning = input.compassHeading()
    basic.showNumber(retning)
})

flagTest prosjektet

Steg 2: Vi viser pilen

Det er mye lettere å finne ut hvilken vei Nord er ved å legge inn en pil' som alltid peker mot nord. Vi skal bruke et pilbilde som kan peke i 8 ulike retninger. Vi må derfor tenke at vi deler kompassrosa opp i 8 kakestykker eller segmenter som alle har en åpning på 360o / 8 = 45o. Segmentene for de 8 ulike himmelretningene blir da:

  • Nord: 337.5o til 22.5o.
  • Nord-vest: 22.5o til 67.5o.
  • Vest: 67.5o til 112.5o.
  • Sør-vest: 112.5o til 157.5o.
  • Sør: 157.5o til 202.5o.
  • Sør-øst: 202.5o til 247.5o.
  • Øst: 247.5o til 292.5o.
  • Nord-øst: 292.5o til 337.5o. Da kan vi sette i gang med å teste for i hvilken retning micro:biten peker.
let retning = 0
basic.forever(function () {
    retning = input.compassHeading()
    if (retning < 22.5) {
        basic.showArrow(ArrowNames.North)
    } else if (retning < 67.5) {
        basic.showArrow(ArrowNames.NorthWest)
    } else if (retning < 112.5) {
        basic.showArrow(ArrowNames.West)
    } else if (retning < 157.5) {
        basic.showArrow(ArrowNames.SouthWest)
    } else if (retning < 202.5) {
        basic.showArrow(ArrowNames.South)
    } else if (retning < 247.5) {
        basic.showArrow(ArrowNames.SouthEast)
    } else if (retning < 292.5) {
        basic.showArrow(ArrowNames.East)
    } else if (retning < 337.5) {
        basic.showArrow(ArrowNames.NorthEast)
    } else {
        basic.showArrow(ArrowNames.North)
    }
})

flagTest prosjektet

Lisens: CC BY-SA 4.0

Forbedre denne siden

Funnet en feil? Kunne noe vært bedre?
Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!