Level 1PXT: Kompass

Skrevet av: Kolbjørn Engeland

Oversatt av: Stein Olav Romslo

Kurs: Microbit
Tema: Blokkbasert, Elektronikk
Fag: Programmering, Naturfag, Matematikk
Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse
Bilde av BokmålPå Bokmål

Introduksjon

Micro:bit-en har ein innebygd magnetisk sensor, det har òg dei fleste smarttelefonar. Me kan bruke denne sensoren til å lage eit digitalt kompass. I eit vanleg analogt kompass har me ei magnetisk nål som peikar mot nord uansett kva veg me snur det. På ein liknande måte skal me få micro:bit-en til å vise ei pil som alltid peikar mot nord.

Bilet av ein micro:bit som viser ei pil

Steg 1: Me finn kompassretning

Micro:bit-en les av kompassretninga i gradar. Den viser kor mange grader frå nord, målt med klokka, micro:bit-en peikar. Altså er 0° nord, 90° er aust, 180° er sør og 270° er vest. Sidan me veit i kva retning micro:bit-en peikar kan me berekne kva retning ei pil på skjermen må peike for å vise retning mot nord.

Bilete av ei kompassrose

checkSjekkliste

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

flagTest prosjektet

Steg 2: Me viser pila

Det er mykje lettare å finne ut kva veg nord er ved å leggje inn ei pil som alltid peikar mot nord. Me skal bruke ei pil som kan peike i 8 ulike retningar. Difor må me tenke oss at me deler kompassrosa inn i 8 kakestykke eller delar som alle har ei opning på 360° / 8 = 45°. Kvar retning er då innanfor følgjande vinklar:

  • Nord: 337.5o til 22.5o.
  • Nordvest: 22.5o til 67.5o.
  • Vest: 67.5o til 112.5o.
  • Sørvest: 112.5o til 157.5o.
  • Sør: 157.5o til 202.5o.
  • Søraust: 202.5o til 247.5o.
  • Aust: 247.5o til 292.5o.
  • Nordaust: 292.5o til 337.5o.

Då kan me starte å teste kva retning micro:bit-en peikar i.

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!